From 2ff735dec8cfb1f3574f3e7af4236214b480602a Mon Sep 17 00:00:00 2001 From: Kyle Bernhardy Date: Sat, 11 Jul 2026 12:14:47 -0600 Subject: [PATCH 1/2] chore(status): remove dead analytics code (tabConfig, KNOWN_METRICS, colorAllocators, fixtures) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deletes code under src/features/instance/status/analytics/ that had zero in-repo references, verified by grep, tsc -b, and the full vitest suite: - tabs/tabConfig.ts (diverged from the live TAB_DEFS in StatusTabs.tsx) - pipeline/index.ts KNOWN_METRICS/KnownMetric (stale list; the "backend allowlist generator" its comment cited does not exist) - types/analytics.ts KnownMetricName -> MetricName -> ChartPanelConfig (dead chain) and PresetOption (only consumer was the dead TIME_PRESETS) - lib/colorAllocators/{tableColors,index}.ts (only colorAllocators consumer is TrafficByTypeRenderer, which imports typeColors.ts directly — kept) - analytics/__fixtures__/replication-latency/ (byte-identical duplicate of __tests__/fixtures/replication-latency/; only the __tests__ copy is read) - lib/time.ts TIME_PRESETS/getTimeRangeFromPreset (used only by their own test; production uses context/timePresets.ts) and formatBytesPerMin (zero callers), plus their orphaned test cases Adds __tests__/paletteDisjointness.test.ts pinning the palette-disjointness invariant the deleted files claimed was "enforced in test/colorAllocators/disjoint.test.ts" (a test that never existed), and fixes stale src/lib/metricSpecs/ path comments in pipeline/index.ts, types/analytics.ts, and FallbackRenderer.tsx to point at pipeline/. Verified: tsc -b clean; vitest 198 files / 1307 passed, 11 skipped; dprint + oxlint clean; Codex and Gemini cross-review found no issues. Fixes #1446 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01UZEaYdKFXuQw2Hf6XpPdEV --- .../replication-latency/low-count-matrix.json | 442 ------ .../replication-latency/multi-source.json | 1322 ----------------- .../replication-latency/single-source.json | 442 ------ .../synthesize-multi-source.ts | 117 -- .../__tests__/paletteDisjointness.test.ts | 18 + .../status/analytics/__tests__/time.test.ts | 44 +- .../analytics/lib/colorAllocators/index.ts | 3 - .../lib/colorAllocators/tableColors.ts | 10 - .../lib/colorAllocators/typeColors.ts | 2 +- .../instance/status/analytics/lib/time.ts | 29 - .../status/analytics/pipeline/index.ts | 37 +- .../analytics/primitives/FallbackRenderer.tsx | 4 +- .../status/analytics/tabs/tabConfig.ts | 116 -- .../status/analytics/types/analytics.ts | 30 +- 14 files changed, 26 insertions(+), 2590 deletions(-) delete mode 100644 src/features/instance/status/analytics/__fixtures__/replication-latency/low-count-matrix.json delete mode 100644 src/features/instance/status/analytics/__fixtures__/replication-latency/multi-source.json delete mode 100644 src/features/instance/status/analytics/__fixtures__/replication-latency/single-source.json delete mode 100644 src/features/instance/status/analytics/__fixtures__/replication-latency/synthesize-multi-source.ts create mode 100644 src/features/instance/status/analytics/__tests__/paletteDisjointness.test.ts delete mode 100644 src/features/instance/status/analytics/lib/colorAllocators/index.ts delete mode 100644 src/features/instance/status/analytics/lib/colorAllocators/tableColors.ts delete mode 100644 src/features/instance/status/analytics/tabs/tabConfig.ts diff --git a/src/features/instance/status/analytics/__fixtures__/replication-latency/low-count-matrix.json b/src/features/instance/status/analytics/__fixtures__/replication-latency/low-count-matrix.json deleted file mode 100644 index 5df0149f5..000000000 --- a/src/features/instance/status/analytics/__fixtures__/replication-latency/low-count-matrix.json +++ /dev/null @@ -1,442 +0,0 @@ -[ - { - "time": 1700000000000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 20, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 6, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 2, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 30, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 20, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 6, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 2, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 30, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 20, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 6, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 2, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 30, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 20, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 6, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 2, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 30, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 20, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 6, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 2, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 30, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 20, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 6, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 2, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 30, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 20, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 6, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 2, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 30, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 20, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 6, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 2, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 30, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 20, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 6, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 2, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 30, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 20, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 6, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 2, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 30, - "mean": 50, - "p50": 45, - "p95": 75, - "p99": 90, - "period": 60000 - } -] diff --git a/src/features/instance/status/analytics/__fixtures__/replication-latency/multi-source.json b/src/features/instance/status/analytics/__fixtures__/replication-latency/multi-source.json deleted file mode 100644 index 3e30d3a76..000000000 --- a/src/features/instance/status/analytics/__fixtures__/replication-latency/multi-source.json +++ /dev/null @@ -1,1322 +0,0 @@ -[ - { - "time": 1700000000000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 440, - "mean": 68.08830015361309, - "p50": 61.27947013825178, - "p95": 113.6376254972917, - "p99": 125.00138804702087, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 310, - "mean": 73.57872331514955, - "p50": 66.22085098363459, - "p95": 110.72776273369071, - "p99": 121.8005390070598, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 446, - "mean": 41.85823954641819, - "p50": 37.67241559177637, - "p95": 74.29196219282896, - "p99": 81.72115841211186, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 452, - "mean": 57.78536440804601, - "p50": 52.006827967241406, - "p95": 89.56467060518727, - "p99": 98.52113766570601, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 178, - "mean": 79.65900519862771, - "p50": 71.69310467876494, - "p95": 126.19586837061449, - "p99": 138.81545520767594, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 344, - "mean": 60.058359019458294, - "p50": 54.052523117512465, - "p95": 108.82377727477161, - "p99": 119.70615500224879, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 434, - "mean": 20.307436157017946, - "p50": 18.27669254131615, - "p95": 34.16663493593005, - "p99": 37.583298429523055, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 112, - "mean": 24.096741303801537, - "p50": 21.687067173421383, - "p95": 42.29928460615025, - "p99": 46.52921306676528, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 174, - "mean": 41.356478948146105, - "p50": 37.220831053331494, - "p95": 59.432107040723835, - "p99": 65.37531774479622, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 110, - "mean": 82.68378345295787, - "p50": 74.41540510766208, - "p95": 142.06738949179172, - "p99": 156.2741284409709, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 295, - "mean": 33.84041875600815, - "p50": 30.456376880407333, - "p95": 64.48673768344693, - "p99": 70.93541145179164, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 279, - "mean": 84.72183870151639, - "p50": 76.24965483136475, - "p95": 134.84980607518546, - "p99": 148.33478668270402, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 322, - "mean": 22.995137088000774, - "p50": 20.695623379200697, - "p95": 32.902261708520356, - "p99": 36.19248787937239, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 358, - "mean": 67.73836102336645, - "p50": 60.964524921029806, - "p95": 104.79834376593674, - "p99": 115.27817814253042, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 395, - "mean": 36.760839093476534, - "p50": 33.08475518412888, - "p95": 58.162182812179736, - "p99": 63.978401093397714, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 181, - "mean": 88.69687354192138, - "p50": 79.82718618772924, - "p95": 151.21023253736726, - "p99": 166.331255791104, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 129, - "mean": 42.736558616161346, - "p50": 38.46290275454521, - "p95": 67.34405462434171, - "p99": 74.07846008677589, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 377, - "mean": 72.78878347948194, - "p50": 65.50990513153374, - "p95": 131.63570231524614, - "p99": 144.79927254677077, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 477, - "mean": 94.22719202935696, - "p50": 84.80447282642126, - "p95": 136.89145686489104, - "p99": 150.58060255138017, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 154, - "mean": 54.49099976569414, - "p50": 49.04189978912473, - "p95": 107.09534296096172, - "p99": 117.8048772570579, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 244, - "mean": 28.875453248620033, - "p50": 25.98790792375803, - "p95": 40.70011719030238, - "p99": 44.77012890933262, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 459, - "mean": 58.537801411002874, - "p50": 52.68402126990259, - "p95": 103.4452637574139, - "p99": 113.7897901331553, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 473, - "mean": 26.206592451781034, - "p50": 23.58593320660293, - "p95": 48.00415657855218, - "p99": 52.8045722364074, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 171, - "mean": 42.26011773571372, - "p50": 38.03410596214235, - "p95": 77.08039401181387, - "p99": 84.78843341299526, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 148, - "mean": 61.62530831992626, - "p50": 55.462777487933636, - "p95": 116.66503144794257, - "p99": 128.33153459273683, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 466, - "mean": 99.65109080076218, - "p50": 89.68598172068596, - "p95": 173.16172029529116, - "p99": 190.4778923248203, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 234, - "mean": 54.71922958269715, - "p50": 49.24730662442744, - "p95": 95.59842371456399, - "p99": 105.1582660860204, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 391, - "mean": 67.69912829622626, - "p50": 60.92921546660364, - "p95": 107.89715633810277, - "p99": 118.68687197191306, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 437, - "mean": 43.61669426783919, - "p50": 39.255024841055274, - "p95": 72.83367023618425, - "p99": 80.11703725980267, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 456, - "mean": 75.60521643608809, - "p50": 68.04469479247928, - "p95": 150.93877521610491, - "p99": 166.0326527377154, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 218, - "mean": 54.55131759867072, - "p50": 49.09618583880365, - "p95": 94.21710149241201, - "p99": 103.63881164165322, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 225, - "mean": 28.07019516825676, - "p50": 25.263175651431084, - "p95": 51.03253853345741, - "p99": 56.13579238680316, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 137, - "mean": 82.87540651857853, - "p50": 74.58786586672068, - "p95": 161.01575111161074, - "p99": 177.11732622277182, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 151, - "mean": 58.03134389221668, - "p50": 52.228209502995014, - "p95": 109.86322743153339, - "p99": 120.84955017468674, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 383, - "mean": 97.81971331685781, - "p50": 88.03774198517203, - "p95": 147.41791824097677, - "p99": 162.15971006507448, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 265, - "mean": 75.97529837861657, - "p50": 68.37776854075491, - "p95": 116.53921508812928, - "p99": 128.19313659694222, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 234, - "mean": 33.07499727234244, - "p50": 29.7674975451082, - "p95": 59.29684960628193, - "p99": 65.22653456691013, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 454, - "mean": 36.55632983893156, - "p50": 32.900696855038404, - "p95": 64.9731016141712, - "p99": 71.47041177558833, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 257, - "mean": 46.11023711040616, - "p50": 41.499213399365544, - "p95": 86.4777385913091, - "p99": 95.12551245044003, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 247, - "mean": 30.51142418757081, - "p50": 27.46028176881373, - "p95": 58.527664186294345, - "p99": 64.38043060492379, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 354, - "mean": 20.762110948562622, - "p50": 18.68589985370636, - "p95": 38.25322295829395, - "p99": 42.07854525412334, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 183, - "mean": 90.07386846467853, - "p50": 81.06648161821067, - "p95": 175.18454856242863, - "p99": 192.7030034186715, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 173, - "mean": 68.31460393965244, - "p50": 61.4831435456872, - "p95": 115.6938878405825, - "p99": 127.26327662464077, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 383, - "mean": 23.797925151884556, - "p50": 21.4181326366961, - "p95": 43.39149641390884, - "p99": 47.73064605529973, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 234, - "mean": 43.31936929374933, - "p50": 38.9874323643744, - "p95": 67.80741067189105, - "p99": 74.58815173908016, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 497, - "mean": 22.32854375615716, - "p50": 20.095689380541444, - "p95": 34.21932514931173, - "p99": 37.64125766424291, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 165, - "mean": 65.78813321888447, - "p50": 59.20931989699602, - "p95": 131.1248651886796, - "p99": 144.23735170754756, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 217, - "mean": 33.66672521457076, - "p50": 30.300052693113685, - "p95": 58.46491083881721, - "p99": 64.31140192269893, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 267, - "mean": 51.572506595402956, - "p50": 46.41525593586266, - "p95": 85.64370327852997, - "p99": 94.20807360638297, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 234, - "mean": 74.89094322547317, - "p50": 67.40184890292585, - "p95": 122.75435546035084, - "p99": 135.02979100638592, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 298, - "mean": 91.65131198242307, - "p50": 82.48618078418076, - "p95": 146.31124247103043, - "p99": 160.94236671813348, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 335, - "mean": 68.86958653107285, - "p50": 61.98262787796557, - "p95": 118.99405925575142, - "p99": 130.89346518132658, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 219, - "mean": 38.83256068453193, - "p50": 34.949304616078734, - "p95": 61.946452801738985, - "p99": 68.14109808191289, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 188, - "mean": 45.6452520377934, - "p50": 41.08072683401406, - "p95": 82.23345516012262, - "p99": 90.45680067613489, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 225, - "mean": 33.544367495924234, - "p50": 30.18993074633181, - "p95": 60.94983791695116, - "p99": 67.04482170864628, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 116, - "mean": 29.99297320842743, - "p50": 26.993675887584686, - "p95": 47.637146078449625, - "p99": 52.40086068629459, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 292, - "mean": 66.20286727324128, - "p50": 59.58258054591715, - "p95": 100.93372836512124, - "p99": 111.02710120163337, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 465, - "mean": 50.39440618827939, - "p50": 45.35496556945145, - "p95": 92.08216617217612, - "p99": 101.29038278939373, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 161, - "mean": 84.93596302345395, - "p50": 76.44236672110856, - "p95": 141.30094555912183, - "p99": 155.43104011503402, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 436, - "mean": 89.41042818129063, - "p50": 80.46938536316156, - "p95": 153.37510737876636, - "p99": 168.712618116643, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 158, - "mean": 91.56048120930791, - "p50": 82.40443308837712, - "p95": 152.9116507906982, - "p99": 168.20281586976802, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 183, - "mean": 69.49953416362405, - "p50": 62.54958074726164, - "p95": 130.97573061771178, - "p99": 144.07330367948296, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 493, - "mean": 51.171488892287016, - "p50": 46.054340003058314, - "p95": 88.39349053784869, - "p99": 97.23283959163356, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 437, - "mean": 59.35994790866971, - "p50": 53.42395311780274, - "p95": 113.71521741934092, - "p99": 125.08673916127502, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 127, - "mean": 79.48965273797512, - "p50": 71.54068746417761, - "p95": 113.83926017417656, - "p99": 125.22318619159422, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 370, - "mean": 33.544108122587204, - "p50": 30.189697310328484, - "p95": 57.156663268882205, - "p99": 62.87232959577043, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 426, - "mean": 80.86394801735878, - "p50": 72.7775532156229, - "p95": 161.313384796784, - "p99": 177.4447232764624, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 441, - "mean": 70.52910281345248, - "p50": 63.476192532107234, - "p95": 134.1594461120513, - "p99": 147.57539072325645, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 278, - "mean": 67.95113693922758, - "p50": 61.15602324530482, - "p95": 109.44545586282497, - "p99": 120.39000144910747, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 239, - "mean": 90.27041340246797, - "p50": 81.24337206222117, - "p95": 163.2624664302918, - "p99": 179.588713073321, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 231, - "mean": 95.00253995880485, - "p50": 85.50228596292436, - "p95": 168.68314319495647, - "p99": 185.55145751445212, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 246, - "mean": 87.57358822971582, - "p50": 78.81622940674424, - "p95": 130.5684342218625, - "p99": 143.62527764404877, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 359, - "mean": 21.59760743379593, - "p50": 19.437846690416336, - "p95": 31.34463889374203, - "p99": 34.47910278311623, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 451, - "mean": 78.10915498062968, - "p50": 70.29823948256671, - "p95": 154.15350483493805, - "p99": 169.56885531843187, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 158, - "mean": 57.299815341830254, - "p50": 51.56983380764723, - "p95": 104.54274232804745, - "p99": 114.9970165608522, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 119, - "mean": 41.84808460995555, - "p50": 37.663276148959994, - "p95": 62.08092948923801, - "p99": 68.28902243816182, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 327, - "mean": 43.27876728028059, - "p50": 38.95089055225253, - "p95": 72.04142606425106, - "p99": 79.24556867067616, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 413, - "mean": 77.30968339368701, - "p50": 69.57871505431831, - "p95": 145.04401109969822, - "p99": 159.54841220966807, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 307, - "mean": 35.67400865256786, - "p50": 32.10660778731108, - "p95": 64.20658497430802, - "p99": 70.62724347173882, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 283, - "mean": 55.483501739799976, - "p50": 49.93515156581998, - "p95": 93.2908890732352, - "p99": 102.61997798055873, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 223, - "mean": 54.0042850933969, - "p50": 48.60385658405721, - "p95": 86.36111805698201, - "p99": 94.99722986268021, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 206, - "mean": 31.811637729406357, - "p50": 28.63047395646572, - "p95": 54.16753132028979, - "p99": 59.58428445231878, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 358, - "mean": 62.44458980858326, - "p50": 56.200130827724934, - "p95": 107.95260320892369, - "p99": 118.74786352981607, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 101, - "mean": 54.97514482587576, - "p50": 49.47763034328818, - "p95": 81.41242876517565, - "p99": 89.55367164169321, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 127, - "mean": 31.85418674722314, - "p50": 28.668768072500825, - "p95": 62.62355173261974, - "p99": 68.88590690588171, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 300, - "mean": 89.6524247340858, - "p50": 80.68718226067722, - "p95": 148.66517002152736, - "p99": 163.53168702368012, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 122, - "mean": 27.90330158546567, - "p50": 25.112971426919103, - "p95": 52.821020130253984, - "p99": 58.103122143279386, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 381, - "mean": 49.64893335476518, - "p50": 44.68404001928866, - "p95": 76.35141174500632, - "p99": 83.98655291950695, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 486, - "mean": 65.12401949614286, - "p50": 58.61161754652858, - "p95": 94.87074137180237, - "p99": 104.35781550898261, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 418, - "mean": 80.00869503244758, - "p50": 72.00782552920282, - "p95": 143.75324784233334, - "p99": 158.1285726265667, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 310, - "mean": 63.90465943142772, - "p50": 57.514193488284945, - "p95": 120.3265295462861, - "p99": 132.35918250091473, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 138, - "mean": 34.14659507572651, - "p50": 30.731935568153858, - "p95": 49.405058671321825, - "p99": 54.34556453845401, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 368, - "mean": 24.765935018658638, - "p50": 22.289341516792774, - "p95": 38.57703158862689, - "p99": 42.43473474748958, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 490, - "mean": 73.46919283270836, - "p50": 66.12227354943752, - "p95": 127.58666123806096, - "p99": 140.34532736186705, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 235, - "mean": 21.770629417151213, - "p50": 19.59356647543609, - "p95": 35.661559658244734, - "p99": 39.22771562406921, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 314, - "mean": 42.73047698661685, - "p50": 38.457429287955165, - "p95": 81.18196105198146, - "p99": 89.30015715717961, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 480, - "mean": 36.39728240668774, - "p50": 32.75755416601896, - "p95": 71.57811161981608, - "p99": 78.7359227817977, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 444, - "mean": 41.300274170935154, - "p50": 37.17024675384164, - "p95": 70.66543709078636, - "p99": 77.731980799865, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 327, - "mean": 94.82773313298821, - "p50": 85.3449598196894, - "p95": 171.73192119524268, - "p99": 188.90511331476696, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 297, - "mean": 84.79339888319373, - "p50": 76.31405899487436, - "p95": 134.58285775997874, - "p99": 148.04114353597663, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 374, - "mean": 80.02004621550441, - "p50": 72.01804159395397, - "p95": 138.42163423323393, - "p99": 152.26379765655733, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 486, - "mean": 64.34294272214174, - "p50": 57.90864844992757, - "p95": 111.15941586750925, - "p99": 122.27535745426019, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 223, - "mean": 98.7452052347362, - "p50": 88.87068471126258, - "p95": 183.65986265507348, - "p99": 202.02584892058084, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 445, - "mean": 70.52431620657444, - "p50": 63.471884585916996, - "p95": 126.9968033852641, - "p99": 139.69648372379052, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 226, - "mean": 50.94786640256643, - "p50": 45.85307976230979, - "p95": 98.1641995928818, - "p99": 107.98061955216998, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 235, - "mean": 90.38984775543213, - "p50": 81.35086297988892, - "p95": 148.95768283035304, - "p99": 163.85345111338836, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 347, - "mean": 62.6288491114974, - "p50": 56.36596420034766, - "p95": 119.12351260174178, - "p99": 131.03586386191597, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 160, - "mean": 89.41880248486996, - "p50": 80.47692223638296, - "p95": 162.2872201113552, - "p99": 178.51594212249074, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 294, - "mean": 42.939206063747406, - "p50": 38.645285457372665, - "p95": 84.88506232526113, - "p99": 93.37356855778725, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 408, - "mean": 41.98626723140478, - "p50": 37.7876405082643, - "p95": 74.6708702163707, - "p99": 82.13795723800777, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 174, - "mean": 79.06396716833115, - "p50": 71.15757045149803, - "p95": 144.5999176839059, - "p99": 159.0599094522965, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 317, - "mean": 87.73853551596403, - "p50": 78.96468196436763, - "p95": 170.34745877710344, - "p99": 187.3822046548138, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 299, - "mean": 57.70591750741005, - "p50": 51.935325756669044, - "p95": 83.29887525908148, - "p99": 91.62876278498965, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 268, - "mean": 91.45723784342408, - "p50": 82.31151405908167, - "p95": 165.09422685682247, - "p99": 181.60364954250474, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 386, - "mean": 55.42261255905032, - "p50": 49.88035130314529, - "p95": 98.07129186730614, - "p99": 107.87842105403676, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 167, - "mean": 61.42927374690771, - "p50": 55.28634637221694, - "p95": 87.59757833563589, - "p99": 96.35733616919948, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.events", - "count": 250, - "mean": 27.80489942058921, - "p50": 25.024409478530288, - "p95": 40.948028083939604, - "p99": 45.04283089233357, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "4u4-us-east-1.prod.ibm.harperfabric.com.data.users", - "count": 373, - "mean": 86.25415738672018, - "p50": 77.62874164804816, - "p95": 164.11694188356762, - "p99": 180.5286360719244, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.events", - "count": 208, - "mean": 26.779961492866278, - "p50": 24.10196534357965, - "p95": 38.01914677118368, - "p99": 41.821061448302046, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "846-fr-par-1.prod.ibm.harperfabric.com.data.users", - "count": 442, - "mean": 76.00186632946134, - "p50": 68.4016796965152, - "p95": 118.69998167726837, - "p99": 130.5699798449952, - "period": 60000 - } -] diff --git a/src/features/instance/status/analytics/__fixtures__/replication-latency/single-source.json b/src/features/instance/status/analytics/__fixtures__/replication-latency/single-source.json deleted file mode 100644 index 6ff36b09f..000000000 --- a/src/features/instance/status/analytics/__fixtures__/replication-latency/single-source.json +++ /dev/null @@ -1,442 +0,0 @@ -[ - { - "time": 1700000000000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 490, - "mean": 20.93638025224209, - "p50": 18.84274222701788, - "p95": 30.089241337347683, - "p99": 33.09816547108245, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 262, - "mean": 75.92229645699263, - "p50": 68.33006681129336, - "p95": 130.04480839795116, - "p99": 143.04928923774628, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 321, - "mean": 57.29861060157418, - "p50": 51.568749541416764, - "p95": 88.46648272302305, - "p99": 97.31313099532537, - "period": 60000 - }, - { - "time": 1700000000000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 162, - "mean": 78.38576719164848, - "p50": 70.54719047248363, - "p95": 121.86551639521699, - "p99": 134.05206803473868, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 178, - "mean": 81.12719092518091, - "p50": 73.01447183266282, - "p95": 138.81199267654284, - "p99": 152.69319194419714, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 313, - "mean": 49.43668747320771, - "p50": 44.49301872588694, - "p95": 77.90966866071379, - "p99": 85.70063552678518, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 199, - "mean": 43.70641985908151, - "p50": 39.335777873173356, - "p95": 86.83450162793538, - "p99": 95.51795179072893, - "period": 60000 - }, - { - "time": 1700000060000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 157, - "mean": 90.22236764431, - "p50": 81.200130879879, - "p95": 136.6395225486332, - "p99": 150.30347480349656, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 319, - "mean": 32.37152241170406, - "p50": 29.134370170533657, - "p95": 50.971251605751135, - "p99": 56.06837676632625, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 465, - "mean": 80.94989560544491, - "p50": 72.85490604490042, - "p95": 116.94919281689, - "p99": 128.64411209857903, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 372, - "mean": 64.29685983806849, - "p50": 57.86717385426164, - "p95": 113.9967186637367, - "p99": 125.39639053011038, - "period": 60000 - }, - { - "time": 1700000120000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 468, - "mean": 97.2791763022542, - "p50": 87.55125867202878, - "p95": 172.63438768198094, - "p99": 189.89782645017905, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 169, - "mean": 86.21027873829007, - "p50": 77.58925086446106, - "p95": 122.7623234613449, - "p99": 135.0385558074794, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 108, - "mean": 48.55848113074899, - "p50": 43.70263301767409, - "p95": 80.37348493132444, - "p99": 88.4108334244569, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 247, - "mean": 27.048498820513487, - "p50": 24.343648938462138, - "p95": 50.33210392878639, - "p99": 55.36531432166503, - "period": 60000 - }, - { - "time": 1700000180000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 478, - "mean": 54.13725629448891, - "p50": 48.723530665040016, - "p95": 91.0154241035702, - "p99": 100.11696651392722, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 232, - "mean": 76.26248687505722, - "p50": 68.6362381875515, - "p95": 138.26224757568096, - "p99": 152.08847233324906, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 153, - "mean": 48.506761863827705, - "p50": 43.656085677444935, - "p95": 71.94885376416407, - "p99": 79.14373914058048, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 176, - "mean": 93.04278945550323, - "p50": 83.7385105099529, - "p95": 148.25960763898246, - "p99": 163.0855684028807, - "period": 60000 - }, - { - "time": 1700000240000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 117, - "mean": 70.57669980451465, - "p50": 63.51902982406318, - "p95": 113.06828817872939, - "p99": 124.37511699660234, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 319, - "mean": 74.74030217155814, - "p50": 67.26627195440233, - "p95": 145.95458583953405, - "p99": 160.55004442348746, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 467, - "mean": 86.12620195373893, - "p50": 77.51358175836504, - "p95": 154.43690871219434, - "p99": 169.88059958341378, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 359, - "mean": 29.363311547785997, - "p50": 26.426980393007398, - "p95": 50.444919936366645, - "p99": 55.489411930003314, - "period": 60000 - }, - { - "time": 1700000300000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 435, - "mean": 91.28519272431731, - "p50": 82.15667345188558, - "p95": 180.40683834098783, - "p99": 198.44752217508662, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 487, - "mean": 67.53876650705934, - "p50": 60.7848898563534, - "p95": 133.61345978283305, - "p99": 146.97480576111636, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 102, - "mean": 63.885461427271366, - "p50": 57.49691528454423, - "p95": 120.81448568266252, - "p99": 132.89593425092878, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 389, - "mean": 61.28587929531932, - "p50": 55.15729136578739, - "p95": 97.8633647807827, - "p99": 107.64970125886099, - "period": 60000 - }, - { - "time": 1700000360000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 490, - "mean": 63.959608152508736, - "p50": 57.56364733725786, - "p95": 118.53313176251609, - "p99": 130.3864449387677, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 271, - "mean": 64.60426591336727, - "p50": 58.143839322030544, - "p95": 122.35374089250367, - "p99": 134.58911498175405, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 320, - "mean": 71.38811200857162, - "p50": 64.24930080771446, - "p95": 131.57772802323643, - "p99": 144.73550082556008, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 103, - "mean": 44.9907061830163, - "p50": 40.49163556471467, - "p95": 69.38021781906947, - "p99": 76.31823960097643, - "period": 60000 - }, - { - "time": 1700000420000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 433, - "mean": 21.925824526697397, - "p50": 19.733242074027658, - "p95": 43.10700736952945, - "p99": 47.417708106482394, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 347, - "mean": 70.44811246916652, - "p50": 63.403301222249866, - "p95": 99.23608050083502, - "p99": 109.15968855091853, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 497, - "mean": 67.59173091500998, - "p50": 60.83255782350898, - "p95": 123.70029262623918, - "p99": 136.0703218888631, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 359, - "mean": 42.23979230970144, - "p50": 38.0158130787313, - "p95": 84.13174688172315, - "p99": 92.54492156989546, - "period": 60000 - }, - { - "time": 1700000480000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 432, - "mean": 84.39339527860284, - "p50": 75.95405575074255, - "p95": 149.76783997950972, - "p99": 164.7446239774607, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 302, - "mean": 31.12513268366456, - "p50": 28.012619415298104, - "p95": 62.14192413559616, - "p99": 68.35611654915579, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-a.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 258, - "mean": 65.35119313746691, - "p50": 58.81607382372022, - "p95": 97.7999784393212, - "p99": 107.57997628325332, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.events", - "count": 444, - "mean": 36.8535234592855, - "p50": 33.16817111335695, - "p95": 69.58407121273606, - "p99": 76.54247833400967, - "period": 60000 - }, - { - "time": 1700000540000, - "node": "dest-b.prod.ibm.harperfabric.com", - "path": "xb6-us-west-1.prod.ibm.harperfabric.com.data.users", - "count": 496, - "mean": 78.87354400008917, - "p50": 70.98618960008025, - "p95": 141.58377877009954, - "p99": 155.7421566471095, - "period": 60000 - } -] diff --git a/src/features/instance/status/analytics/__fixtures__/replication-latency/synthesize-multi-source.ts b/src/features/instance/status/analytics/__fixtures__/replication-latency/synthesize-multi-source.ts deleted file mode 100644 index 3207e608c..000000000 --- a/src/features/instance/status/analytics/__fixtures__/replication-latency/synthesize-multi-source.ts +++ /dev/null @@ -1,117 +0,0 @@ -// Deterministic synthesizer for replication-latency fixtures. Rotates 3 -// synthetic writer (source) nodes across a fixed set of destination nodes. -// Output is stable across runs (Mulberry32 seed); commit alongside the script. -import { writeFileSync } from 'node:fs'; -import { dirname, join } from 'node:path'; -import { fileURLToPath } from 'node:url'; - -interface FixtureRecord { - time: number; - node: string; // destination (the node emitting the metric) - path: string; // '..' - count: number; - mean: number; - p50: number; - p95: number; - p99: number; - period: number; -} - -const SOURCES = [ - 'xb6-us-west-1.prod.ibm.harperfabric.com', - '4u4-us-east-1.prod.ibm.harperfabric.com', - '846-fr-par-1.prod.ibm.harperfabric.com', -]; -const DESTINATIONS = ['dest-a.prod.ibm.harperfabric.com', 'dest-b.prod.ibm.harperfabric.com']; -const DATABASES = ['data']; -const TABLES = ['events', 'users']; -const PERIOD = 60_000; -const WINDOW_BUCKETS = 10; -const START = 1_700_000_000_000; - -function mulberry32(seed: number) { - return () => { - seed = (seed + 0x6d2b79f5) | 0; - let t = seed; - t = Math.imul(t ^ (t >>> 15), t | 1); - t ^= t + Math.imul(t ^ (t >>> 7), t | 61); - return ((t ^ (t >>> 14)) >>> 0) / 4294967296; - }; -} - -function synthesize(opts: { sources: string[]; seed: number }): FixtureRecord[] { - const rng = mulberry32(opts.seed); - const records: FixtureRecord[] = []; - for (let b = 0; b < WINDOW_BUCKETS; b++) { - const time = START + b * PERIOD; - for (const dest of DESTINATIONS) { - for (const source of opts.sources) { - for (const db of DATABASES) { - for (const table of TABLES) { - const base = 20 + rng() * 80; // 20–100 ms - const p95 = base * (1.4 + rng() * 0.6); - const count = 100 + Math.floor(rng() * 400); - records.push({ - time, - node: dest, - path: `${source}.${db}.${table}`, - count, - mean: base, - p50: base * 0.9, - p95, - p99: p95 * 1.1, - period: PERIOD, - }); - } - } - } - } - } - return records; -} - -// 2×2 matrix with pinned per-cell counts. Guaranteed confidence-tier diversity: -// cells sum to 200 (ok), 60 (grey), 20 (suppress), 300 (ok). -function synthesizeLowCountMatrix(): FixtureRecord[] { - const srcs = SOURCES.slice(0, 2); - const dests = ['dest-a.prod.ibm.harperfabric.com', 'dest-b.prod.ibm.harperfabric.com']; - const perRecord: Record = { - [`${srcs[0]}|${dests[0]}`]: 20, // Σ = 200 → ok - [`${srcs[0]}|${dests[1]}`]: 6, // Σ = 60 → grey - [`${srcs[1]}|${dests[0]}`]: 2, // Σ = 20 → suppress - [`${srcs[1]}|${dests[1]}`]: 30, // Σ = 300 → ok - }; - const records: FixtureRecord[] = []; - for (let b = 0; b < WINDOW_BUCKETS; b++) { - const time = START + b * PERIOD; - for (const src of srcs) { - for (const dest of dests) { - const count = perRecord[`${src}|${dest}`]; - const base = 50; - records.push({ - time, - node: dest, - path: `${src}.data.events`, - count, - mean: base, - p50: base * 0.9, - p95: base * 1.5, - p99: base * 1.8, - period: PERIOD, - }); - } - } - } - return records; -} - -const here = dirname(fileURLToPath(import.meta.url)); -const multi = synthesize({ sources: SOURCES, seed: 42 }); -const single = synthesize({ sources: [SOURCES[0]], seed: 7 }); -const lowCountMatrix = synthesizeLowCountMatrix(); - -writeFileSync(join(here, 'multi-source.json'), JSON.stringify(multi, null, 2) + '\n'); -writeFileSync(join(here, 'single-source.json'), JSON.stringify(single, null, 2) + '\n'); -writeFileSync(join(here, 'low-count-matrix.json'), JSON.stringify(lowCountMatrix, null, 2) + '\n'); - -console.log(`multi: ${multi.length}, single: ${single.length}, low-count-matrix: ${lowCountMatrix.length}`); diff --git a/src/features/instance/status/analytics/__tests__/paletteDisjointness.test.ts b/src/features/instance/status/analytics/__tests__/paletteDisjointness.test.ts new file mode 100644 index 000000000..ced681698 --- /dev/null +++ b/src/features/instance/status/analytics/__tests__/paletteDisjointness.test.ts @@ -0,0 +1,18 @@ +import { describe, expect, it } from 'vitest'; +import { TYPE_PALETTE } from '../lib/colorAllocators/typeColors.ts'; +import { NODE_PALETTE } from '../lib/nodeColors.ts'; +import { TABLE_PALETTE } from '../lib/tableColors.ts'; + +describe('categorical palettes', () => { + it('node, table, and type palettes are pairwise disjoint', () => { + const palettes = { NODE_PALETTE, TABLE_PALETTE, TYPE_PALETTE }; + const seen = new Map(); + for (const [name, palette] of Object.entries(palettes)) { + for (const color of palette) { + const key = color.toLowerCase(); + expect(seen.get(key), `${color} appears in both ${seen.get(key)} and ${name}`).toBeUndefined(); + seen.set(key, name); + } + } + }); +}); diff --git a/src/features/instance/status/analytics/__tests__/time.test.ts b/src/features/instance/status/analytics/__tests__/time.test.ts index a19ffc201..c13834787 100644 --- a/src/features/instance/status/analytics/__tests__/time.test.ts +++ b/src/features/instance/status/analytics/__tests__/time.test.ts @@ -1,47 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { - formatAxisTick, - formatTooltipTime, - getTimeRangeFromPreset, - getTimezoneAbbr, - TIME_PRESETS, -} from '../lib/time.ts'; - -describe('TIME_PRESETS', () => { - it('has all required presets', () => { - const labels = TIME_PRESETS.map((p) => p.label); - expect(labels.includes('15m')).toBeTruthy(); - expect(labels.includes('30m')).toBeTruthy(); - expect(labels.includes('1h')).toBeTruthy(); - expect(labels.includes('6h')).toBeTruthy(); - expect(labels.includes('12h')).toBeTruthy(); - expect(labels.includes('1d')).toBeTruthy(); - expect(labels.includes('3d')).toBeTruthy(); - expect(labels.includes('1w')).toBeTruthy(); - expect(labels.includes('1mo')).toBeTruthy(); - }); -}); - -describe('getTimeRangeFromPreset', () => { - it('returns a range where start < end', () => { - const now = Date.now(); - const range = getTimeRangeFromPreset('1h', now); - expect(range.startTime < range.endTime).toBeTruthy(); - expect(range.endTime).toBe(now); - }); - - it('returns correct duration for 1h preset', () => { - const now = Date.now(); - const range = getTimeRangeFromPreset('1h', now); - expect(range.endTime - range.startTime).toBe(60 * 60 * 1000); - }); - - it('returns correct duration for 1d preset', () => { - const now = Date.now(); - const range = getTimeRangeFromPreset('1d', now); - expect(range.endTime - range.startTime).toBe(24 * 60 * 60 * 1000); - }); -}); +import { formatAxisTick, formatTooltipTime, getTimezoneAbbr } from '../lib/time.ts'; describe('formatAxisTick', () => { it('formats a timestamp to local time string', () => { diff --git a/src/features/instance/status/analytics/lib/colorAllocators/index.ts b/src/features/instance/status/analytics/lib/colorAllocators/index.ts deleted file mode 100644 index 65bbac9e6..000000000 --- a/src/features/instance/status/analytics/lib/colorAllocators/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { getNodeColor, NODE_PALETTE } from '../nodeColors.ts'; -export * from './tableColors.ts'; -export * from './typeColors.ts'; diff --git a/src/features/instance/status/analytics/lib/colorAllocators/tableColors.ts b/src/features/instance/status/analytics/lib/colorAllocators/tableColors.ts deleted file mode 100644 index 366fb0b2a..000000000 --- a/src/features/instance/status/analytics/lib/colorAllocators/tableColors.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Re-exports from the existing src/lib/tableColors.ts so there's one source of -// truth for table palette. The new namespace exists for symmetry with -// typeColors and nodeColors. Disjointness against NODE_PALETTE is enforced in -// test/colorAllocators/disjoint.test.ts; if the existing palette collides, -// update src/lib/tableColors.ts directly. -export { getTableColor, OTHER_COLOR } from '../tableColors.ts'; -// Import the raw palette array for the disjointness test. The existing -// src/lib/tableColors.ts must export a TABLE_PALETTE array for this to work; -// if it doesn't, update that file to export one. -export { TABLE_PALETTE } from '../tableColors.ts'; diff --git a/src/features/instance/status/analytics/lib/colorAllocators/typeColors.ts b/src/features/instance/status/analytics/lib/colorAllocators/typeColors.ts index 322c48798..ea6183c13 100644 --- a/src/features/instance/status/analytics/lib/colorAllocators/typeColors.ts +++ b/src/features/instance/status/analytics/lib/colorAllocators/typeColors.ts @@ -1,6 +1,6 @@ /** Protocol / type series colors. Six hues spread across the color wheel for * accessibility and colorblind-friendliness. Disjoint from NODE_PALETTE and - * TABLE_PALETTE (enforced in test/colorAllocators/disjoint.test.ts). */ + * TABLE_PALETTE (enforced in __tests__/paletteDisjointness.test.ts). */ export const TYPE_PALETTE: readonly string[] = [ '#0d9488', // teal-600 '#dc2626', // red-600 diff --git a/src/features/instance/status/analytics/lib/time.ts b/src/features/instance/status/analytics/lib/time.ts index 56b3d965c..cd13ec583 100644 --- a/src/features/instance/status/analytics/lib/time.ts +++ b/src/features/instance/status/analytics/lib/time.ts @@ -1,23 +1,3 @@ -import type { PresetOption, TimeRange } from '../types/analytics.ts'; - -export const TIME_PRESETS: PresetOption[] = [ - { label: '15m', value: '15m', durationMs: 15 * 60 * 1000 }, - { label: '30m', value: '30m', durationMs: 30 * 60 * 1000 }, - { label: '1h', value: '1h', durationMs: 60 * 60 * 1000 }, - { label: '6h', value: '6h', durationMs: 6 * 60 * 60 * 1000 }, - { label: '12h', value: '12h', durationMs: 12 * 60 * 60 * 1000 }, - { label: '1d', value: '1d', durationMs: 24 * 60 * 60 * 1000 }, - { label: '3d', value: '3d', durationMs: 3 * 24 * 60 * 60 * 1000 }, - { label: '1w', value: '1w', durationMs: 7 * 24 * 60 * 60 * 1000 }, - { label: '1mo', value: '1mo', durationMs: 30 * 24 * 60 * 60 * 1000 }, -]; - -export function getTimeRangeFromPreset(preset: string, now: number = Date.now()): TimeRange { - const found = TIME_PRESETS.find((p) => p.value === preset); - if (!found) { throw new Error(`Unknown preset: ${preset}`); } - return { startTime: now - found.durationMs, endTime: now }; -} - const axisFormatter = new Intl.DateTimeFormat(undefined, { hour: 'numeric', minute: '2-digit', @@ -71,12 +51,3 @@ export function formatBytes(bytes: number): string { const value = bytes / k ** i; return `${value.toFixed(value < 10 ? 1 : 0)} ${units[i]}`; } - -export function formatBytesPerMin(bytes: number): string { - if (bytes === 0) { return '0 B/min'; } - const units = ['B/min', 'KB/min', 'MB/min', 'GB/min', 'TB/min']; - const k = 1000; - const i = Math.floor(Math.log(bytes) / Math.log(k)); - const value = bytes / k ** i; - return `${value.toFixed(value < 10 ? 1 : 0)} ${units[i]}`; -} diff --git a/src/features/instance/status/analytics/pipeline/index.ts b/src/features/instance/status/analytics/pipeline/index.ts index bb249261a..52d855c81 100644 --- a/src/features/instance/status/analytics/pipeline/index.ts +++ b/src/features/instance/status/analytics/pipeline/index.ts @@ -1,37 +1,6 @@ -// Spec registry barrel. Step 1 populates this file with per-metric spec imports -// and a `specRegistry` map. Step 0 ships the scaffold + known-names export so the -// allowlist codegen can read something. - -// When a spec lands at src/lib/metricSpecs/.ts it is added to KNOWN_METRICS -// here. This list is the source of truth for the backend allowlist generator. -export const KNOWN_METRICS = [ - 'replication-latency', - 'resource-usage', - 'memory', - 'mqtt-connections', - 'ws-connections', - 'main-thread-utilization', - 'bytes-sent', - 'bytes-received', - 'table-size', - 'duration', - 'success', - 'transfer', - 'tls-reused', - 'connection', - 'cpu-usage', - 'db-read', - 'db-write', - 'db-message', - 'response_200', - 'utilization', - 'database-size', - 'storage-volume', - 'cache-hit', - 'cache-resolution', -] as const; - -export type KnownMetric = (typeof KNOWN_METRICS)[number]; +// Spec registry barrel. Each metric spec lives in this directory +// (pipeline/.tsx, or .ts for renderer-less specs) and is registered in +// `specRegistry` below — the registry keys are the canonical metric names. import type { SpecRegistryEntry } from '../types/analytics.ts'; import { BytesReceivedRenderer, bytesReceivedSpec } from './bytes-received.tsx'; diff --git a/src/features/instance/status/analytics/primitives/FallbackRenderer.tsx b/src/features/instance/status/analytics/primitives/FallbackRenderer.tsx index a068c01e4..a7da614b7 100644 --- a/src/features/instance/status/analytics/primitives/FallbackRenderer.tsx +++ b/src/features/instance/status/analytics/primitives/FallbackRenderer.tsx @@ -77,7 +77,7 @@ export function FallbackRenderer({ metric, records, theme, hint }: Props) { const kebab = metric.replace(/_/g, '-'); const banner = isDev - ? `Unspecced metric "${metric}" — add a spec at src/lib/metricSpecs/${kebab}.ts for a tailored view.` + ? `Unspecced metric "${metric}" — add a spec at analytics/pipeline/${kebab}.tsx for a tailored view.` : null; return ( @@ -117,7 +117,7 @@ export function FallbackRenderer({ metric, records, theme, hint }: Props) { {overflow > 0 && (
- {`… and ${overflow} more fields not shown. Add a spec at src/lib/metricSpecs/${kebab}.ts to customize.`} + {`… and ${overflow} more fields not shown. Add a spec at analytics/pipeline/${kebab}.tsx to customize.`}
)} diff --git a/src/features/instance/status/analytics/tabs/tabConfig.ts b/src/features/instance/status/analytics/tabs/tabConfig.ts deleted file mode 100644 index ebf56f778..000000000 --- a/src/features/instance/status/analytics/tabs/tabConfig.ts +++ /dev/null @@ -1,116 +0,0 @@ -import type { TabId } from '../types/analytics.ts'; - -/** Panel identifiers. Match the existing Dashboard.tsx `overrideKey` names so - * the state migration is a rekey, not a rewrite. Step 2 may add/remove. */ -export type PanelId = - | 'repLatency' - | 'memory' - | 'cpu' - | 'mainThread' - | 'connections' - | 'mqttBytesSent' - | 'mqttBytesReceived' - | 'mqttTrafficSent' - | 'mqttTrafficReceived' - | 'tableSizeSnapshot' - | 'tableSizeTrend' - | 'requestRate' - | 'errorRate' - | 'duration' - | 'success' - | 'transfer' - | 'tlsReused' - | 'connection' - | 'cpuUsage' - | 'dbRead' - | 'dbWrite' - | 'dbMessage' - | 'response200' - | 'utilization' - | 'databaseSize' - | 'storageVolume'; - -export interface TabConfigEntry { - id: TabId; - label: string; - /** Panel IDs rendered under this tab, in display order. Empty = hide tab. */ - panels: PanelId[]; - /** Copy shown below `TimeRangeSelector` on this tab. undefined = no hint. */ - hintText?: string; - /** Whether this tab's panels respond to NodeLegend per-node selection. - * When `false`, the legend renders gray-out / non-interactive on this tab. - * Default (omitted) is treated as `true`. */ - panelSupportsNodeFilter?: boolean; -} - -/** Tab order is operator-first: Health leads, then external-visible, then - * internals. See spec §Dashboard layout for rationale. */ -export const TAB_ORDER: readonly TabId[] = [ - 'health', - 'traffic', - 'requests', - 'db-activity', - 'replication', - 'storage', - 'new', -]; - -export const TAB_CONFIG: Record = { - health: { - id: 'health', - label: 'Health', - panels: ['cpu', 'memory', 'mainThread', 'cpuUsage', 'utilization'], - hintText: 'Windows <1h may grey low-count panels (min count 100).', - panelSupportsNodeFilter: true, - }, - traffic: { - id: 'traffic', - label: 'Traffic', - panels: [ - 'connections', - 'mqttTrafficSent', - 'mqttTrafficReceived', - 'mqttBytesSent', - 'mqttBytesReceived', - 'tlsReused', - 'connection', - ], - hintText: 'Windows <1h may grey low-count panels (min count 100).', - panelSupportsNodeFilter: false, - }, - requests: { - id: 'requests', - label: 'Requests', - panels: ['requestRate', 'errorRate', 'duration', 'success', 'transfer', 'response200'], - hintText: 'Windows <2h may blank confidence-gated panels (min count 1000).', - panelSupportsNodeFilter: false, - }, - 'db-activity': { - id: 'db-activity', - label: 'Database activity', - panels: ['dbRead', 'dbWrite', 'dbMessage'], - hintText: 'Per-table read/write/message latency. Top 10 tables + Other bucket.', - panelSupportsNodeFilter: false, - }, - replication: { - id: 'replication', - label: 'Replication', - panels: ['repLatency'], - hintText: 'Cells with <100 samples are blanked; 40–99 samples render grey.', - panelSupportsNodeFilter: true, - }, - storage: { - id: 'storage', - label: 'Storage', - panels: ['tableSizeSnapshot', 'tableSizeTrend', 'databaseSize', 'storageVolume'], - panelSupportsNodeFilter: true, - }, - new: { id: 'new', label: 'New metrics', panels: [] }, -}; - -/** Tabs to render in the TabBar. Hides tabs with zero assigned panels. */ -export function visibleTabs(): TabConfigEntry[] { - return TAB_ORDER - .map((id) => TAB_CONFIG[id]) - .filter((t) => t.panels.length > 0); -} diff --git a/src/features/instance/status/analytics/types/analytics.ts b/src/features/instance/status/analytics/types/analytics.ts index a326dea6f..965764cb4 100644 --- a/src/features/instance/status/analytics/types/analytics.ts +++ b/src/features/instance/status/analytics/types/analytics.ts @@ -10,21 +10,6 @@ export interface AnalyticsResponse { data: AnalyticsDataPoint[]; } -export type KnownMetricName = - | 'replication-latency' - | 'resource-usage' - | 'memory' - | 'mqtt-connections' - | 'ws-connections' - | 'main-thread-utilization' - | 'bytes-sent' - | 'bytes-received' - | 'table-size'; - -// Widened so unspecced Harper metrics type-check through fetchAnalytics. The -// `(string & {})` intersection preserves IDE autocomplete for known names. -export type MetricName = KnownMetricName | (string & {}); - export interface TableSizeRecord { metric: 'table-size'; database: string; @@ -45,23 +30,10 @@ export interface TimeRange { endTime: number; } -export interface PresetOption { - label: string; - value: string; - durationMs: number; -} - export type ViewMode = 'aggregate' | 'per-node'; export type AutoRefreshInterval = 10_000 | 30_000 | 60_000 | 300_000 | 0; -export interface ChartPanelConfig { - title: string; - description: string; - metric: MetricName; - unit: string; -} - // ───────────────────────────────────────────────────────────────────────────── // Step 1a — Declarative spec types. Unused until Step 1b wires MetricRenderer // into Dashboard; committing them here unblocks the primitives + pipeline. @@ -83,7 +55,7 @@ export type Transform = /** Passthrough for [0, 1] fractions; primitives render as percent. */ | { kind: 'ratio' } | { kind: 'compose'; steps: Transform[] } - /** Lookup in `src/lib/metricSpecs/transforms.ts` — keyof typeof registry. */ + /** Lookup in `src/features/instance/status/analytics/pipeline/transforms.ts` — keyof typeof registry. */ | { kind: 'named'; name: string }; export type Aggregator = From 0698c9bee772320645a5773ed968de8463e2b6e5 Mon Sep 17 00:00:00 2001 From: Kyle Bernhardy Date: Sat, 11 Jul 2026 12:17:44 -0600 Subject: [PATCH 2/2] chore(status): use full pipeline path in unspecced-metric dev hints Co-Authored-By: Claude Fable 5 --- .../instance/status/analytics/primitives/FallbackRenderer.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/features/instance/status/analytics/primitives/FallbackRenderer.tsx b/src/features/instance/status/analytics/primitives/FallbackRenderer.tsx index a7da614b7..3a18e5e12 100644 --- a/src/features/instance/status/analytics/primitives/FallbackRenderer.tsx +++ b/src/features/instance/status/analytics/primitives/FallbackRenderer.tsx @@ -77,7 +77,7 @@ export function FallbackRenderer({ metric, records, theme, hint }: Props) { const kebab = metric.replace(/_/g, '-'); const banner = isDev - ? `Unspecced metric "${metric}" — add a spec at analytics/pipeline/${kebab}.tsx for a tailored view.` + ? `Unspecced metric "${metric}" — add a spec at src/features/instance/status/analytics/pipeline/${kebab}.tsx for a tailored view.` : null; return ( @@ -117,7 +117,7 @@ export function FallbackRenderer({ metric, records, theme, hint }: Props) { {overflow > 0 && (
- {`… and ${overflow} more fields not shown. Add a spec at analytics/pipeline/${kebab}.tsx to customize.`} + {`… and ${overflow} more fields not shown. Add a spec at src/features/instance/status/analytics/pipeline/${kebab}.tsx to customize.`}
)}