| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- // LoopFollow
- // NotLoopingCondition.swift
- import Foundation
- struct NotLoopingCondition: AlarmCondition {
- static let type: AlarmType = .notLooping
- init() {}
- func evaluate(alarm: Alarm, data: AlarmData, now: Date) -> Bool {
- // ────────────────────────────────
- // 0. sanity checks
- // ────────────────────────────────
- guard let thresholdMinutes = alarm.threshold,
- thresholdMinutes > 0 else { return false }
- // We need a valid timestamp (seconds-since-1970) of the last Loop run.
- guard let lastLoopTime = data.lastLoopTime,
- lastLoopTime > 0 else { return false }
- guard let lastChecked = Storage.shared.lastLoopingChecked.value else {
- // Never checked, so don't alarm.
- return false
- }
- let checkedAgeSeconds = now.timeIntervalSince(lastChecked)
- if checkedAgeSeconds > 360 { // 6 minutes
- // The check itself is stale, so the data is unreliable. Don't alarm.
- return false
- }
- // ────────────────────────────────
- // 1. elapsed-time test
- // ────────────────────────────────
- let elapsedSecs = Date().timeIntervalSince1970 - lastLoopTime
- let limitSecs = thresholdMinutes * 60
- return elapsedSecs >= limitSecs
- }
- }
|