Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 19 additions & 4 deletions Loop/Managers/AnalyticsServicesManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -187,8 +187,19 @@ final class AnalyticsServicesManager {
// MARK: - Daily Summary

@MainActor
func didFetchNewCGMData() {
updateDailySummary { $0.cgmFetchCount += 1 }
func didStoreGlucose(_ samples: [StoredGlucoseSample]) {
updateDailySummary { summary in
for sample in samples where !sample.wasUserEntered {
summary.glucoseCount += 1
guard sample.isBackfill else {
continue
}
summary.backfillCount += 1
if let receivedDate = sample.receivedDate {
summary.maxBackfillAge = max(summary.maxBackfillAge, receivedDate.timeIntervalSince(sample.startDate))
}
}
}
}

@MainActor
Expand Down Expand Up @@ -321,7 +332,9 @@ struct AnalyticsDailySummary: Codable, Equatable {
var totalLoopDuration: TimeInterval = 0
var maxLoopDuration: TimeInterval = 0
var loopErrorCounts: [String: Int] = [:]
var cgmFetchCount = 0
var glucoseCount = 0
var backfillCount = 0
var maxBackfillAge: TimeInterval = 0
var state: AnalyticsState?

var properties: [AnyHashable: Any] {
Expand All @@ -333,7 +346,9 @@ struct AnalyticsDailySummary: Codable, Equatable {
"maxLoopDuration": maxLoopDuration,
"loopErrorCount": loopErrorCounts.values.reduce(0, +),
"loopErrorCounts": loopErrorCounts,
"cgmFetchCount": cgmFetchCount
"glucoseCount": glucoseCount,
"backfillCount": backfillCount,
"maxBackfillAgeMinutes": Int(maxBackfillAge.minutes)
]
if let state {
properties["closedLoop"] = state.closedLoop
Expand Down
8 changes: 3 additions & 5 deletions Loop/Managers/DeviceDataManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,9 @@ final class DeviceDataManager {
switch readingResult {
case .newData(let values):
do {
storedNewGlucose = try await !glucoseStore.addGlucoseSamples(values).isEmpty
let storedSamples = try await glucoseStore.addGlucoseSamples(values)
storedNewGlucose = !storedSamples.isEmpty
analyticsServicesManager.didStoreGlucose(storedSamples)
} catch {
log.error("Unable to store glucose: %{public}@", String(describing: error))
}
Expand Down Expand Up @@ -631,10 +633,6 @@ final class DeviceDataManager {

let result = await cgmManager.fetchNewDataIfNeeded()

if case .newData = result {
self.analyticsServicesManager.didFetchNewCGMData()
}

let storedNewGlucose = await self.processCGMReadingResult(cgmManager, readingResult: result)

// A heartbeat/refresh triggers a CGM check; only loop if that check produced a new value
Expand Down