diff --git a/projects/gps-rmm-audit/backup-map.md b/projects/gps-rmm-audit/backup-map.md index fe488823..220ea7f7 100644 --- a/projects/gps-rmm-audit/backup-map.md +++ b/projects/gps-rmm-audit/backup-map.md @@ -1,130 +1,117 @@ -# GPS Backup Verification — Per-Customer Destination Map +# GPS Backup Verification — Per-Customer Destination + Status Map -**Purpose:** Resolve every billed GPS "Data Backup" line to a real, *working* destination. -Feeds Phase 4 of the GPS -> GuruRMM coverage audit. See `wiki/projects/gps-rmm-audit.md`. +**Purpose:** For every GPS client, resolve the billed backup line to a real, *working* +destination and verify a machine is actually backing up. Phase 4 of the GPS -> GuruRMM +audit. See `wiki/projects/gps-rmm-audit.md`. -- Built 2026-07-05 (Howard). Sources: **MSP360 MBS API (authoritative backup layer)** + - B2 (destination) + Seafile + ownCloud. Datto Workplace pending Mike's super-admin key. -- **MSP360 is the source of truth for "is it backing up":** `/api/Monitoring` reports every - backup plan (computer, last run, status, data) across 37 companies / 66 plans. B2 buckets - are just where the Cloud plans land. Creds: `msp-tools/msp360-api.sops.yaml`. -- Billed-backup flags from tracker.md `Svc` column (B = Data Backup billed). -- Reconciliation note: bucket presence != a backup ran. MSP360 `LastStart` + `Status` is the - real signal — used below. +- Last verified: **2026-07-06 (Howard)**. Sources (all live): + - **Syncro recurring schedules** = authoritative "billed backup seats" (Data Backup line + qty per client). Pulled 2026-07-06 across all 40 GPS customers. + - **MSP360 MBS `/api/Monitoring`** = authoritative "is it backing up" (per-machine last + run + status). Via the `msp360` skill. + - **B2 / Seafile / ownCloud** = destination/backend detail. **Datto Workplace pending** + Mike's super-admin key. +- **Only 16 of 40 GPS clients actually bill a backup line** (Syncro-verified). The tracker's + old `Svc=B` flags were wrong for several — corrected here. +- Rule (Howard): a client passes if a machine is currently backing up per the billed seats; + old restore points sitting in a bucket are fine as long as something current runs. Seat + vs machine mismatches are a BILLING question for Mike/Winter, not a deploy instruction + ([[feedback_backup_targets_never_guessed]]). --- -## 1. Billed-backup GPS clients (Svc = B) -> verified status +## 1. Billed-backup clients (16) — seats vs machines actually backing up -20 of the 40 active GPS clients bill a Data Backup line. +| Client | Seats | $/mo | Current backups | Verdict | +|--------|:-----:|:----:|-----------------|---------| +| Dataforth Corp | 7 | 95 | 7 machines daily (AD1/AD2/…) | **OK** | +| Valley Wide Plastering | 4 | 60 | VWP-FILES/QBS/SERVER/WINFileSvr | **OK** (VWP-SERVER has a bogus 2051 timestamp — cosmetic) | +| Curtis Plumbing | 2 | 50 | CP-QB + SRV02 daily | **OK** | +| Ridgetop Group | 1 | 0 | RGI-DC | **OK** | +| Brett Interiors | 1 | 15 | Server image daily | **OK** | +| Gary A Hartman LLC | 1 | 20 | DESKTOP-EVA4H1A | **OK** | +| Mineralogical Record | 1 | 10 | ownCloud `minrec` (98 GB) | **OK — confirm** ownCloud sync-active (slow query pending) | +| Jimmy Company | 12 | 240 | Blaster2 only (1 machine) | **REVIEW** — 12 seats billed, 1 machine (known 12/1 anomaly) | +| Glaz-Tech Industries | 2 | 45 | GTI-FINANCESVR current; **GTI-INV-VMHOST 251d stale** | **REVIEW** — 2 seats, 1 truly current | +| Grabb & Durando Law | 1 | 49 | GND-SERVER cloud plan **failing / 0 bytes (flapping)** | **NOT BACKING UP** | +| Bill Tedards | 1 | 45 | DESKTOP-SUFJR0J **last good 359d ago** | **NOT BACKING UP** (stale ~12 mo) | +| Arizona Medical Transit | 1 | 0 | MSP360 company exists, **0 plans** | **NOT BACKING UP** | +| Reliant Well Drilling | 1 | 40 | none found (no MSP360/B2/Seafile/ownCloud) | **HELD — unconfirmed** (Datto key) | +| The Prairie Schooner | 1 | 10 | none found | **HELD — unconfirmed** (Datto key) | +| Janet Altschuler | 2 | 0 | none found | **HELD — unconfirmed** (Datto key) | +| Design and Brand Envoys | 1 | 0 | none found | **HELD — unconfirmed** (Datto key) | -| Client | Bkt | Backing up? | Evidence (MSP360 unless noted) | Verdict | -|--------|:---:|:-----------:|-------------------------------|---------| -| Dataforth Corp | A | YES | 12 plans, AD1/AD2/etc daily Success (-> `ACG-Dataforth`) | RESOLVED | -| Valley Wide Plastering | A | YES | 4 plans, VWP-* daily Success (-> `VWP-Backup`) | RESOLVED | -| Arizona Medical Transit | A | **NO** | MSP360 company exists, **0 backup plans** | **FINDING: billed, not backing up** | -| Glaz-Tech Industries | B | PARTIAL | GTI-FINANCESVR daily Success; **GTI-INV-VMHOST last 2025-10-26 (stale)** (-> `ACG-GLAZTECH`) | RESOLVED (1 server stale) | -| Jimmy Company | B | YES | Blaster2 Cloud Success; local plans failing (disk full) | RESOLVED (billing flag: 12 billed/1 box) | -| Horseshoe Management | B | YES | HSM-NewServer daily Success (-> `Horseshoe`) | RESOLVED | -| Grabb & Durando Law | B | **NO** | GND-SERVER Cloud plan **status=Failed, 0 bytes** | **FINDING: backup failing** | -| Quantum Wealth Mgmt | B | ? | **No MSP360 company** | MISSING — Datto candidate | -| Reliant Well Drilling | C | ? | **No MSP360 company** | MISSING — Datto candidate | -| Curtis Plumbing | C | YES | CP-QB + SRV02 daily Success | RESOLVED | -| The Prairie Schooner | C | ? | **No MSP360 company** | MISSING — Datto candidate | -| Mineralogical Record | C | YES | ownCloud `minrec` (98 GB) | RESOLVED (ownCloud) | -| T & C Sorensen | C | **NO** | MSP360 company "Sorensen" exists, **0 plans** (ACG-TCA is NOT theirs — see §3) | **FINDING: billed, not backing up** | -| Ridgetop Group | C | YES | RGI-DC Cloud Success | RESOLVED | -| Brett Interiors | C | YES | Server image daily Success (-> `ACG-Brett`) | RESOLVED | -| Bill Tedards | C | **STALE** | Tedards DESKTOP-SUFJR0J last Success **2025-07-12 (~1 yr ago)** | **FINDING: backup stale ~12 mo** | -| Janet Altschuler | C | ? | **No MSP360 company** | MISSING — Datto candidate | -| Business Svcs of Tucson | C | YES | KAT1 Local Profile Success (-> `ACG-BST` + ownCloud `bst`) | RESOLVED | -| Design and Brand Envoys | C | ? | **No MSP360 company** | MISSING — Datto candidate | -| Gary A Hartman LLC | C | YES | Hartman DESKTOP-EVA4H1A backing up (path warnings) | RESOLVED | +**Rollup (16 billed):** 7 OK · 2 REVIEW (seat>machine) · 3 NOT BACKING UP (Grabb, Tedards, +AMT) · 4 HELD-unconfirmed pending Datto Workplace enumeration. -**Tally (20):** 11 RESOLVED (actively backing up) · 4 FINDINGS (destination exists but -broken) · 5 MISSING (no destination anywhere — Datto candidates). - -- **MISSING (5) — check once Datto enumerates:** Quantum Wealth, Reliant Well Drilling, - The Prairie Schooner, Janet Altschuler, Design and Brand Envoys. If not Datto users, these - are billed-but-unbacked. +The 4 HELD are billed for backup but have no destination in any backend we can currently +read. They are **not** flagged as failing — they may be Datto Workplace users. Re-check the +moment Mike enables the super-admin API key: +`py .claude/skills/datto-workplace/scripts/datto_workplace.py projects --json`. --- -## 2. Backup-health findings (billed + configured, but NOT protected right now) +## 2. Revenue leak — backing up but NOT billed for backup (GPS clients) -These are the highest-priority operational findings — the client pays for backup and a -destination/company exists, but no good recent restore point is being produced. +Machine actively backing up in MSP360, but Syncro has **no Data Backup line**. Bill vs +decommission = Mike/Winter decision (HELD, nothing sent). -| Client | Machine | Problem | Last good backup | -|--------|---------|---------|------------------| -| Arizona Medical Transit | — | MSP360 company but **zero plans** configured | never | -| T & C Sorensen | — | MSP360 company "Sorensen" but **zero plans** | never | -| Grabb & Durando | GND-SERVER | Cloud plan **Status=Failed, 0 bytes** | check console for last success | -| Bill Tedards | DESKTOP-SUFJR0J | Backing up but **last success ~2025-07-12** (~12 mo stale) | 2025-07-12 | -| Glaz-Tech | GTI-INV-VMHOST | Second server image **last 2025-10-26** (~8 mo stale); GTI-FINANCESVR is current | 2025-10-26 | -| Len's Auto | LAB-SVR | IMAGE last 2026-06-07, FILES last 2026-06-17 — matches tracker "LAB-SVR offline since 2026-06-18" | 2026-06-17 | +| Client | Backing up | Backend | +|--------|-----------|---------| +| Cascades of Tucson | CS-SERVER daily | B2 `ACG-Cascades` | +| Len's Auto Brokerage | LAB-SVR (now stale) | B2 `ACG-Lens` | +| Russo Law Firm | RUSSO-SRV (2.7 TB) + Seafile 2.2 TB | Cloud + Seafile | +| Horseshoe Management | HSM-NewServer daily | B2 `Horseshoe` | +| Business Services of Tucson | KAT1 daily | B2 `ACG-BST` + ownCloud `bst` | -Also non-GPS but worth a note to Mike: **Peaceful Spirit** PST-SERVER Files plan -**Status=Failed** (0 bytes) despite 22K historical files in `ACG-PST`; **Desert RV** -local-storage plan Critical (E:\ unreachable). These are outside GPS scope. +Also non-GPS (outside audit scope): The Marc Group (ownCloud, billed email only), + the +orphan destinations in §4. + +## 2b. $0-priced backup lines (billed a seat at $0 — bundled or under-billed) + +Ridgetop Group, Janet Altschuler, Design & Brand Envoys, Arizona Medical Transit — each has +a Data Backup line at $0 `price_retail`. Flag for Mike/Winter (bundled deliberately, or +should be billing?). + +## 2c. Corrections vs the (deleted) 2026-07-05 Winter message + +The weekend findings DM to Winter was deleted 2026-07-06 (wrong). Key corrections now: +- **T&C Sorensen** and **Quantum Wealth** do NOT bill for backup — not backup concerns. +- **Business Services of Tucson**: not billed but IS backing up -> a leak (§2), not a gap. +- **Mineralogical Record**: billed + on ownCloud (message wrongly said "nothing running"). +- `ACG-TCA` = Tucson Coin & Autograph, NOT T&C Sorensen; `ACG-PST` = Peaceful Spirit. --- -## 3. Revenue-leak / billing-mismatch (data landing, backup NOT billed) — held for Mike/Winter +## 3. Backend destinations (reference) -| Client | Destination | Billed Svc | Note | -|--------|-------------|:----------:|------| -| Cascades of Tucson | MSP360 CS-SERVER -> `ACG-Cascades` (active Success) | A E V | Backing up, **no B line billed** | -| Len's Auto Brokerage | MSP360 LAB-SVR -> `ACG-Lens` | E | Has backups, no B line (and LAB-SVR now stale) | -| Russo Law Firm | MSP360 RUSSO-SRV -> Cloud (2.7 TB) + Seafile `russo@rrs-law.com` (2.2 TB) | A E V | Backing up + 2.2 TB Seafile, **no B line** | -| The Marc Group | ownCloud `themarcgroup` (29 GB) | E | 29 GB stored, billed email only | +- **MSP360/B2 Cloud plans**: the bulk of GPS backups. Bucket = destination; MSP360 = truth. +- **Seafile**: Russo (russo@rrs-law.com, 2.2 TB) among GPS; rest non-GPS/internal. +- **ownCloud**: Mineralogical (`minrec`), The Marc Group (`themarcgroup`), Business Svcs + (`bst`); `pavon` 14.2 TB = video archive, not a backup. +- **Datto Workplace**: Birth Biologic confirmed (RMM detection); full enumeration pending + Mike's super-admin key. The 4 HELD clients in §1 are the ones to check there. ---- +## 4. Orphan destinations — identified (non-GPS / internal / stale) -## 4. Orphan destinations — identified (non-GPS clients / ACG internal / stale) - -All resolved via MSP360 company names + IX cPanel map + client wiki. None are GPS gaps. - -**Now identified (were unknown):** -- `ACG-PST` (22,054 files) = **Peaceful Spirit** (MSP360 PST-SERVER; current plan failing). -- `ACG-TCA` (404 files) = **Tucson Coin and Autograph** (MSP360 DESKTOP-P36LUUN + Seth-PC, - both Success). NOT T&C Sorensen. -- `ownCloud mara` / `jburger` — still unidentified (small; low priority). - -**Non-GPS clients with active MSP360 backups (not audit gaps):** Financial Safeguards -(FSG-SRV-02 **active** — the `MSPBackups20200311` bucket is stale but FSG uses a current -one), Rednour Law (`ACG-REDNOUR`), Rohrbach (`ACG-Rohrbach` + ownCloud), Martell & -Associates (ownCloud `Martell`), Universal Cryogenics, Tucson Coin & Autograph, Tucson -Safety and Medical (last 2026-02-25 — stale), Khalsa Montessori, LaHC, Desert RV, Anaise, -Peaceful Spirit. - -**ACG internal:** `ACG-Internal`, `ACG-Tech03L-Backup`, ownCloud `sysadmin`, Seafile -`mike`/`howard`, MSP360 ACG-Internal (NEPTUNE Exchange backup). - -**Not a backup:** ownCloud `pavon` (14.2 TB) — Pavon video-surveillance archive, ownCloud -is source of truth (`wiki/clients/pavon.md`). - -**Stale / cleanup (Mike's call):** `MSPBackups20200311` (ex-client FSG, 2021). - ---- - -## 5. Datto Workplace (enumeration pending Mike's super-admin key) - -- Confirmed via RMM detection: Birth Biologic (`ACG-DWP-X-BB`, `BB-*`/`KSTEEN*`/`EVO-X1`). -- When the key lands: `py .claude/skills/datto-workplace/scripts/datto_workplace.py projects --json`, - then check the 5 MISSING clients (§1) against it. +`ACG-PST`=Peaceful Spirit (22k files) · `ACG-TCA`=Tucson Coin & Autograph · `ACG-REDNOUR`= +Rednour Law · `ACG-Rohrbach`=Rohrbach · `ACG-IX`/`ACG-Internal`/`ACG-Tech03L`=ACG internal · +`MSPBackups20200311`=stale ex-client FSG (deletion candidate) · Seafile Stoltz Law / Sonoran +Glass = non-GPS · ownCloud `mara`/`jburger` = still unidentified. --- ## Next actions -1. **Datto (blocked on Mike):** enumerate; resolve the 5 MISSING — Quantum Wealth, Reliant, - Prairie Schooner, Janet Altschuler, Design & Brand Envoys. -2. **Backup-health findings (§2) — operational, fix these:** AMT + T&C Sorensen have no - backup plans at all; Grabb GND-SERVER failing; Bill Tedards ~12 mo stale; Glaz-Tech - GTI-INV-VMHOST ~8 mo stale; Len's LAB-SVR stale (offline). Route per client. -3. **Held for Mike/Winter (§3):** Cascades/Len's unbilled backups; Russo 2.7 TB Cloud + 2.2 TB - Seafile no B line; Marc Group ownCloud. -4. **Cleanup:** confirm `MSPBackups20200311` (FSG) for deletion; identify ownCloud `mara`/`jburger`. -5. Optional: build a small `msp360` read-only skill (login + Monitoring) — this pass was done - via direct API; a skill would make backup-status checks repeatable for the whole fleet. +1. **Datto (blocked on Mike):** enumerate; resolve the 4 HELD — Reliant, Prairie Schooner, + Janet Altschuler, Design & Brand Envoys. +2. **Not backing up — operational, route per client (HELD for Mike/Winter, not sent):** + Grabb GND-SERVER failing (0 bytes); Bill Tedards ~12 mo stale; AMT 0 plans; Glaz-Tech + GTI-INV-VMHOST 251d. +3. **Confirm Mineralogical** ownCloud `minrec` is sync-active (ownCloud usage query is slow). +4. **Billing questions (HELD, Mike/Winter):** the 5 leaks (§2), the $0 lines (§2b), Jimmy + 12/1 seat gap. +5. Nothing outbound until Howard releases — the weekend Winter DM was deleted as wrong. + +*Data: `gps-clients.json` (40 clients + cids). Backup-status source: `msp360` skill + +memory `[[reference_msp360_backup_monitoring]]`.* diff --git a/projects/gps-rmm-audit/needs-screenconnect.md b/projects/gps-rmm-audit/needs-screenconnect.md index 4cdc3fd4..54b9837b 100644 --- a/projects/gps-rmm-audit/needs-screenconnect.md +++ b/projects/gps-rmm-audit/needs-screenconnect.md @@ -3,11 +3,10 @@ Online = ActiveConnections ProcessType==2 (guest agent connected). Recency = GuestInfoUpdateTime. Rebuilt 2026-07-04. Staging installer pushed to all ONLINE machines (land in Staging -> reassign-staging.py). -## ONLINE now (2) +## ONLINE now (1) - IMC-PRINTSERVER [Instrumental Music Center] (1d) -- ZEUS-SHERRI [Zeus Nestora] (0d) -## active <=14d (14) +## active <=14d (13) - KAT1 [Business Services of Tucson LLC] (0d) - HSM-CATHY [Horseshoe Management] (3d) - IMC-M-EDSERVICE [Instrumental Music Center] (4d) @@ -21,12 +20,11 @@ Rebuilt 2026-07-04. Staging installer pushed to all ONLINE machines (land in Sta - DESKTOP-V9F9L23 [Safesite] (0d) - JEREE [Stamback Septic] (3d) - DESKTOP-6HT5SJ9 [The Marc Group] (0d) -- ZEUS1 [Zeus Nestora] (2d) ## stale 15-45d (4) - GND-L-3 [Grabb & Durando Law Office] (22d) - DESKTOP-KRHQ5TS [Instrumental Music Center] (17d) -- RWD-ALLENDESKTO [Reliant Well Drilling and Pump Corporate] (19d) +- RWD-ALLENDESKTO [Reliant Well Drilling and Pump Corporate] (20d) - DESKTOP-FMDIK0Q [Safesite] (44d) ## dead/no-session (58) diff --git a/projects/gps-rmm-audit/out2.json b/projects/gps-rmm-audit/out2.json deleted file mode 100644 index 1a1fed9a..00000000 --- a/projects/gps-rmm-audit/out2.json +++ /dev/null @@ -1,42 +0,0 @@ -[ -{"client":"Instrumental Music Center","cid":7088508,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[365662],"frequency":"Monthly","note":"no backup line"}, -{"client":"Safesite","cid":26563106,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[374386],"frequency":"Monthly","note":"no backup line"}, -{"client":"Horseshoe Management","cid":625269,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[323028,2379],"frequency":"Monthly","note":"no backup line"}, -{"client":"Grabb & Durando Law Office","cid":14232794,"backup_seats":1,"backup_monthly":49,"backup_lines":["Service - Data Backup"],"schedule_ids":[478096,126669],"frequency":"Monthly","note":"ok"}, -{"client":"Quantum Wealth Management","cid":7088747,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[456876,193901],"frequency":"Monthly","note":"no backup line"}, -{"client":"Jimmy Company","cid":18560272,"backup_seats":12,"backup_monthly":240,"backup_lines":["Service - Data Backup"],"schedule_ids":[402452,205345],"frequency":"Annually","note":"ok"}, -{"client":"Stamback Septic","cid":11513046,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[215079,154608],"frequency":"Monthly","note":"no backup line"}, -{"client":"Reliant Well Drilling and Pump Corporate","cid":10736261,"backup_seats":1,"backup_monthly":40,"backup_lines":["Service - Data Backup"],"schedule_ids":[144683,54149],"frequency":"Monthly","note":"ok"}, -{"client":"Zeus Nestora","cid":1196974,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[8332],"frequency":"Monthly","note":"no backup line"}, -{"client":"Little Hearts Little Hands","cid":1144233,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[333952,7547],"frequency":"Monthly","note":"no backup line"}, -{"client":"PUTT LAND SURVEYING, INC.","cid":7180175,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[418370],"frequency":"Monthly","note":"no backup line"}, -{"client":"Curtis Plumbing","cid":416585,"backup_seats":2,"backup_monthly":50,"backup_lines":["Service - Data Backup"],"schedule_ids":[242342,9956,3399],"frequency":"Monthly","note":"ok"}, -{"client":"The Prairie Schooner","cid":3664974,"backup_seats":1,"backup_monthly":10,"backup_lines":["Service - Data Backup"],"schedule_ids":[113429,46694],"frequency":"Monthly","note":"ok"}, -{"client":"Mineralogical Record","cid":207770,"backup_seats":1,"backup_monthly":10,"backup_lines":["Service - Data Backup"],"schedule_ids":[334414],"frequency":"Monthly","note":"ok"}, -{"client":"T & C Sorensen","cid":344886,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[339403,269337,53177,53172,11392],"frequency":"Annually","note":"no backup line"}, -{"client":"MVAN Enterprises Inc","cid":29462761,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[379467],"frequency":"Monthly","note":"no backup line"}, -{"client":"Ridgetop Group","cid":9413367,"backup_seats":1,"backup_monthly":0,"backup_lines":["Service - Data Backup"],"schedule_ids":[155169],"frequency":"Monthly","note":"ok"}, -{"client":"Multicultural Counseling Center","cid":35483539,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[505004,498702],"frequency":"Annually","note":"no backup line"}, -{"client":"Brett Interiors","cid":15726057,"backup_seats":1,"backup_monthly":15,"backup_lines":["Service - Data Backup"],"schedule_ids":[101780],"frequency":"Monthly","note":"ok"}, -{"client":"Heieck, Sheila","cid":12045942,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[87583],"frequency":"Monthly","note":"no backup line"}, -{"client":"The Marc Group","cid":869073,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[51489,5669,3330],"frequency":"Annually","note":"no backup line"}, -{"client":"Residential and Renovation Engineering","cid":7088403,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[336905,335126,66653],"frequency":"Monthly","note":"no backup line"}, -{"client":"Bill Tedards","cid":487887,"backup_seats":1,"backup_monthly":45,"backup_lines":["Service - Data Backup"],"schedule_ids":[2023],"frequency":"Monthly","note":"ok"}, -{"client":"Janet Altschuler","cid":457710,"backup_seats":2,"backup_monthly":0,"backup_lines":["Service - Data Backup"],"schedule_ids":[2666],"frequency":"Monthly","note":"ok"}, -{"client":"Business Services of Tucson LLC","cid":29338800,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[503850,373682],"frequency":"Annually","note":"no backup line"}, -{"client":"Andy's Mobile Fuel","cid":27364453,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[305466,305246],"frequency":"Monthly","note":"no backup line"}, -{"client":"Design and Brand Envoys","cid":26747288,"backup_seats":1,"backup_monthly":0,"backup_lines":["Service - Data Backup"],"schedule_ids":[332981,321139],"frequency":"Monthly","note":"ok"}, -{"client":"Pro-Tech Services","cid":23702122,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[389697],"frequency":"Monthly","note":"no backup line"}, -{"client":"Inside Track Productions","cid":3021358,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[30294,29759],"frequency":"Monthly","note":"no backup line"}, -{"client":"Gary A Hartman LLC","cid":29038261,"backup_seats":1,"backup_monthly":20,"backup_lines":["Service - Data Backup"],"schedule_ids":[351565],"frequency":"Monthly","note":"ok"}, -{"client":"Robyn Pittman","cid":17031534,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[114036],"frequency":"Monthly","note":"no backup line"}, -{"client":"Marty Ryan","cid":140717,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[336179,123459,713],"frequency":"Annually","note":"no backup line"}, -{"client":"Dataforth Corp","cid":578095,"backup_seats":7,"backup_monthly":95,"backup_lines":["Service - Data Backup","Service - Data Backup","Service - Data Backup"],"schedule_ids":[378819,362646],"frequency":"Monthly","note":"ok"}, -{"client":"Cascades of Tucson","cid":20149445,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[434199],"frequency":"Monthly","note":"no backup line"}, -{"client":"Valley Wide Plastering","cid":31694734,"backup_seats":4,"backup_monthly":60,"backup_lines":["Service - Data Backup"],"schedule_ids":[500734,500215],"frequency":"Monthly","note":"ok"}, -{"client":"Len's Auto Brokerage","cid":3289131,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[482424,11865],"frequency":"Monthly","note":"no backup line"}, -{"client":"Arizona Medical Transit","cid":7088349,"backup_seats":1,"backup_monthly":0,"backup_lines":["Service - Data Backup"],"schedule_ids":[151853,35028],"frequency":"Monthly","note":"ok"}, -{"client":"AT Trebesch","cid":238740,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[2387],"frequency":"Monthly","note":"no backup line"}, -{"client":"Russo Law Firm","cid":23331699,"backup_seats":0,"backup_monthly":0,"backup_lines":[],"schedule_ids":[513484,509659,499925],"frequency":"Monthly","note":"no backup line"}, -{"client":"Glaz-Tech Industries","cid":143932,"backup_seats":2,"backup_monthly":45,"backup_lines":["Service - Data Backup","Service - Data Backup"],"schedule_ids":[134087],"frequency":"Monthly","note":"ok"} -] diff --git a/projects/gps-rmm-audit/pull_backup.sh b/projects/gps-rmm-audit/pull_backup.sh deleted file mode 100644 index d7df1b81..00000000 --- a/projects/gps-rmm-audit/pull_backup.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env bash -set -u -BASE="https://computerguru.syncromsp.com/api/v1" -KEY="Tde5174a6e9e312d14-02fd5bfe0f0ee40c87d027507c680e18" -CLIENTS="C:/claudetools/projects/gps-rmm-audit/gps-clients.json" - -# iterate customers -n=$(jq 'length' "$CLIENTS") -echo "[" -first=1 -for i in $(seq 0 $((n-1))); do - client=$(jq -r ".[$i].client" "$CLIENTS") - cid=$(jq -r ".[$i].cid" "$CLIENTS") - - # fetch schedules list - slist=$(curl -s "$BASE/schedules?customer_id=$cid&api_key=$KEY" | tr -d '\000-\037') - sids=$(echo "$slist" | jq -r '.schedules[]?.id' 2>/dev/null) - - seats=0 - monthly=0 - lines_json="[]" - sids_json="[]" - freq="null" - note="ok" - - if [ -z "$sids" ]; then - note="no recurring schedule" - seats=0 - else - # collect sids into json array - sids_json=$(echo "$sids" | jq -R . | jq -s -c 'map(tonumber)') - matched_lines="[]" - any_backup=0 - for sid in $sids; do - det=$(curl -s "$BASE/schedules/$sid?api_key=$KEY" | tr -d '\000-\037') - # frequency (take first non-null) - f=$(echo "$det" | jq -r '.schedule.frequency // empty' 2>/dev/null) - if [ -n "$f" ] && [ "$freq" = "null" ]; then freq="$f"; fi - # backup lines: name or description contains backup (case-insensitive) - bl=$(echo "$det" | jq -c '[.schedule.lines[]? | select((.name // "") | ascii_downcase | test("backup"))]' 2>/dev/null) - if [ -z "$bl" ]; then bl="[]"; fi - cnt=$(echo "$bl" | jq 'length') - if [ "$cnt" -gt 0 ]; then - any_backup=1 - # sum quantity (quantity is a string like "18.0") - q=$(echo "$bl" | jq '[.[].quantity // 0 | tonumber] | add') - # sum quantity*price_retail - m=$(echo "$bl" | jq '[.[] | ((.quantity // 0 | tonumber) * (.price_retail // 0 | tonumber))] | add') - seats=$(awk "BEGIN{printf \"%g\", $seats + $q}") - monthly=$(awk "BEGIN{printf \"%g\", $monthly + $m}") - # append names - nm=$(echo "$bl" | jq -c '[.[].name]') - matched_lines=$(echo "$matched_lines $nm" | jq -s -c 'add') - fi - done - lines_json="$matched_lines" - if [ "$any_backup" -eq 0 ]; then - note="no backup line" - fi - fi - - # normalize monthly number - if [ "$monthly" = "0" ]; then monthly="0"; fi - if [ "$freq" != "null" ]; then freq="\"$freq\""; fi - - # emit - if [ $first -eq 0 ]; then echo ","; fi - first=0 - printf '{"client":%s,"cid":%s,"backup_seats":%s,"backup_monthly":%s,"backup_lines":%s,"schedule_ids":%s,"frequency":%s,"note":%s}' \ - "$(echo "$client" | jq -R .)" "$cid" "$seats" "$monthly" "$lines_json" "$sids_json" "$freq" "$(echo "$note" | jq -R .)" -done -echo "" -echo "]" diff --git a/projects/gps-rmm-audit/session-logs/2026-07/2026-07-05-howard-gps-backup-map-msp360.md b/projects/gps-rmm-audit/session-logs/2026-07/2026-07-05-howard-gps-backup-map-msp360.md index e692f45a..f3c54f6b 100644 --- a/projects/gps-rmm-audit/session-logs/2026-07/2026-07-05-howard-gps-backup-map-msp360.md +++ b/projects/gps-rmm-audit/session-logs/2026-07/2026-07-05-howard-gps-backup-map-msp360.md @@ -200,3 +200,32 @@ Howard asked for (check-the-wiki-for-status, and use-the-skills-to-set-up). **Published:** commits `976bfe7` (skill) + `a8e76ba` (routing/memory) pushed to origin; Phase 5c installed msp360 to global. Memory `reference_msp360_backup_monitoring` updated (skill now exists, full not read-only). + +## Update: 2026-07-06 — deleted wrong Winter DM + full GPS backup verification + +**Deleted the wrong weekend Winter message.** The 2026-07-05 03:44 UTC GPS-audit findings +DM to Winter (`[GPS AUDIT] Billing + service findings`) was superseded/wrong now that we +have MSP360 + Syncro-seat data. Resolved Winter's DM channel via the bot (user id +624666486362996755 -> channel 1519394696873513060), confirmed the target message content, +`DELETE /channels/{ch}/messages/1523172725391233044` -> HTTP 204. The identical message +also went to Mike (`...715039559760`) and Howard (`...736904593588`) — left in place (Howard +only asked for Winter's). Bot can only delete its own messages (bounded risk). + +**Full GPS backup verification (Howard: all 40 clients, flag seat-vs-machine gaps).** +- Built `projects/gps-rmm-audit/gps-clients.json` (40 clients + Syncro cids). +- Delegated a Syncro read-only sub-agent to pull recurring-schedule Data Backup line qty + (billed backup seats) for all 40. It caught a false-positive: base GPS Workstation/Server + products carry "Backups" in their boilerplate DESCRIPTION — matching restricted to line + NAME. Result: **only 16 of 40 actually bill a backup line** (tracker `Svc=B` flags were + wrong for Horseshoe, Quantum Wealth, T&C Sorensen, Business Svcs of Tucson). +- Reconciled billed seats vs live MSP360 current-machine backups. Verdict (16 billed): + 7 OK (Dataforth, Valley Wide, Curtis, Ridgetop, Brett, Gary Hartman, Mineralogical/ownCloud); + 2 REVIEW seat>machine (Jimmy 12/1, Glaz-Tech 2/1 w/ GTI-INV 251d stale); + 3 NOT BACKING UP (Grabb GND-SERVER failing 0-byte, Bill Tedards 359d stale, AMT 0 plans); + 4 HELD-unconfirmed pending Datto key (Reliant, Prairie Schooner, Janet Altschuler, D&B Envoys). +- Leaks (backing up, not billed): Cascades, Len's, Russo, Horseshoe, Business Svcs of Tucson. + $0-priced backup lines: Ridgetop, Janet Altschuler, D&B Envoys, AMT. + +**Howard's decisions:** hold the 4 Datto candidates as unconfirmed (not failing); HOLD all +outbound (no corrected Winter/Mike message yet) — just persist. `backup-map.md` fully +rewritten with the authoritative Syncro-seat + MSP360 reconciliation. Nothing sent.