Skip to content

Report pump and CGM models to analytics - #2582

Merged
ps2 merged 1 commit into
next-devfrom
analytics/device-models
Oct 14, 2026
Merged

ps2 merged 1 commit into
next-devfrom
analytics/device-models

Conversation

@ps2

@ps2 ps2 commented Oct 14, 2026

Copy link
Copy Markdown
Collaborator

Adds "Pump Model" and "CGM Model" user properties beside the existing "Pump Type" and "CGM Type" (which are the plugin identifiers). The values come from pumpManager.status.device.model and cgmManager.cgmManagerStatus.device?.model.

They are sent at launch and when a manager is set up. They are sent again only when a status update reports a different model, so the frequent pump status updates don't each produce an identify call. A missing model is reported as "Unknown", and removing the device sets the property to "None". Like the other user properties, they are only sent when the user shares usage details with developers.

Several plugins currently report a missing, hard-coded, or localized model, or don't send status updates when it changes. Those fixes belong in the plugins, so they are not part of this PR.

Tested: simulator build of the Loop scheme.

Adds Pump Model and CGM Model user properties from the managers'
HKDevice.model, so analytics can tell which hardware is paired, not just
which plugin. They are sent at setup and launch, and again when a status
update reports a different model.
@ps2
ps2 merged commit 5c58ccd into next-dev Oct 14, 2026
ps2 added a commit that referenced this pull request Oct 18, 2026
Backport of #2574, #2578 and #2582
from next-dev.

- Replace the per-cycle "Loop success", "Loop error" and "CGM Fetch"
  events with one "Daily summary" per local day: loop success count and
  mean/max duration, loop error counts by issue id, the count of stored
  CGM readings, the day's UTC offset, and the settings state (closed
  loop, dosing strategy, integral retrospective correction, glucose based
  partial application). Running totals are kept in UserDefaults and the
  summary is sent on the first loop or CGM reading of the next day.
- Send that settings state as user properties at launch and whenever it
  changes, with "Closed loop enabled change", "Dosing strategy change"
  and "Algorithm experiment change" events. Also send Pump Type and CGM
  Type at launch, and set them to "None" when the device is removed.
- Send Pump Model and CGM Model user properties from the managers'
  HKDevice.model at setup and launch, and when a status update reports a
  different model.
- Stop sending health data: drop bolus units and carb grams, and send
  only the kind of override, and its duration, not preset names, targets
  or sensitivity.
- Send "Override Ended" when a preset is deactivated and "Settings
  Screen" when Settings opens.
- Carb and bolus events from the phone are now in session; from the
  watch and remote commands they stay out of session.
- Replace "Alert Issued" with "Alert Displayed": immediate alerts when
  issued, delayed and repeating alerts after a loop once they have come
  due without being retracted, and loop-not-running notifications when
  Loop infers their delivery.

dev's glucose samples don't record backfill, so the summary counts CGM
readings but has no backfill counts. The summary and state are updated
on the main queue, since dev reports loops and readings from other
queues.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant