Przeglądaj źródła

Some updates to previous PR

Jon Mårtensson 3 lat temu
rodzic
commit
cc7c1dda4c

+ 29 - 48
FreeAPS/Sources/APS/APSManager.swift

@@ -183,7 +183,7 @@ final class BaseAPSManager: APSManager, Injectable {
         debug(.apsManager, "Starting loop")
         debug(.apsManager, "Starting loop")
 
 
         var loopStatRecord = LoopStats(
         var loopStatRecord = LoopStats(
-            createdAt: Date(),
+            start: Date(),
             loopStatus: "Starting"
             loopStatus: "Starting"
         )
         )
 
 
@@ -207,10 +207,10 @@ final class BaseAPSManager: APSManager, Injectable {
             }
             }
             .sink { [weak self] completion in
             .sink { [weak self] completion in
                 guard let self = self else { return }
                 guard let self = self else { return }
-                loopStatRecord.loopEnd = Date()
-                loopStatRecord.loopDuration = self.roundDouble(
-                    (loopStatRecord.loopEnd! - loopStatRecord.createdAt).timeInterval / 60,
-                    1
+                loopStatRecord.end = Date()
+                loopStatRecord.duration = self.roundDouble(
+                    (loopStatRecord.end! - loopStatRecord.start).timeInterval / 60,
+                    2
                 )
                 )
                 if case let .failure(error) = completion {
                 if case let .failure(error) = completion {
                     loopStatRecord.loopStatus = error.localizedDescription
                     loopStatRecord.loopStatus = error.localizedDescription
@@ -813,7 +813,7 @@ final class BaseAPSManager: APSManager, Injectable {
 
 
         // Retrieve the loopStats data
         // Retrieve the loopStats data
         let lsData = storage.retrieve(OpenAPS.Monitor.loopStats, as: [LoopStats].self)?
         let lsData = storage.retrieve(OpenAPS.Monitor.loopStats, as: [LoopStats].self)?
-            .sorted { $0.createdAt > $1.createdAt } ?? []
+            .sorted { $0.start > $1.start } ?? []
 
 
         var successRate: Double?
         var successRate: Double?
         var successNR = 0.0
         var successNR = 0.0
@@ -824,7 +824,6 @@ final class BaseAPSManager: APSManager, Injectable {
         var maximumLoopTime = 0.0
         var maximumLoopTime = 0.0
         var timeIntervalLoops = 0.0
         var timeIntervalLoops = 0.0
         var previousTimeLoop = Date()
         var previousTimeLoop = Date()
-        var endTimeForOneLoop = Date()
         var timeForOneLoop = 0.0
         var timeForOneLoop = 0.0
         var averageLoopTime = 0.0
         var averageLoopTime = 0.0
         var timeForOneLoopArray: [Double] = []
         var timeForOneLoopArray: [Double] = []
@@ -832,18 +831,16 @@ final class BaseAPSManager: APSManager, Injectable {
         var timeIntervalLoopArray: [Double] = []
         var timeIntervalLoopArray: [Double] = []
         var medianInterval = 0.0
         var medianInterval = 0.0
         var averageIntervalLoops = 0.0
         var averageIntervalLoops = 0.0
-        var successIs = false
 
 
         if !lsData.isEmpty {
         if !lsData.isEmpty {
             var i = 0.0
             var i = 0.0
-            var j = 0.0
 
 
-            if let loopEnd = lsData[0].loopEnd {
+            if let loopEnd = lsData[0].end {
                 previousTimeLoop = loopEnd
                 previousTimeLoop = loopEnd
             }
             }
 
 
             for each in lsData {
             for each in lsData {
-                if let loopEnd = each.loopEnd, let loopDuration = each.loopDuration {
+                if let loopEnd = each.end, let loopDuration = each.duration {
                     if each.loopStatus.contains("Success") {
                     if each.loopStatus.contains("Success") {
                         successNR += 1
                         successNR += 1
                     } else {
                     } else {
@@ -852,7 +849,7 @@ final class BaseAPSManager: APSManager, Injectable {
                     i += 1
                     i += 1
 
 
                     if previousTimeLoop != loopEnd {
                     if previousTimeLoop != loopEnd {
-                        timeIntervalLoops = (previousTimeLoop - each.createdAt).timeInterval / 60
+                        timeIntervalLoops = (previousTimeLoop - each.start).timeInterval / 60
                     } else {
                     } else {
                         timeIntervalLoops = 0.0
                         timeIntervalLoops = 0.0
                     }
                     }
@@ -894,15 +891,16 @@ final class BaseAPSManager: APSManager, Injectable {
             // Median values
             // Median values
             medianLoopTime = medianCalculation(array: timeForOneLoopArray)
             medianLoopTime = medianCalculation(array: timeForOneLoopArray)
             medianInterval = medianCalculation(array: timeIntervalLoopArray)
             medianInterval = medianCalculation(array: timeIntervalLoopArray)
-
-            averageIntervalLoops = roundDouble(averageIntervalLoops, 1)
-            medianInterval = roundDouble(medianInterval, 1)
-            medianLoopTime = roundDouble(medianLoopTime, 1)
-            averageLoopTime = roundDouble(averageLoopTime, 1)
-            minimumInt = roundDouble(minimumInt, 1)
-            maximumInt = roundDouble(maximumInt, 1)
         }
         }
 
 
+        if minimumInt == 999.0 {
+            minimumInt = 0.0
+        } else { minimumInt = roundDouble(minimumInt, 1) }
+
+        if minimumLoopTime == 9999.0 {
+            minimumLoopTime = 0.0
+        } else { minimumLoopTime = roundDouble(minimumLoopTime, 2) }
+
         // Time In Range (%) and Average Glucose (24 hours). This looks dumb and I will refactor it later.
         // Time In Range (%) and Average Glucose (24 hours). This looks dumb and I will refactor it later.
         let glucose = storage.retrieve(OpenAPS.Monitor.glucose, as: [BloodGlucose].self)
         let glucose = storage.retrieve(OpenAPS.Monitor.glucose, as: [BloodGlucose].self)
 
 
@@ -1125,7 +1123,6 @@ final class BaseAPSManager: APSManager, Injectable {
         var bgString30Days = ""
         var bgString30Days = ""
         var bgString90Days = ""
         var bgString90Days = ""
         var bgAverageTotalString = ""
         var bgAverageTotalString = ""
-        var loopString = ""
 
 
         // round output values
         // round output values
         daysBG = roundDecimal(daysBG, 1)
         daysBG = roundDecimal(daysBG, 1)
@@ -1174,34 +1171,18 @@ final class BaseAPSManager: APSManager, Injectable {
 
 
         let bgAverageString = bgString1day + bgString7Days + bgString30Days + bgString90Days + bgAverageTotalString
         let bgAverageString = bgString1day + bgString7Days + bgString30Days + bgString90Days + bgAverageTotalString
 
 
-        var minString = ""
-        if minimumInt == 999.00 {
-            minString = "Shortest Time Interval: N/A min, "
-        } else { minString = "Shortest Time Interval: \(minimumInt) min," }
-        var maxString = ""
-        if maximumInt == 0.0 {
-            maxString = "Longest Time Interval: N/A min."
-        } else { maxString = "Longest Time Interval: \(maximumInt) min." }
-
-        if minimumLoopTime != 9999.0 {
-            loopString += " Shortest Loop: \(minimumLoopTime) min. "
-        }
-        if maximumLoopTime != 0.0 {
-            loopString += "Longest Loop: \(maximumLoopTime) min."
-        }
-
         let loopstat = LoopCycles(
         let loopstat = LoopCycles(
-            success_perc: Int(round(successRate ?? 0)),
+            success_rate: Decimal(round(successRate ?? 0)),
             loops: Int(successNR),
             loops: Int(successNR),
             errors: Int(errorNR),
             errors: Int(errorNR),
-            median_interval: String(medianInterval),
-            avg_interval: String(averageIntervalLoops),
-            max_interval: String(maximumInt),
-            min_interval: String(minimumInt),
-            median_loop: String(medianLoopTime),
-            avg_loop: String(averageLoopTime),
-            max_loop: String(maximumLoopTime),
-            min_loop: String(minimumLoopTime)
+            median_interval: roundDecimal(Decimal(medianInterval), 1),
+            avg_interval: roundDecimal(Decimal(averageIntervalLoops), 1),
+            min_interval: roundDecimal(Decimal(minimumInt), 1),
+            max_interval: roundDecimal(Decimal(maximumInt), 1),
+            median_duration: roundDecimal(Decimal(medianLoopTime), 2),
+            avg_duration: roundDecimal(Decimal(averageLoopTime), 1),
+            min_duration: roundDecimal(Decimal(minimumLoopTime), 1),
+            max_duration: roundDecimal(Decimal(maximumLoopTime), 1)
         )
         )
 
 
         let dailystat = DailyStats(
         let dailystat = DailyStats(
@@ -1244,10 +1225,10 @@ final class BaseAPSManager: APSManager, Injectable {
         var uniqEvents: [LoopStats] = []
         var uniqEvents: [LoopStats] = []
 
 
         storage.transaction { storage in
         storage.transaction { storage in
-            storage.append(loopStatRecord, to: file, uniqBy: \.createdAt)
+            storage.append(loopStatRecord, to: file, uniqBy: \.start)
             uniqEvents = storage.retrieve(file, as: [LoopStats].self)?
             uniqEvents = storage.retrieve(file, as: [LoopStats].self)?
-                .filter { $0.createdAt.addingTimeInterval(24.hours.timeInterval) > Date() }
-                .sorted { $0.createdAt > $1.createdAt } ?? []
+                .filter { $0.start.addingTimeInterval(24.hours.timeInterval) > Date() }
+                .sorted { $0.start > $1.start } ?? []
 
 
             storage.save(Array(uniqEvents), as: file)
             storage.save(Array(uniqEvents), as: file)
         }
         }

+ 15 - 15
FreeAPS/Sources/Models/DailyStats.swift

@@ -97,31 +97,31 @@ extension DailyStats {
 }
 }
 
 
 struct LoopCycles: JSON, Equatable {
 struct LoopCycles: JSON, Equatable {
-    var success_perc: Int
+    var success_rate: Decimal
     var loops: Int
     var loops: Int
     var errors: Int
     var errors: Int
-    var median_interval: String
-    var avg_interval: String
-    var max_interval: String
-    var min_interval: String
-    var median_loop: String
-    var avg_loop: String
-    var max_loop: String
-    var min_loop: String
+    var median_interval: Decimal
+    var avg_interval: Decimal
+    var min_interval: Decimal
+    var max_interval: Decimal
+    var median_duration: Decimal
+    var avg_duration: Decimal
+    var min_duration: Decimal
+    var max_duration: Decimal
 }
 }
 
 
 extension LoopCycles {
 extension LoopCycles {
     private enum CodingKeys: String, CodingKey {
     private enum CodingKeys: String, CodingKey {
-        case success_perc
+        case success_rate
         case loops
         case loops
         case errors
         case errors
         case median_interval
         case median_interval
         case avg_interval
         case avg_interval
-        case max_interval
         case min_interval
         case min_interval
-        case median_loop
-        case avg_loop
-        case max_loop
-        case min_loop
+        case max_interval
+        case median_duration
+        case avg_duration
+        case min_duration
+        case max_duration
     }
     }
 }
 }

+ 8 - 8
FreeAPS/Sources/Models/LoopStats.swift

@@ -1,25 +1,25 @@
 import Foundation
 import Foundation
 
 
 struct LoopStats: JSON, Equatable {
 struct LoopStats: JSON, Equatable {
-    var createdAt: Date
-    var loopEnd: Date?
-    var loopDuration: Double?
+    var start: Date
+    var end: Date?
+    var duration: Double?
     var loopStatus: String
     var loopStatus: String
 
 
     init(
     init(
-        createdAt: Date,
+        start: Date,
         loopStatus: String
         loopStatus: String
     ) {
     ) {
-        self.createdAt = createdAt
+        self.start = start
         self.loopStatus = loopStatus
         self.loopStatus = loopStatus
     }
     }
 }
 }
 
 
 extension LoopStats {
 extension LoopStats {
     private enum CodingKeys: String, CodingKey {
     private enum CodingKeys: String, CodingKey {
-        case createdAt
-        case loopEnd
-        case loopDuration
+        case start
+        case end
+        case duration
         case loopStatus
         case loopStatus
     }
     }
 }
 }