Regenerate 260410_baseline_report.md from live database (post-migration)
Full live-query refresh against tracksolid_db at 07:38 EAT 2026-04-11. All data sourced directly from the server via 10 targeted psql queries. Report covers: all 17 table row counts, full 63-device registry with odometer/SIM/expiry, live position detail for all 19 reporting devices with GPS signal quality, geographic cluster map, position_history by source (poll=124 / track_list=13 = 137 total), alarm detail confirming BUG-01 fix, ingestion log health (399 calls, 0 failures), subscription status breakdown, silent device full list (44 devices), schema additions verification, Grafana readiness matrix, and P0/P1/P2 action plan. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
f277532a9d
commit
d7ffa136a3
1 changed files with 387 additions and 214 deletions
|
|
@ -1,336 +1,509 @@
|
||||||
# Tracksolid Fleet — Baseline Status Report
|
# Fireside Communications — Fleet Baseline Report
|
||||||
**Generated:** 2026-04-10 (post-migration 04 + 05, ~03:00 EAT)
|
**Date:** 2026-04-11 · **Time of queries:** ~07:38 EAT
|
||||||
**Database:** tracksolid_db on TimescaleDB
|
**Database:** tracksolid_db on TimescaleDB
|
||||||
**Report scope:** All tables, all 63 registered devices, live data as of query time
|
**Container:** timescale_db-bo3nov2ija7g8wn9b1g2paxs-204435447351
|
||||||
|
**Report scope:** All 63 registered devices · All tables · Post-migration 04 + 05
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 1. Migration Status
|
## 1. Migration Status
|
||||||
|
|
||||||
All four migrations applied and recorded in `tracksolid.schema_migrations`:
|
All four schema migrations applied and tracked:
|
||||||
|
|
||||||
| Migration File | Applied At (UTC) |
|
| Migration File | Applied (EAT) | Status |
|
||||||
|---|---|
|
|---|---|---|
|
||||||
| `02_tracksolid_full_schema_rev.sql` | 2026-04-10 23:45 |
|
| `02_tracksolid_full_schema_rev.sql` | 2026-04-10 23:45:17 | ✓ Applied |
|
||||||
| `03_webhook_schema_migration.sql` | 2026-04-10 23:45 |
|
| `03_webhook_schema_migration.sql` | 2026-04-10 23:45:17 | ✓ Applied |
|
||||||
| `04_bug_fix_migration.sql` | 2026-04-10 23:45 |
|
| `04_bug_fix_migration.sql` | 2026-04-10 23:45:17 | ✓ Applied — `distance_km` renamed & corrected |
|
||||||
| `05_enhancement_migration.sql` | 2026-04-10 23:45 |
|
| `05_enhancement_migration.sql` | 2026-04-10 23:45:17 | ✓ Applied — new tables + columns |
|
||||||
|
|
||||||
Schema is fully current. All 13 critical tables verified present.
|
Schema is fully current. No pending migrations.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. Table Row Counts
|
## 2. Table Row Counts (as of 07:38 EAT)
|
||||||
|
|
||||||
| Table | Row Count | Notes |
|
| Table | Rows | Notes |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `tracksolid.devices` | **63** | Full fleet registry |
|
| `tracksolid.devices` | **63** | Full fleet registry |
|
||||||
| `tracksolid.live_positions` | **19** | Devices with a known current position |
|
| `tracksolid.live_positions` | **19** | 19 devices with a known position (30% of fleet) |
|
||||||
| `tracksolid.position_history` | **132** | All historical GPS fixes |
|
| `tracksolid.position_history` | **137** | All historical GPS fixes — growing |
|
||||||
| `tracksolid.alarms` | **2** | Vibration alerts recorded overnight |
|
| `tracksolid.alarms` | **2** | 2 vibration alerts overnight |
|
||||||
| `tracksolid.trips` | **0** | Fleet parked overnight — expected |
|
| `tracksolid.trips` | **0** | Fleet parked overnight — expected |
|
||||||
| `tracksolid.parking_events` | **0** | POLL-02 fix deployed; will populate when vehicles move |
|
| `tracksolid.parking_events` | **0** | Fix deployed; will populate with movement |
|
||||||
| `tracksolid.obd_readings` | **0** | Awaiting OBD webhook registration |
|
| `tracksolid.obd_readings` | **0** | Awaiting webhook registration |
|
||||||
| `tracksolid.device_events` | **0** | Awaiting `/pushevent` webhook registration |
|
| `tracksolid.device_events` | **0** | Awaiting `/pushevent` registration |
|
||||||
| `tracksolid.fuel_readings` | **0** | Awaiting `/pushoil` webhook registration |
|
| `tracksolid.fuel_readings` | **0** | Awaiting `/pushoil` registration |
|
||||||
| `tracksolid.temperature_readings` | **0** | Awaiting `/pushtem` webhook registration |
|
| `tracksolid.temperature_readings` | **0** | Awaiting `/pushtem` registration |
|
||||||
| `tracksolid.lbs_readings` | **0** | Awaiting `/pushlbs` webhook registration |
|
| `tracksolid.lbs_readings` | **0** | Awaiting `/pushlbs` registration |
|
||||||
| `tracksolid.geofences` | **0** | Not yet configured |
|
| `tracksolid.geofences` | **0** | Not yet configured |
|
||||||
| `tracksolid.api_token_cache` | Active | Auth token caching operational |
|
| `tracksolid.heartbeats` | **0** | Awaiting heartbeat webhook |
|
||||||
| `tracksolid.ingestion_log` | Active | Polling audit trail present |
|
| `tracksolid.fault_codes` | **0** | Awaiting fault code data |
|
||||||
|
| `tracksolid.ingestion_log` | **397** | Polling audit trail — healthy |
|
||||||
|
| `dwh_gold.fact_daily_fleet_metrics` | **0** | ETL not yet run |
|
||||||
|
| `dwh_gold.dim_vehicles` | **0** | Awaiting population |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 3. Fleet Composition
|
## 3. Fleet Composition
|
||||||
|
|
||||||
**Total registered devices: 63**
|
**63 devices across 4 device models:**
|
||||||
|
|
||||||
| Device Model | Count | Typical Use |
|
| Model | Count | Typical Use |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| AT4 | 23 | Asset/cargo tracker — hardwired |
|
| AT4 | 23 | Asset / cargo hardwired tracker |
|
||||||
| JC400P | 23 | Camera-capable tracker — larger vehicles |
|
| JC400P | 23 | Camera-capable tracker (larger vehicles) |
|
||||||
| X3 | 10 | Compact vehicle tracker |
|
| X3 | 10 | Compact vehicle tracker |
|
||||||
| GT06E | 7 | Entry-level OBD port tracker |
|
| GT06E | 7 | OBD-port tracker |
|
||||||
| **Total** | **63** | |
|
| **Total** | **63** | |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 4. Device Registry — Notable Devices
|
## 4. Full Device Registry
|
||||||
|
|
||||||
All 63 devices have model and IMEI populated. As of this report, **vehicle_name, vehicle_number, and driver_name are blank for all 63 devices** — this is the primary data quality gap blocking driver-level reporting.
|
> All 63 devices. `vehicle_number` and `driver_name` are blank for every device — primary data quality gap.
|
||||||
|
|
||||||
| Platform Device Name | Model | Odometer (km) | Notes |
|
| Device Name | Model | SIM | Odometer (km) | Expires | Status |
|
||||||
|---|---|---|---|
|
|---|---|---|---|---|---|
|
||||||
| FRED KMGW 538W HULETI | — | — | Most active overnight; 2 alarms |
|
| AT4-51820 | AT4 | — | — | — | No position |
|
||||||
| X3-63282 | X3 | — | Last seen Uganda — **anomalous location** |
|
| AT4-53099 | AT4 | — | — | — | No position |
|
||||||
| KDK 829A GP | — | 238,643 | **High mileage — service flag** |
|
| AT4-54246 | AT4 | — | — | — | No position |
|
||||||
| Belta KCU-647D | — | ~234,000 | **High mileage — service flag** |
|
| AT4-55029 | AT4 | — | — | — | No position |
|
||||||
| KMGR 409U | — | — | 1 fix in last 24h — low activity |
|
| AT4-55235 | AT4 | — | — | — | No position |
|
||||||
|
| AT4-57389 | AT4 | — | — | — | No position |
|
||||||
|
| AT4-61860 | AT4 | — | — | — | No position |
|
||||||
|
| AT4-64815 | AT4 | — | — | 2036-02-05 | Stale (1,556h) |
|
||||||
|
| AT4-64823 | AT4 | — | — | — | No position |
|
||||||
|
| AT4-64880 | AT4 | — | — | — | No position |
|
||||||
|
| AT4-64989 | AT4 | — | — | — | No position |
|
||||||
|
| AT4-65010 | AT4 | — | — | — | No position |
|
||||||
|
| AT4-65135 | AT4 | — | — | — | No position |
|
||||||
|
| AT4-65341 | AT4 | — | — | — | No position |
|
||||||
|
| AT4-65598 | AT4 | — | — | — | No position |
|
||||||
|
| AT4-65648 | AT4 | — | — | — | No position |
|
||||||
|
| AT4-66158 | AT4 | — | — | — | No position |
|
||||||
|
| AT4-67271 | AT4 | — | — | — | No position |
|
||||||
|
| AT4-67693 | AT4 | — | — | — | No position |
|
||||||
|
| Belta KCU-647D | GT06E | 0110094465 | **234,546** | 2040-04-03 | Stale (7,568h) — SERVICE FLAG |
|
||||||
|
| FRED KMGW 538W HULETI | X3 | 0119867174 | 2,284 | 2036-02-08 | **Active (0.1h)** |
|
||||||
|
| GT06E-85428 | GT06E | — | — | — | No position |
|
||||||
|
| GT06E-86319 | GT06E | — | — | — | No position |
|
||||||
|
| JC400P-07904 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-85041 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-85058 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-85751 | JC400P | — | 17 | 2036-03-11 | Stale (729h) |
|
||||||
|
| JC400P-86270 | JC400P | — | 6,931 | — | No position |
|
||||||
|
| JC400P-86403 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-87625 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-87831 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-89431 | JC400P | — | 7,375 | — | No position |
|
||||||
|
| JC400P-89530 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-89563 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-89662 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-89977 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-90108 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-90199 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-90678 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-91619 | JC400P | — | 3,719 | — | No position |
|
||||||
|
| JC400P-92278 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-92716 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-92732 | JC400P | — | — | — | No position |
|
||||||
|
| JC400P-94233 | JC400P | — | — | — | No position |
|
||||||
|
| JK Subaru KCS 903Y | GT06E | 0746759925 | 73,345 | 2039-06-12 | Stale (671h) |
|
||||||
|
| KCE 690F | AT4 | — | — | 2039-07-01 | Very stale (57,312h) |
|
||||||
|
| KCS 903Y JK SUB | AT4 | 0700024569 | 4,492 | 2039-06-09 | Very stale (15,213h) |
|
||||||
|
| KCU 145Q Solo Xtrail | GT06E | 0757270810 | 53,228 | 2039-12-20 | Stale (7,530h) |
|
||||||
|
| KCU 865Q Vanguard | GT06E | 0757270763 | 61,758 | 2039-12-20 | Stale (62h) |
|
||||||
|
| KCU 865Q Vanguard Sub | AT4 | 0757270804 | 9,656 | 2039-12-20 | Very stale (15,429h) |
|
||||||
|
| KDK 829A GP | GT06E | 0707923872 | **239,264** | 2042-10-29 | **Active (0.2h)** — SERVICE FLAG |
|
||||||
|
| KDU 878T_CAM | JC400P | 0708351897 | 1,562 | 2035-08-18 | Stale (3,064h) |
|
||||||
|
| KDU 878T_Track | X3 | 0708352823 | 4,802 | 2035-08-18 | Stale (62h) |
|
||||||
|
| KDW 632M HL Cam | JC400P | 300002396032 IoT | 16 | 2036-03-11 | Stale (740h) |
|
||||||
|
| KDW 632M HL Tracker | X3 | 300002396033 IoT | 222 | 2036-02-09 | Stale (728h) |
|
||||||
|
| KMEH 692C KAWASAKI | AT4 | 0110094467 | 3,319 | 2040-04-03 | Very stale (24,693h) |
|
||||||
|
| KMGR 409U HENRY JAZZ | X3 | 0768697302 | 6,696 | 2035-07-31 | Semi-active (16h) |
|
||||||
|
| X3-59405 | X3 | — | — | — | No position |
|
||||||
|
| X3-63282 | X3 | — | 4,194 | 2036-02-14 | **Active (0.2h) — UGANDA ANOMALY** |
|
||||||
|
| X3-64223 | X3 | — | — | — | No position |
|
||||||
|
| X3-68968 | X3 | — | 16 | 2036-03-11 | Stale (728h) |
|
||||||
|
| X3-69172 | X3 | — | — | — | No position |
|
||||||
|
| X3-78553 | X3 | — | — | — | No position |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 5. Live Position Coverage
|
## 5. Live Position Coverage
|
||||||
|
|
||||||
**19 of 63 devices (30%)** have a position in `live_positions`.
|
**19 of 63 devices (30%)** have a position in `live_positions`.
|
||||||
**44 devices have no position** — offline, SIM issue, or never activated.
|
**44 devices (70%)** have no position at all — offline, SIM not installed, or never activated.
|
||||||
|
|
||||||
### Freshness Breakdown
|
### Freshness Bands
|
||||||
|
|
||||||
| Freshness Band | Device Count |
|
| Band | Count | Devices |
|
||||||
|---|---|
|
|
||||||
| < 1 hour old | ~4 |
|
|
||||||
| 1–6 hours old | ~8 |
|
|
||||||
| 6–24 hours old | ~7 |
|
|
||||||
| **Total with position** | **19** |
|
|
||||||
|
|
||||||
### Geographic Clusters
|
|
||||||
|
|
||||||
All 19 devices with positions fall into two clusters:
|
|
||||||
|
|
||||||
| Cluster | Approximate Area | Devices |
|
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Primary | Nairobi metro (-1.2° to -1.4°N, 36.7° to 37.0°E) | ~17 |
|
| < 1 hour (active now) | 3 | FRED KMGW 538W HULETI, X3-63282, KDK 829A GP |
|
||||||
| Secondary | Thika / peri-urban north of Nairobi | ~1 |
|
| 1–24 hours | 1 | KMGR 409U HENRY JAZZ (16h) |
|
||||||
| **Outlier** | **Kampala, Uganda (~0.3°N, 32.5°E)** | **1 (X3-63282)** |
|
| 1–7 days (stale) | 3 | KCU 865Q Vanguard (62h), KDU 878T_Track (62h), KDU 878T_CAM (3,064h) |
|
||||||
|
| 1–12 months (very stale) | 6 | JK Subaru KCS 903Y, KCU 145Q, Belta KCU-647D, etc. |
|
||||||
|
| > 1 year (historical only) | 6 | KCS 903Y JK SUB, KCU 865Q Vanguard Sub, KMEH 692C KAWASAKI, KCE 690F, etc. |
|
||||||
|
|
||||||
|
### Full Live Position Detail
|
||||||
|
|
||||||
|
| Device | Model | Lat | Lng | Speed (km/h) | ACC | GPS Signal | Satellites | Last Fix (EAT) |
|
||||||
|
|---|---|---|---|---|---|---|---|---|
|
||||||
|
| FRED KMGW 538W HULETI | X3 | -1.23748 | 36.72662 | 0 | Off | 4 | 15 | 2026-04-11 07:34:26 |
|
||||||
|
| X3-63282 | X3 | 0.19554 | 32.54002 | 0 | Off | 4 | 11 | 2026-04-11 07:30:15 |
|
||||||
|
| KDK 829A GP | GT06E | -1.32787 | 36.89972 | 0 | Off | 3 | 8 | 2026-04-11 07:28:58 |
|
||||||
|
| KMGR 409U HENRY JAZZ | X3 | -1.23748 | 36.72674 | 1 | Off | 2 | 6 | 2026-04-10 15:40:32 |
|
||||||
|
| KCU 865Q Vanguard | GT06E | -1.23748 | 36.72641 | 5 | Off | — | — | 2026-04-08 17:17:45 |
|
||||||
|
| KDU 878T_Track | X3 | -1.23528 | 36.72871 | 0 | Off | — | — | 2026-04-08 17:16:55 |
|
||||||
|
| JK Subaru KCS 903Y | GT06E | -1.23558 | 36.72870 | 0 | Off | — | — | 2026-03-14 09:08:34 |
|
||||||
|
| X3-68968 | X3 | -1.23799 | 36.72615 | 0 | Off | — | — | 2026-03-11 23:59:28 |
|
||||||
|
| KDW 632M HL Tracker | X3 | -1.24087 | 36.72839 | 0 | Off | — | — | 2026-03-11 23:53:44 |
|
||||||
|
| JC400P-85751 | JC400P | -1.23796 | 36.72611 | 0 | Off | — | — | 2026-03-11 22:15:44 |
|
||||||
|
| KDW 632M HL Cam | JC400P | -1.24115 | 36.72847 | 0 | Off | — | — | 2026-03-11 11:52:01 |
|
||||||
|
| AT4-64815 | AT4 | -1.24136 | 36.72872 | 0 | Off | — | — | 2026-02-05 11:19:55 |
|
||||||
|
| KDU 878T_CAM | JC400P | -1.06900 | 37.01436 | 12 | Off | — | — | 2025-12-04 15:27:42 |
|
||||||
|
| KCU 145Q Solo Xtrail | GT06E | -1.29728 | 36.88850 | 0 | Off | — | — | 2025-06-01 14:04:47 |
|
||||||
|
| Belta KCU-647D | GT06E | -1.15151 | 36.63857 | 0 | Off | — | — | 2025-05-30 23:53:22 |
|
||||||
|
| KCS 903Y JK SUB | AT4 | -1.23529 | 36.72875 | 0 | Off | — | — | 2024-07-16 10:41:42 |
|
||||||
|
| KCU 865Q Vanguard Sub | AT4 | -1.23522 | 36.73104 | 0 | Off | — | — | 2024-07-07 10:43:21 |
|
||||||
|
| KMEH 692C KAWASAKI | AT4 | -1.23849 | 36.72460 | 0 | Off | — | — | 2023-06-17 10:41:18 |
|
||||||
|
| KCE 690F | AT4 | -1.24008 | 36.74522 | 31 | Off | — | — | 2019-09-27 07:20:08 |
|
||||||
|
|
||||||
|
> **ACC Off for all 19 devices** — fleet parked overnight, consistent with ~03:00–07:38 EAT query window.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 6. Position History Analysis
|
## 6. Geographic Clustering
|
||||||
|
|
||||||
**Total fixes in `position_history`: 132**
|
All known positions confirmed in two clusters plus one critical outlier:
|
||||||
|
|
||||||
### By Ingestion Source
|
| Cluster | Area | Coords | Active Devices |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **Primary depot** | Nairobi West / Kikuyu Rd corridor | -1.235 to -1.241, 36.724 to 36.731 | 14 devices |
|
||||||
|
| **Secondary** | Nairobi East / Thika Rd | -1.297 to -1.328, 36.885 to 36.900 | 2 devices |
|
||||||
|
| **Outlier** | Thika / Ruiru | -1.069, 37.014 | 1 device (KDU 878T_CAM) |
|
||||||
|
| **CRITICAL** | **Uganda — Kampala region** | **0.196, 32.540** | **1 device (X3-63282)** |
|
||||||
|
|
||||||
| Source | Fixes | Description |
|
> The primary depot cluster at ~(-1.237, 36.727) is very tight — 10+ devices within a 200m radius — suggesting a single compound/yard. This is your main base.
|
||||||
|---|---|---|
|
|
||||||
| `poll` | 119 | 60-second fleet-wide sweep |
|
|
||||||
| `track_list` | 13 | High-res per-device trail via `jimi.device.track.list` (POLL-01) |
|
|
||||||
| **Total** | **132** | |
|
|
||||||
|
|
||||||
The `track_list` source is new as of this deployment. 13 fixes from 15 poll cycles (30-min schedule) is low but expected overnight with few active devices; volume will grow with daytime operations.
|
|
||||||
|
|
||||||
### Per-Device Fix Count — Last 24 Hours
|
|
||||||
|
|
||||||
| Device | Fixes | Notes |
|
|
||||||
|---|---|---|
|
|
||||||
| FRED KMGW 538W HULETI | 38 | Parked/idling overnight; most data-rich |
|
|
||||||
| X3-63282 | 28 | Active — location in Uganda |
|
|
||||||
| KDK 829A GP | 15 | Moderate activity |
|
|
||||||
| KMGR 409U | 1 | Near-silent — check device health |
|
|
||||||
| All others | 0 | No fixes recorded in last 24h |
|
|
||||||
|
|
||||||
Only **4 of 63 devices** generated `position_history` records in the last 24 hours.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 7. Alarm Summary
|
## 7. Position History
|
||||||
|
|
||||||
**Total alarms: 2** — both from overnight, both on the same device.
|
**Total fixes: 137** across two ingestion sources:
|
||||||
|
|
||||||
| # | Device | Alarm Type | Type ID | Time (EAT) | Location |
|
| Source | Fixes | Method | Frequency |
|
||||||
|---|---|---|---|---|---|
|
|---|---|---|---|
|
||||||
| 1 | FRED KMGW 538W HULETI | Vibration Alert | 3 | 2026-04-10 00:57 | Nairobi |
|
| `poll` | 124 | Fleet-wide 60s sweep | Every 60 seconds |
|
||||||
| 2 | FRED KMGW 538W HULETI | Vibration Alert | 3 | 2026-04-10 02:58 | Nairobi |
|
| `track_list` | 13 | Per-device high-res trail (POLL-01) | Every 30 minutes |
|
||||||
|
| **Total** | **137** | | |
|
||||||
|
|
||||||
|
### Per-Device Fixes — Last 24 Hours
|
||||||
|
|
||||||
|
| Device | Model | Fixes | First Fix (EAT) | Last Fix (EAT) | Avg Speed | Max Speed |
|
||||||
|
|---|---|---|---|---|---|---|
|
||||||
|
| FRED KMGW 538W HULETI | X3 | 40 | 2026-04-10 23:16 | 2026-04-11 07:34 | 0.0 km/h | 0.0 |
|
||||||
|
| X3-63282 | X3 | 29 | 2026-04-10 23:15 | 2026-04-11 07:30 | 0.0 km/h | 0.0 |
|
||||||
|
| KDK 829A GP | GT06E | 16 | 2026-04-10 23:13 | 2026-04-11 07:29 | 0.0 km/h | 0.0 |
|
||||||
|
| KMGR 409U HENRY JAZZ | X3 | 1 | 2026-04-10 15:40 | 2026-04-10 15:40 | 1.0 km/h | 1.0 |
|
||||||
|
|
||||||
|
**Only 4 of 63 devices generated position history in the last 24 hours.** The remaining 59 are either offline, not reporting, or have stale last-seen data from prior months.
|
||||||
|
|
||||||
|
### Track List Sample (POLL-01 High-Resolution Trail)
|
||||||
|
|
||||||
|
13 high-res waypoints captured across 15 scheduler runs (30-min interval, overnight):
|
||||||
|
|
||||||
|
| Device | GPS Time (EAT) | Lat | Lng | Speed |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| FRED KMGW 538W HULETI | 2026-04-11 07:04:07 | -1.23748 | 36.72662 | 0 |
|
||||||
|
| KDK 829A GP | 2026-04-11 07:00:52 | -1.32800 | 36.89976 | 0 |
|
||||||
|
| X3-63282 | 2026-04-11 07:00:15 | 0.19554 | 32.54002 | 0 |
|
||||||
|
| FRED KMGW 538W HULETI | 2026-04-11 06:54:01 | -1.23748 | 36.72662 | 0 |
|
||||||
|
| X3-63282 | 2026-04-11 06:45:15 | 0.19554 | 32.54002 | 0 |
|
||||||
|
|
||||||
|
All track_list fixes show speed = 0 and stationary coordinates, confirming overnight parking. Altitude data not yet populated (device-dependent feature).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Alarms
|
||||||
|
|
||||||
|
**Total alarms: 2** — both on the same device, overnight.
|
||||||
|
|
||||||
|
| # | Device | Alarm Type | Alarm Name | Time (EAT) | Lat | Lng | Speed |
|
||||||
|
|---|---|---|---|---|---|---|---|
|
||||||
|
| 1 | FRED KMGW 538W HULETI | 3 | Vibration alert | 2026-04-11 00:57:30 | -1.23752 | 36.72660 | 0 |
|
||||||
|
| 2 | FRED KMGW 538W HULETI | 3 | Vibration alert | 2026-04-11 02:58:36 | -1.23748 | 36.72660 | 0 |
|
||||||
|
|
||||||
|
**Key findings:**
|
||||||
|
- **BUG-01 confirmed fixed** — `alarm_type` (3) and `alarm_name` ("Vibration alert") now correctly populated from polling. Previously both were always NULL.
|
||||||
|
- Both events at stationary coordinates, ~2 hours apart while parked.
|
||||||
|
- Vibration type 3 while speed = 0 suggests: tamper attempt, animal contact, or sensor vibration from nearby traffic.
|
||||||
|
- Vehicle position is at the primary Kikuyu Rd depot cluster — consistent with a parked asset.
|
||||||
|
- No speed alarms, no geofence alarms, no power alarms.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Trips
|
||||||
|
|
||||||
|
**Trips recorded: 0**
|
||||||
|
|
||||||
|
Expected — all vehicles parked overnight. Schema confirmed correct:
|
||||||
|
|
||||||
|
| Column | Present | Notes |
|
||||||
|
|---|---|---|
|
||||||
|
| `distance_km` | ✓ | Renamed from `distance_m`, values corrected ÷1,000,000 (BUG-02 fixed) |
|
||||||
|
| `max_speed_kmh` | ✓ | Will populate from next trip poll (BUG-03 fixed) |
|
||||||
|
| `avg_speed_kmh` | ✓ | |
|
||||||
|
| `driving_time_s` | ✓ | |
|
||||||
|
| `idle_time_s` | ✓ | |
|
||||||
|
| `fuel_consumed_l` | ✓ | |
|
||||||
|
|
||||||
|
First trips expected ~06:30–07:00 EAT when drivers depart. Validate with:
|
||||||
|
```sql
|
||||||
|
SELECT d.device_name, t.start_time AT TIME ZONE 'Africa/Nairobi',
|
||||||
|
t.distance_km, t.avg_speed_kmh, t.max_speed_kmh, t.driving_time_s
|
||||||
|
FROM tracksolid.trips t
|
||||||
|
JOIN tracksolid.devices d ON d.imei = t.imei
|
||||||
|
ORDER BY t.start_time DESC LIMIT 10;
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Parking Events
|
||||||
|
|
||||||
|
**Parking events: 0**
|
||||||
|
|
||||||
|
POLL-02 fix deployed (`acc_type=0`, corrected `durSecond` field mapping). The API is responding (60 calls, 0 rows) — events will populate once vehicles complete a full park-stop-move cycle.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Ingestion Pipeline Health
|
||||||
|
|
||||||
|
Total API calls across all endpoints since deployment (~08h operational):
|
||||||
|
|
||||||
|
| Endpoint | Calls | Rows Upserted | Rows Inserted | Avg Duration | Failures | First Call (EAT) | Last Call (EAT) |
|
||||||
|
|---|---|---|---|---|---|---|---|
|
||||||
|
| `jimi.user.device.location.list` | 311 | 5,909 | 5,909 | 493ms | 0 | 2026-04-10 23:45 | 2026-04-11 07:38 |
|
||||||
|
| `jimi.open.platform.report.parking` | 60 | 0 | 0 | 10,891ms | 0 | 2026-04-10 23:45 | 2026-04-11 07:36 |
|
||||||
|
| `jimi.device.track.list` | 15 | 0 | 80 | 136,875ms | 0 | 2026-04-10 23:45 | 2026-04-11 07:19 |
|
||||||
|
| `jimi.device.alarm.list` | 11 | 0 | 11 | 939ms | 0 | 2026-04-11 01:00 | 2026-04-11 03:24 |
|
||||||
|
| `jimi.user.device.list+detail` | 2 | 126 | 0 | 6,290ms | 0 | 2026-04-10 23:45 | 2026-04-11 05:00 |
|
||||||
|
| **Total** | **399** | | | | **0** | | |
|
||||||
|
|
||||||
**Observations:**
|
**Observations:**
|
||||||
- Both alarms 2 hours apart while vehicle is parked overnight
|
- **Zero failures across all 399 API calls** — pipeline fully stable.
|
||||||
- Vibration type 3 while stationary could indicate vehicle tamper, attempted break-in, or sensor false positive
|
- Location polling: 311 calls × ~19 devices/call = consistent fleet coverage. Averaging 493ms round-trip.
|
||||||
- `alarm_type` and `alarm_name` now correctly populated — **BUG-01 fix confirmed working**
|
- Track list: 15 calls yielding 80 waypoints at 136s avg — the API is slow per call but returns full trail history correctly.
|
||||||
- No speed or overspeed alarms (fleet parked as expected)
|
- Parking: 60 calls, all successful, all 0 rows — API is healthy, no parking events completed yet.
|
||||||
|
- Device sync (device.list+detail): runs every 5 hours; 2 runs complete, 126 device records synced.
|
||||||
|
- Alarm polling: activates conditionally; 11 calls catching both overnight alarms correctly.
|
||||||
|
|
||||||
|
### Recent Call Log (last 5 minutes)
|
||||||
|
|
||||||
|
Every 60s location sweep returning exactly 19 devices at ~200ms:
|
||||||
|
```
|
||||||
|
07:38:13 location.list 63 queried → 19 upserted 230ms
|
||||||
|
07:37:13 location.list 63 queried → 19 upserted 214ms
|
||||||
|
07:36:12 location.list 63 queried → 19 upserted 223ms
|
||||||
|
07:36:04 parking 13+50 queried → 0 inserted 14,562ms + 7,293ms
|
||||||
|
07:35:11 location.list 63 queried → 19 upserted 195ms
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 8. Trips
|
## 12. Odometer Leaders & Service Flags
|
||||||
|
|
||||||
**Trips recorded: 0** — Expected. Fleet is parked overnight.
|
Devices with reported odometer readings (ascending by mileage):
|
||||||
|
|
||||||
Post-migration schema confirmed:
|
| Rank | Device | Model | SIM | Odometer (km) | Subscription Expires |
|
||||||
- `distance_km` column present — **BUG-02 distance correction applied** (historical values normalised from mm to km; column renamed from `distance_m`)
|
|---|---|---|---|---|---|
|
||||||
- `max_speed_kmh` column present — **BUG-03 fix deployed** (will populate on next trip poll)
|
| 1 | **KDK 829A GP** | GT06E | 0707923872 | **239,264** | 2042-10-29 |
|
||||||
|
| 2 | **Belta KCU-647D** | GT06E | 0110094465 | **234,546** | 2040-04-03 |
|
||||||
|
| 3 | JK Subaru KCS 903Y | GT06E | 0746759925 | 73,345 | 2039-06-12 |
|
||||||
|
| 4 | KCU 865Q Vanguard | GT06E | 0757270763 | 61,758 | 2039-12-20 |
|
||||||
|
| 5 | KCU 145Q Solo Xtrail | GT06E | 0757270810 | 53,228 | 2039-12-20 |
|
||||||
|
| 6 | KCU 865Q Vanguard Sub | AT4 | 0757270804 | 9,656 | 2039-12-20 |
|
||||||
|
| 7 | JC400P-89431 | JC400P | — | 7,375 | — |
|
||||||
|
| 8 | JC400P-86270 | JC400P | — | 6,931 | — |
|
||||||
|
| 9 | KMGR 409U HENRY JAZZ | X3 | 0768697302 | 6,696 | 2035-07-31 |
|
||||||
|
| 10 | KDU 878T_Track | X3 | 0708352823 | 4,802 | 2035-08-18 |
|
||||||
|
| 11 | KCS 903Y JK SUB | AT4 | 0700024569 | 4,492 | 2039-06-09 |
|
||||||
|
| 12 | X3-63282 | X3 | — | 4,194 | 2036-02-14 |
|
||||||
|
| 13 | JC400P-91619 | JC400P | — | 3,719 | — |
|
||||||
|
| 14 | KMEH 692C KAWASAKI | AT4 | 0110094467 | 3,319 | 2040-04-03 |
|
||||||
|
| 15 | FRED KMGW 538W HULETI | X3 | 0119867174 | 2,284 | 2036-02-08 |
|
||||||
|
|
||||||
First trips expected to appear from ~06:30 EAT when vehicles start moving.
|
> **KDK 829A GP (239,264 km) and Belta KCU-647D (234,546 km) are critical service flags.** Both exceed typical major maintenance thresholds. Both are GT06E OBD trackers — their odometer readings come directly from the vehicle's ECU, making them more reliable than GPS-estimated mileage. Recommend immediate physical inspection.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 9. Parking Events
|
## 13. Subscription Status
|
||||||
|
|
||||||
**Parking events recorded: 0**
|
| Category | Count | Notes |
|
||||||
|
|
||||||
POLL-02 fix deployed (`acc_type=0`, corrected `durSecond` field mapping). Events will populate when vehicles begin moving and stop. Validate after morning operations.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 10. Ingestion Log — Polling Health
|
|
||||||
|
|
||||||
Cumulative totals from `tracksolid.ingestion_log`:
|
|
||||||
|
|
||||||
| Poll Type | API Calls | Rows Upserted / Inserted | Notes |
|
|
||||||
|---|---|---|---|
|
|
||||||
| Location (live positions) | 297 | 5,643 | ~19 devices/sweep — healthy |
|
|
||||||
| Track list (position_history) | 15 | 80 waypoints | 30-min schedule running ✓ |
|
|
||||||
| Parking events | 58 | 0 | API responding; fix deployed |
|
|
||||||
| Alarms | 11 | 11 | Clean 1:1 ratio |
|
|
||||||
| Trips | — | 0 | No trips yet (overnight) |
|
|
||||||
|
|
||||||
**Polling pipeline is healthy.** All schedulers running. Location sweep averaging ~19 device positions per call, consistent with the 19 devices in `live_positions`.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 11. Odometer Leaders — Service Flags
|
|
||||||
|
|
||||||
| Device | Odometer (km) | Status |
|
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| KDK 829A GP | 238,643 | **SERVICE DUE** |
|
| No expiry date set | **44** | All are the 44 silent/no-position devices — likely unactivated |
|
||||||
| Belta KCU-647D | ~234,000 | **SERVICE DUE** |
|
| Already expired | 0 | None expired |
|
||||||
|
| Expiring within 90 days | 0 | None imminent |
|
||||||
|
| Valid long-term (> 90 days) | **19** | All the devices with live positions |
|
||||||
|
|
||||||
Both exceed 200,000 km. Recommend immediate physical inspection. Verify odometer values against dashboard — API-reported odometer can drift if the device was replaced or reset.
|
The 44 devices with no expiry are the same 44 with no position data. This strongly suggests they have never been activated on the Tracksolid platform (no SIM, no subscription, never commissioned).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 12. Geographic Anomaly — X3-63282
|
## 14. Geographic Anomaly — X3-63282
|
||||||
|
|
||||||
**X3-63282 is reporting from Uganda (~0.3°N, 32.5°E — approximately Kampala region).**
|
**X3-63282 is consistently reporting from Uganda (~0.196°N, 32.540°E) near Kampala.**
|
||||||
|
|
||||||
This device has been consistently reporting 28 fixes from this location in the last 24 hours, confirming it is not a one-off GPS error.
|
Evidence this is real (not a GPS glitch):
|
||||||
|
- 29 fixes over 24 hours, all from the same coordinates
|
||||||
|
- Track_list high-res trail confirms 5 more waypoints at the same location
|
||||||
|
- Device is actively pinging every 60 seconds (GPS signal quality: 4/4, 11 satellites)
|
||||||
|
- Subscription is valid until 2036-02-14
|
||||||
|
- Odometer reads 4,194 km
|
||||||
|
|
||||||
**Possible explanations:**
|
**This device is genuinely located in Uganda and actively communicating.**
|
||||||
1. Vehicle on a legitimate cross-border trip to Uganda
|
|
||||||
2. Device removed from vehicle and in independent transit
|
|
||||||
3. Device installed in a non-fleet vehicle
|
|
||||||
4. GPS spoofing
|
|
||||||
|
|
||||||
**Action required:** Contact responsible driver/fleet manager immediately to confirm vehicle status and mission.
|
Possible explanations:
|
||||||
|
1. Vehicle on a cross-border logistics trip (Nairobi → Kampala corridor)
|
||||||
|
2. Device removed and travelling separately from the vehicle
|
||||||
|
3. Device installed in a vehicle belonging to a different entity
|
||||||
|
|
||||||
|
**Action required:** Contact driver or responsible manager immediately to confirm vehicle location, mission, and expected return.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 13. Schema Health Post-Migration
|
## 15. Silent Devices — Full List (44 devices)
|
||||||
|
|
||||||
### Columns Added (Migration 04 + 05)
|
All 44 devices with no position data and no subscription expiry set:
|
||||||
|
|
||||||
|
| Model | Devices |
|
||||||
|
|---|---|
|
||||||
|
| AT4 (18) | AT4-51820, AT4-53099, AT4-54246, AT4-55029, AT4-55235, AT4-57389, AT4-61860, AT4-64823, AT4-64880, AT4-64989, AT4-65010, AT4-65135, AT4-65341, AT4-65598, AT4-65648, AT4-66158, AT4-67271, AT4-67693 |
|
||||||
|
| JC400P (20) | JC400P-07904, JC400P-85041, JC400P-85058, JC400P-86270, JC400P-86403, JC400P-87625, JC400P-87831, JC400P-89431, JC400P-89530, JC400P-89563, JC400P-89662, JC400P-89977, JC400P-90108, JC400P-90199, JC400P-90678, JC400P-91619, JC400P-92278, JC400P-92716, JC400P-92732, JC400P-94233 |
|
||||||
|
| GT06E (2) | GT06E-85428, GT06E-86319 |
|
||||||
|
| X3 (4) | X3-59405, X3-64223, X3-69172, X3-78553 |
|
||||||
|
|
||||||
|
> **18 AT4 + 20 JC400P = 38 of the 44 silent devices are AT4s and JC400Ps** — the two largest model groups. This is a significant inventory of undeployed trackers. Either these are in storage awaiting vehicle installation, or they represent a large batch of devices purchased but not yet commissioned.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 16. Schema Additions Confirmed (Migration 05)
|
||||||
|
|
||||||
|
### New columns on existing tables
|
||||||
|
|
||||||
**`tracksolid.trips`:**
|
**`tracksolid.trips`:**
|
||||||
- `distance_km` ✓ — renamed from `distance_m`, values corrected (÷1,000,000)
|
- `distance_km` (renamed + corrected from `distance_m`)
|
||||||
- `max_speed_kmh` ✓ — will populate from next trip poll
|
- `max_speed_kmh` ✓
|
||||||
|
|
||||||
**`tracksolid.obd_readings`** — normalized scalar columns added:
|
**`tracksolid.obd_readings`** — normalized scalar columns:
|
||||||
- `engine_rpm`, `coolant_temp_c`, `fuel_level_pct`, `battery_voltage` ✓
|
- `engine_rpm`, `coolant_temp_c`, `fuel_level_pct`, `battery_voltage` ✓
|
||||||
- `intake_pressure`, `throttle_pct`, `vehicle_speed`, `engine_load_pct` ✓
|
- `intake_pressure`, `throttle_pct`, `vehicle_speed`, `engine_load_pct` ✓
|
||||||
|
|
||||||
**`tracksolid.alarms`** — enrichment columns added:
|
**`tracksolid.alarms`** — enrichment:
|
||||||
- `severity`, `geofence_id`, `geofence_name` ✓
|
- `severity`, `geofence_id`, `geofence_name` ✓
|
||||||
- `acknowledged_at`, `acknowledged_by` ✓
|
- `acknowledged_at`, `acknowledged_by` ✓
|
||||||
|
|
||||||
**`tracksolid.devices`** — vehicle enrichment columns added:
|
**`tracksolid.devices`** — vehicle enrichment:
|
||||||
- `vehicle_category`, `cost_centre`, `assigned_route` ✓
|
- `vehicle_category`, `cost_centre`, `assigned_route` ✓
|
||||||
- `depot_geom`, `depot_address` ✓
|
- `depot_geom`, `depot_address` ✓
|
||||||
|
|
||||||
### New Tables (all present, empty — awaiting data)
|
### New tables confirmed present
|
||||||
|
|
||||||
| Table | Type | Populated By |
|
| Table | Type | Purpose |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `tracksolid.device_events` | Regular | `/pushevent` webhook |
|
| `tracksolid.device_events` | Regular | Login/logout events (PUSH-01) |
|
||||||
| `tracksolid.fuel_readings` | Hypertable | `/pushoil` webhook |
|
| `tracksolid.fuel_readings` | Hypertable | Fuel sensor readings (PUSH-02) |
|
||||||
| `tracksolid.temperature_readings` | Hypertable | `/pushtem` webhook |
|
| `tracksolid.temperature_readings` | Hypertable | Temperature/humidity (PUSH-03) |
|
||||||
| `tracksolid.lbs_readings` | Regular | `/pushlbs` webhook |
|
| `tracksolid.lbs_readings` | Regular | Cell tower fallback positions (PUSH-04) |
|
||||||
| `tracksolid.geofences` | Regular | Manual / API sync |
|
| `tracksolid.geofences` | Regular | Geofence zone storage |
|
||||||
|
|
||||||
### DWH Gold Layer
|
### DWH Gold layer
|
||||||
|
|
||||||
`dwh_gold.fact_daily_fleet_metrics` has been enhanced with new columns:
|
| Object | Status |
|
||||||
|
|
||||||
| Column Group | Columns |
|
|
||||||
|---|---|
|
|---|---|
|
||||||
| Volume | `total_distance_km`, `total_trips`, `total_drive_hours`, `total_idle_hours` |
|
| `dwh_gold.dim_vehicles` | Present, 0 rows |
|
||||||
| Cost | `fuel_consumed_l` |
|
| `dwh_gold.fact_daily_fleet_metrics` | Present, 0 rows — ETL function not yet run |
|
||||||
| Safety | `alarm_count`, `overspeed_count` |
|
|
||||||
| Schedule | `day_start_time`, `day_end_time` |
|
|
||||||
| Performance | `avg_speed_kmh`, `peak_speed_kmh` |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 14. Data Quality Gaps — Priority Ranking
|
## 17. Data Quality Gaps — Priority Matrix
|
||||||
|
|
||||||
### Critical (blocking all meaningful reporting)
|
### P0 — Blocks all driver / vehicle reporting
|
||||||
|
|
||||||
| Gap | Impact | Owner Action |
|
| Gap | Scope | Action |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `vehicle_name`, `vehicle_number`, `driver_name` blank for all 63 devices | Cannot attribute trips, alarms, or KPIs to drivers or plates | Bulk populate via Tracksolid Pro or API |
|
| `vehicle_number`, `vehicle_name`, `driver_name` blank | All 63 devices | Bulk populate via Tracksolid Pro admin or API |
|
||||||
| 44 of 63 devices (70%) have no position data | Most of fleet invisible | Investigate SIM status, device power, connectivity |
|
| 44 devices never activated (no SIM, no position) | 70% of fleet | Commission or confirm storage status per device |
|
||||||
| No push webhooks registered | OBD, fuel, temperature, device events all empty | Register 6 endpoints in Tracksolid Pro |
|
|
||||||
|
|
||||||
### High (limiting analytics depth)
|
### P1 — Blocks operational analytics
|
||||||
|
|
||||||
| Gap | Impact | Owner Action |
|
| Gap | Scope | Action |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `fuel_100km` not set per device | Cannot compute fuel cost or efficiency | Set per vehicle class |
|
| No push webhooks registered | OBD, fuel, temp, events, LBS all empty | Register 6 endpoints in Tracksolid Pro |
|
||||||
| Parking: 0 rows despite 58 API calls | No idle time or utilisation rate data | Validate post-morning operations |
|
| Parking: 0 rows despite 60 API calls | Cannot compute idle time or utilisation | Validate post-morning operations |
|
||||||
| No geofences configured | No zone entry/exit detection, no off-route alerts | Create depot + key-site geofences |
|
| Trips: 0 rows | All KPIs unavailable | Validate first morning trips >07:00 EAT |
|
||||||
|
| `fuel_100km` not set | No cost-per-trip or fuel efficiency | Set per vehicle class |
|
||||||
|
|
||||||
### Medium (enhancing analytics)
|
### P2 — Limits reporting depth
|
||||||
|
|
||||||
| Gap | Impact | Owner Action |
|
| Gap | Scope | Action |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `vehicle_category` blank | Cannot segment by vehicle type | Populate with enrichment data |
|
| No geofences configured | No zone detection, no off-route alerts | Create depot + key-site geofences |
|
||||||
| `cost_centre` blank | Cannot allocate costs to business units | Populate with enrichment data |
|
| `vehicle_category` blank | Cannot segment by vehicle type | Populate alongside vehicle_number |
|
||||||
| `depot_geom` blank | Cannot compute distance-from-base metrics | Set per depot |
|
| `cost_centre` blank | Cannot allocate costs to business units | Populate alongside vehicle_number |
|
||||||
|
| `depot_geom` blank | Cannot compute distance-from-base | Set primary depot coordinates |
|
||||||
|
| DWH gold empty | Grafana summary panels empty | Run `dwh_gold.refresh_daily_metrics()` after first full day |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 15. Grafana Dashboard Readiness
|
## 18. Grafana Dashboard Readiness
|
||||||
|
|
||||||
| Panel | Status | Blocker |
|
| Panel | Ready | Condition |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Fleet map (live positions) | **Partial** — 19/63 devices visible | 44 devices not reporting |
|
| Fleet map — live positions | **Partial** | 19/63 visible; 44 offline |
|
||||||
| Position trail / route playback | **Ready** — 132 fixes, growing | — |
|
| Position trail / route replay | **Ready** | 137 fixes, growing each cycle |
|
||||||
| Alarm feed | **Ready** — live, will grow with operations | — |
|
| Alarm feed | **Ready** | Live; will grow with operations |
|
||||||
| Trips today (distance, duration, speed) | **Not ready** | Fleet parked overnight; validate AM |
|
| Active device count | **Ready** | 4 devices active in last 24h |
|
||||||
| Driver behaviour (speeding, harsh events) | **Not ready** | Trips + driver metadata required |
|
| Trips today | **Not ready** | Validate post-07:00 EAT |
|
||||||
| Fuel efficiency | **Not ready** | fuel_100km + OBD/fuel webhooks |
|
| Distance per vehicle | **Not ready** | Requires trips data |
|
||||||
| Device connectivity uptime | **Not ready** | `/pushevent` webhook registration |
|
| Driver behaviour (speed, harsh events) | **Not ready** | Requires trips + driver metadata |
|
||||||
| Temperature/cold chain | **Not ready** | `/pushtem` webhook registration |
|
| Fuel efficiency | **Not ready** | Requires fuel_100km + OBD/fuel data |
|
||||||
|
| Device connectivity uptime | **Not ready** | Requires `/pushevent` webhook |
|
||||||
**Fleet map and alarm feed can go live immediately.** Full operational dashboards require metadata population and webhook registration (see Section 14).
|
| Cold chain temperature | **Not ready** | Requires `/pushtem` webhook |
|
||||||
|
| Odometer / service alerts | **Ready** | 15 devices with odometer data |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 16. Recommended Next Actions (Priority Order)
|
## 19. Recommended Actions (Priority Order)
|
||||||
|
|
||||||
1. **Populate vehicle metadata** — `vehicle_number`, `vehicle_name`, `driver_name` for all 63 devices. This single action unlocks driver behaviour reporting, trip attribution, and all KPIs in `01_BusinessAnalytics.md`.
|
1. **Populate vehicle metadata** — `vehicle_number`, `vehicle_name`, `driver_name` for all 63 devices. Single most impactful action — unlocks driver scoring, trip attribution, and all KPIs from `01_BusinessAnalytics.md`.
|
||||||
|
|
||||||
2. **Register push webhooks** in Tracksolid Pro dashboard:
|
2. **Investigate X3-63282 in Uganda** — Contact driver/manager today. Confirm cross-border mission or escalate as potential asset displacement.
|
||||||
- `/pushtripreport` — trip completion events
|
|
||||||
- `/pushobd` — OBD diagnostics
|
|
||||||
- `/pushoil` — fuel sensor
|
|
||||||
- `/pushtem` — temperature/humidity
|
|
||||||
- `/pushlbs` — LBS cell fallback
|
|
||||||
- `/pushevent` — device login/logout
|
|
||||||
|
|
||||||
3. **Investigate 44 non-reporting devices** — Pull IMEI list; check SIM status and last-seen dates in Tracksolid Pro.
|
3. **Schedule morning data validation** — At 09:00 EAT run trip, parking, and alarm queries to confirm pipeline behaviour during active operations.
|
||||||
|
|
||||||
4. **Investigate X3-63282 in Uganda** — Confirm vehicle status and mission with fleet manager.
|
4. **Register push webhooks** in Tracksolid Pro:
|
||||||
|
- `/pushtripreport`
|
||||||
|
- `/pushobd`
|
||||||
|
- `/pushoil`
|
||||||
|
- `/pushtem`
|
||||||
|
- `/pushlbs`
|
||||||
|
- `/pushevent`
|
||||||
|
|
||||||
5. **Validate morning data (09:00 EAT check):**
|
5. **Audit 44 silent devices** — Determine which are: (a) in storage awaiting installation, (b) installed but SIM not provisioned, (c) decommissioned. Log the outcome per IMEI.
|
||||||
|
|
||||||
|
6. **Flag KDK 829A GP and Belta KCU-647D for service** — 239k km and 234k km respectively. Both actively communicating and in use.
|
||||||
|
|
||||||
|
7. **Set `fuel_100km`** per vehicle class to enable cost reporting.
|
||||||
|
|
||||||
|
8. **Configure primary depot geofence** at ~(-1.237, 36.727) — the tight cluster where most of the fleet is parked.
|
||||||
|
|
||||||
|
9. **Run DWH gold ETL** after first full operational day:
|
||||||
```sql
|
```sql
|
||||||
-- Trips
|
SELECT dwh_gold.refresh_daily_metrics(CURRENT_DATE - 1);
|
||||||
SELECT imei, COUNT(*) trips, ROUND(SUM(distance_km)::numeric,2) total_km,
|
|
||||||
MAX(max_speed_kmh) top_speed
|
|
||||||
FROM tracksolid.trips
|
|
||||||
WHERE start_time > now() - interval '12 hours'
|
|
||||||
GROUP BY imei ORDER BY total_km DESC;
|
|
||||||
|
|
||||||
-- Parking
|
|
||||||
SELECT COUNT(*) FROM tracksolid.parking_events
|
|
||||||
WHERE created_at > now() - interval '12 hours';
|
|
||||||
|
|
||||||
-- Alarm types populated (BUG-01 validation)
|
|
||||||
SELECT alarm_type, alarm_name, COUNT(*)
|
|
||||||
FROM tracksolid.alarms
|
|
||||||
GROUP BY 1, 2 ORDER BY 3 DESC;
|
|
||||||
```
|
```
|
||||||
|
|
||||||
6. **Configure geofences** — At minimum: main depot(s), fuel stations, key customer sites.
|
|
||||||
|
|
||||||
7. **Set `fuel_100km`** per vehicle class to enable cost per trip calculations.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*End of report. Next comprehensive refresh recommended: 2026-04-11 09:00 EAT after morning operations have populated trip and movement data.*
|
*End of report. Data queried: 2026-04-11 ~07:38 EAT. Next full refresh recommended: 2026-04-11 12:00 EAT after morning operations complete.*
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue