rigscope 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-path-routes-manifest.json +13 -0
  3. package/.next/build-manifest.json +20 -0
  4. package/.next/export-marker.json +6 -0
  5. package/.next/images-manifest.json +68 -0
  6. package/.next/next-minimal-server.js.nft.json +1 -0
  7. package/.next/next-server.js.nft.json +1 -0
  8. package/.next/package.json +1 -0
  9. package/.next/prerender-manifest.json +297 -0
  10. package/.next/react-loadable-manifest.json +1 -0
  11. package/.next/required-server-files.json +369 -0
  12. package/.next/routes-manifest.json +114 -0
  13. package/.next/server/app/_global-error/page.js +31 -0
  14. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  15. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
  16. package/.next/server/app/_global-error.html +1 -0
  17. package/.next/server/app/_global-error.meta +35 -0
  18. package/.next/server/app/_global-error.rsc +18 -0
  19. package/.next/server/app/_global-error.segments/_full.segment.rsc +18 -0
  20. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +24 -0
  21. package/.next/server/app/_global-error.segments/_tree.segment.rsc +3 -0
  22. package/.next/server/app/_not-found/page.js +1 -0
  23. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  24. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  25. package/.next/server/app/_not-found.html +1 -0
  26. package/.next/server/app/_not-found.meta +35 -0
  27. package/.next/server/app/_not-found.rsc +24 -0
  28. package/.next/server/app/_not-found.segments/_full.segment.rsc +24 -0
  29. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +30 -0
  30. package/.next/server/app/_not-found.segments/_tree.segment.rsc +4 -0
  31. package/.next/server/app/administration/page.js +1 -0
  32. package/.next/server/app/administration/page.js.nft.json +1 -0
  33. package/.next/server/app/administration/page_client-reference-manifest.js +1 -0
  34. package/.next/server/app/administration.html +1 -0
  35. package/.next/server/app/administration.meta +34 -0
  36. package/.next/server/app/administration.rsc +29 -0
  37. package/.next/server/app/administration.segments/_full.segment.rsc +29 -0
  38. package/.next/server/app/administration.segments/_tree.segment.rsc +4 -0
  39. package/.next/server/app/administration.segments/administration/__PAGE__.segment.rsc +35 -0
  40. package/.next/server/app/alerts/page.js +1 -0
  41. package/.next/server/app/alerts/page.js.nft.json +1 -0
  42. package/.next/server/app/alerts/page_client-reference-manifest.js +1 -0
  43. package/.next/server/app/alerts.html +1 -0
  44. package/.next/server/app/alerts.meta +34 -0
  45. package/.next/server/app/alerts.rsc +28 -0
  46. package/.next/server/app/alerts.segments/_full.segment.rsc +28 -0
  47. package/.next/server/app/alerts.segments/_tree.segment.rsc +4 -0
  48. package/.next/server/app/alerts.segments/alerts/__PAGE__.segment.rsc +34 -0
  49. package/.next/server/app/connections/page.js +1 -0
  50. package/.next/server/app/connections/page.js.nft.json +1 -0
  51. package/.next/server/app/connections/page_client-reference-manifest.js +1 -0
  52. package/.next/server/app/connections.html +1 -0
  53. package/.next/server/app/connections.meta +34 -0
  54. package/.next/server/app/connections.rsc +29 -0
  55. package/.next/server/app/connections.segments/_full.segment.rsc +29 -0
  56. package/.next/server/app/connections.segments/_tree.segment.rsc +4 -0
  57. package/.next/server/app/connections.segments/connections/__PAGE__.segment.rsc +35 -0
  58. package/.next/server/app/history/page.js +2 -0
  59. package/.next/server/app/history/page.js.nft.json +1 -0
  60. package/.next/server/app/history/page_client-reference-manifest.js +1 -0
  61. package/.next/server/app/history.html +1 -0
  62. package/.next/server/app/history.meta +34 -0
  63. package/.next/server/app/history.rsc +33 -0
  64. package/.next/server/app/history.segments/_full.segment.rsc +33 -0
  65. package/.next/server/app/history.segments/_tree.segment.rsc +4 -0
  66. package/.next/server/app/history.segments/history/__PAGE__.segment.rsc +37 -0
  67. package/.next/server/app/icon.svg/route.js +1 -0
  68. package/.next/server/app/icon.svg/route.js.nft.json +1 -0
  69. package/.next/server/app/icon.svg.body +1 -0
  70. package/.next/server/app/icon.svg.meta +1 -0
  71. package/.next/server/app/index.html +1 -0
  72. package/.next/server/app/index.meta +29 -0
  73. package/.next/server/app/index.rsc +26 -0
  74. package/.next/server/app/index.segments/__PAGE__.segment.rsc +31 -0
  75. package/.next/server/app/index.segments/_full.segment.rsc +26 -0
  76. package/.next/server/app/index.segments/_tree.segment.rsc +3 -0
  77. package/.next/server/app/login/page.js +1 -0
  78. package/.next/server/app/login/page.js.nft.json +1 -0
  79. package/.next/server/app/login/page_client-reference-manifest.js +1 -0
  80. package/.next/server/app/login.html +1 -0
  81. package/.next/server/app/login.meta +34 -0
  82. package/.next/server/app/login.rsc +26 -0
  83. package/.next/server/app/login.segments/_full.segment.rsc +26 -0
  84. package/.next/server/app/login.segments/_tree.segment.rsc +4 -0
  85. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +32 -0
  86. package/.next/server/app/machines/[machineId]/page.js +1 -0
  87. package/.next/server/app/machines/[machineId]/page.js.nft.json +1 -0
  88. package/.next/server/app/machines/[machineId]/page_client-reference-manifest.js +1 -0
  89. package/.next/server/app/page.js +1 -0
  90. package/.next/server/app/page.js.nft.json +1 -0
  91. package/.next/server/app/page_client-reference-manifest.js +1 -0
  92. package/.next/server/app/processes/page.js +2 -0
  93. package/.next/server/app/processes/page.js.nft.json +1 -0
  94. package/.next/server/app/processes/page_client-reference-manifest.js +1 -0
  95. package/.next/server/app/processes.html +1 -0
  96. package/.next/server/app/processes.meta +34 -0
  97. package/.next/server/app/processes.rsc +30 -0
  98. package/.next/server/app/processes.segments/_full.segment.rsc +30 -0
  99. package/.next/server/app/processes.segments/_tree.segment.rsc +4 -0
  100. package/.next/server/app/processes.segments/processes/__PAGE__.segment.rsc +36 -0
  101. package/.next/server/app-paths-manifest.json +13 -0
  102. package/.next/server/chunks/161.js +1 -0
  103. package/.next/server/chunks/168.js +1 -0
  104. package/.next/server/chunks/266.js +68 -0
  105. package/.next/server/chunks/430.js +116 -0
  106. package/.next/server/chunks/721.js +1 -0
  107. package/.next/server/chunks/751.js +1 -0
  108. package/.next/server/chunks/877.js +1 -0
  109. package/.next/server/chunks/894.js +2 -0
  110. package/.next/server/functions-config-manifest.json +4 -0
  111. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  112. package/.next/server/middleware-build-manifest.js +1 -0
  113. package/.next/server/middleware-manifest.json +6 -0
  114. package/.next/server/middleware-react-loadable-manifest.js +1 -0
  115. package/.next/server/next-font-manifest.js +1 -0
  116. package/.next/server/next-font-manifest.json +1 -0
  117. package/.next/server/pages/404.html +1 -0
  118. package/.next/server/pages/500.html +1 -0
  119. package/.next/server/pages-manifest.json +4 -0
  120. package/.next/server/prefetch-hints.json +123 -0
  121. package/.next/server/preview-props.json +5 -0
  122. package/.next/server/server-reference-manifest.js +1 -0
  123. package/.next/server/server-reference-manifest.json +1 -0
  124. package/.next/server/webpack-runtime.js +1 -0
  125. package/.next/static/DZKWF9ur7H5wI0c7RAhdq/_buildManifest.js +1 -0
  126. package/.next/static/DZKWF9ur7H5wI0c7RAhdq/_ssgManifest.js +1 -0
  127. package/.next/static/chunks/103-c47318242b24e9ac.js +1 -0
  128. package/.next/static/chunks/157-0d36ebf66af048ac.js +1 -0
  129. package/.next/static/chunks/227-417939c480f50747.js +1 -0
  130. package/.next/static/chunks/408-18819c6490a5f8d3.js +1 -0
  131. package/.next/static/chunks/4bd1b696-c7408084347438ae.js +1 -0
  132. package/.next/static/chunks/794-ceeb732a1a81bc27.js +52 -0
  133. package/.next/static/chunks/939-2600d7c8e583d5ef.js +1 -0
  134. package/.next/static/chunks/app/_global-error/page-aba28f88d5781771.js +1 -0
  135. package/.next/static/chunks/app/_not-found/page-a2a510233e4836e2.js +1 -0
  136. package/.next/static/chunks/app/administration/page-4b16b19bb6a39c36.js +1 -0
  137. package/.next/static/chunks/app/alerts/page-fe0e877778c60af8.js +1 -0
  138. package/.next/static/chunks/app/connections/page-99cd54d6929b3f1f.js +1 -0
  139. package/.next/static/chunks/app/history/page-3fa5846eca26b7f7.js +3 -0
  140. package/.next/static/chunks/app/layout-4feff677c4071745.js +1 -0
  141. package/.next/static/chunks/app/login/page-c57e12dbe5146737.js +1 -0
  142. package/.next/static/chunks/app/machines/[machineId]/page-a5aa1d8676272f38.js +1 -0
  143. package/.next/static/chunks/app/page-1ae9fc94c897785b.js +1 -0
  144. package/.next/static/chunks/app/processes/page-e471ed23a1d5632f.js +3 -0
  145. package/.next/static/chunks/framework-ea4f97ca039bd777.js +1 -0
  146. package/.next/static/chunks/main-a458d32948147b84.js +5 -0
  147. package/.next/static/chunks/main-app-f92328c8950d2e53.js +1 -0
  148. package/.next/static/chunks/next/dist/client/components/builtin/app-error-aba28f88d5781771.js +1 -0
  149. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-aba28f88d5781771.js +1 -0
  150. package/.next/static/chunks/next/dist/client/components/builtin/global-error-43cbaa3aa1576eb4.js +1 -0
  151. package/.next/static/chunks/next/dist/client/components/builtin/not-found-aba28f88d5781771.js +1 -0
  152. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-aba28f88d5781771.js +1 -0
  153. package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  154. package/.next/static/chunks/webpack-9ca43f4ce1bb8938.js +1 -0
  155. package/.next/static/css/e41ccbccc3afaae5.css +1 -0
  156. package/ARCHITECTURE.md +279 -0
  157. package/CHANGELOG.md +25 -0
  158. package/DESIGN.md +299 -0
  159. package/LICENSE +21 -0
  160. package/README.md +157 -2
  161. package/SECURITY.md +12 -0
  162. package/THIRD_PARTY_NOTICES.md +8847 -0
  163. package/bin/rigscope.cjs +6 -0
  164. package/dist/cli.cjs +9075 -0
  165. package/dist/collector.cjs +5671 -0
  166. package/dist/hub.cjs +8355 -0
  167. package/dist/ops.cjs +4972 -0
  168. package/dist/system.cjs +4333 -0
  169. package/docs/bottlenecks.md +62 -0
  170. package/docs/development.md +46 -0
  171. package/docs/exports.md +39 -0
  172. package/docs/installation.md +477 -0
  173. package/docs/operations.md +515 -0
  174. package/docs/releasing.md +152 -0
  175. package/docs/scale-acceptance.json +412 -0
  176. package/docs/scale-validation.json +1898 -0
  177. package/docs/scale-validation.md +263 -0
  178. package/next.config.js +38 -0
  179. package/package.json +109 -4
  180. package/packaging/README.md +5 -0
  181. package/packaging/collector.env.example +24 -0
  182. package/packaging/hub.env.example +31 -0
  183. package/packaging/system/90-rigscope-rapl.rules +7 -0
  184. package/packaging/system/README.md +5 -0
  185. package/packaging/system/rigscope-collector.service.example +53 -0
  186. package/packaging/system/rigscope-hub.service.example +50 -0
  187. package/packaging/system/rigscope-rapl.sysusers +5 -0
  188. package/packaging/system/rigscope.sysusers +7 -0
@@ -0,0 +1,1898 @@
1
+ {
2
+ "tool": "rigscope-scale-harness",
3
+ "synthetic": true,
4
+ "disclaimer": "Synthetic bounded workload on an isolated temporary hub/database, not a capacity, latency, or hardware guarantee. Values depend on this host, disk, Node version, payload, cadence, viewer count and concurrent activity.",
5
+ "generatedAt": "2026-11-04T00:36:36.822Z",
6
+ "node": "v26.13.0",
7
+ "host": {
8
+ "platform": "linux",
9
+ "release": "7.3.0-9-generic",
10
+ "arch": "x64",
11
+ "cpuModel": "AMD EPYC 7402P 24-Core Processor",
12
+ "logicalCores": 48,
13
+ "totalMemoryBytes": 130351214592,
14
+ "loadAverage": [
15
+ 0.92,
16
+ 0.76,
17
+ 0.84
18
+ ],
19
+ "node": "v26.13.0"
20
+ },
21
+ "command": "npx tsx scripts/scale-harness.ts --suite --json-out docs/scale-validation.json",
22
+ "suite": [
23
+ {
24
+ "name": "small-5m",
25
+ "description": "Small fleet, four authenticated History viewers and two SSE viewers.",
26
+ "machines": 5,
27
+ "durationMs": 60000,
28
+ "sampleIntervalMs": 1000,
29
+ "recordsPerBatch": 1,
30
+ "viewers": 4,
31
+ "sseClients": 2,
32
+ "slowSseClients": 0,
33
+ "slowSsePauseAfterMs": 0,
34
+ "slowSsePauseMs": 0,
35
+ "historyIntervalMs": 1000,
36
+ "historyMetricSet": "standard",
37
+ "churnEveryMs": null,
38
+ "churnMachines": 0,
39
+ "replayRecords": 0
40
+ },
41
+ {
42
+ "name": "fleet-75m",
43
+ "description": "75 machines with eight concurrent History viewers and four SSE viewers.",
44
+ "machines": 75,
45
+ "durationMs": 60000,
46
+ "sampleIntervalMs": 1000,
47
+ "recordsPerBatch": 1,
48
+ "viewers": 8,
49
+ "sseClients": 4,
50
+ "slowSseClients": 0,
51
+ "slowSsePauseAfterMs": 0,
52
+ "slowSsePauseMs": 0,
53
+ "historyIntervalMs": 1000,
54
+ "historyMetricSet": "standard",
55
+ "churnEveryMs": null,
56
+ "churnMachines": 0,
57
+ "replayRecords": 0
58
+ },
59
+ {
60
+ "name": "fleet-75m-churn",
61
+ "description": "75 machines with collector reconnect/replay churn and SSE reconnect/reset churn.",
62
+ "machines": 75,
63
+ "durationMs": 60000,
64
+ "sampleIntervalMs": 1000,
65
+ "recordsPerBatch": 1,
66
+ "viewers": 8,
67
+ "sseClients": 4,
68
+ "slowSseClients": 0,
69
+ "slowSsePauseAfterMs": 0,
70
+ "slowSsePauseMs": 0,
71
+ "historyIntervalMs": 1000,
72
+ "historyMetricSet": "standard",
73
+ "churnEveryMs": 15000,
74
+ "churnMachines": 15,
75
+ "replayRecords": 20
76
+ },
77
+ {
78
+ "name": "fleet-75m-slow-sse",
79
+ "description": "75 machines with six SSE viewers, two deliberately paused to force buffering/reconnect.",
80
+ "machines": 75,
81
+ "durationMs": 60000,
82
+ "sampleIntervalMs": 1000,
83
+ "recordsPerBatch": 1,
84
+ "viewers": 8,
85
+ "sseClients": 6,
86
+ "slowSseClients": 2,
87
+ "slowSsePauseAfterMs": 10000,
88
+ "slowSsePauseMs": 15000,
89
+ "historyIntervalMs": 1000,
90
+ "historyMetricSet": "standard",
91
+ "churnEveryMs": null,
92
+ "churnMachines": 0,
93
+ "replayRecords": 0
94
+ },
95
+ {
96
+ "name": "fleet-75m-history",
97
+ "description": "75 machines with eight History viewers polling a broad metric set near the session budget.",
98
+ "machines": 75,
99
+ "durationMs": 60000,
100
+ "sampleIntervalMs": 1000,
101
+ "recordsPerBatch": 1,
102
+ "viewers": 8,
103
+ "sseClients": 2,
104
+ "slowSseClients": 0,
105
+ "slowSsePauseAfterMs": 0,
106
+ "slowSsePauseMs": 0,
107
+ "historyIntervalMs": 300,
108
+ "historyMetricSet": "broad",
109
+ "churnEveryMs": null,
110
+ "churnMachines": 0,
111
+ "replayRecords": 0
112
+ }
113
+ ],
114
+ "cases": [
115
+ {
116
+ "name": "small-5m",
117
+ "description": "Small fleet, four authenticated History viewers and two SSE viewers.",
118
+ "config": {
119
+ "name": "small-5m",
120
+ "description": "Small fleet, four authenticated History viewers and two SSE viewers.",
121
+ "machines": 5,
122
+ "durationMs": 60000,
123
+ "sampleIntervalMs": 1000,
124
+ "recordsPerBatch": 1,
125
+ "viewers": 4,
126
+ "sseClients": 2,
127
+ "slowSseClients": 0,
128
+ "slowSsePauseAfterMs": 0,
129
+ "slowSsePauseMs": 0,
130
+ "historyIntervalMs": 1000,
131
+ "historyMetricSet": "standard",
132
+ "churnEveryMs": null,
133
+ "churnMachines": 0,
134
+ "replayRecords": 0,
135
+ "warmupMs": 1500,
136
+ "maxCollectorConnections": 100,
137
+ "databaseBudgetBytes": 536870912
138
+ },
139
+ "host": {
140
+ "platform": "linux",
141
+ "release": "7.3.0-9-generic",
142
+ "arch": "x64",
143
+ "cpuModel": "AMD EPYC 7402P 24-Core Processor",
144
+ "logicalCores": 48,
145
+ "totalMemoryBytes": 130351214592,
146
+ "loadAverage": [
147
+ 0.45,
148
+ 0.86,
149
+ 0.9
150
+ ],
151
+ "node": "v26.13.0"
152
+ },
153
+ "ingestion": {
154
+ "recordsSent": 317,
155
+ "recordsAccepted": 317,
156
+ "recordsRejected": 0,
157
+ "replayRecordsSent": 0,
158
+ "replayRecordsAccepted": 0,
159
+ "retryAcks": 0,
160
+ "unackedLiveRecords": 0,
161
+ "sendErrors": 0,
162
+ "ackLatencyMs": {
163
+ "count": 317,
164
+ "min": 20.32,
165
+ "avg": 24.65,
166
+ "p50": 24.93,
167
+ "p95": 26.7,
168
+ "p99": 34.61,
169
+ "max": 35.39
170
+ },
171
+ "sampleToCommitLagMs": {
172
+ "count": 317,
173
+ "min": 20,
174
+ "avg": 24.72,
175
+ "p50": 25,
176
+ "p95": 27,
177
+ "p99": 34,
178
+ "max": 36
179
+ },
180
+ "messagesSent": 322,
181
+ "backpressureSkips": 0,
182
+ "connects": 5,
183
+ "reconnects": 0,
184
+ "reconnectFailures": 0,
185
+ "collectorRecoveryMs": {
186
+ "count": 0,
187
+ "min": 0,
188
+ "avg": 0,
189
+ "p50": 0,
190
+ "p95": 0,
191
+ "p99": 0,
192
+ "max": 0
193
+ }
194
+ },
195
+ "history": {
196
+ "queries": 243,
197
+ "ok": 243,
198
+ "rateLimited": 0,
199
+ "errors": 0,
200
+ "latencyMs": {
201
+ "count": 243,
202
+ "min": 3.42,
203
+ "avg": 7.76,
204
+ "p50": 7.34,
205
+ "p95": 12.9,
206
+ "p99": 16.68,
207
+ "max": 19.96
208
+ },
209
+ "series": {
210
+ "count": 243,
211
+ "min": 4,
212
+ "avg": 4,
213
+ "p50": 4,
214
+ "p95": 4,
215
+ "p99": 4,
216
+ "max": 4
217
+ },
218
+ "points": {
219
+ "count": 243,
220
+ "min": 8,
221
+ "avg": 127.51,
222
+ "p50": 128,
223
+ "p95": 236,
224
+ "p99": 248,
225
+ "max": 248
226
+ },
227
+ "truncated": 0,
228
+ "tiers": {
229
+ "raw": 243
230
+ }
231
+ },
232
+ "stream": {
233
+ "clients": 2,
234
+ "slowClients": 0,
235
+ "events": 126,
236
+ "snapshots": 2,
237
+ "updates": 124,
238
+ "resets": 0,
239
+ "bytes": 1258628,
240
+ "eventLagMs": {
241
+ "count": 126,
242
+ "min": 520,
243
+ "avg": 523.66,
244
+ "p50": 524,
245
+ "p95": 526,
246
+ "p99": 527,
247
+ "max": 527
248
+ },
249
+ "normalEventLagMs": {
250
+ "count": 126,
251
+ "min": 520,
252
+ "avg": 523.66,
253
+ "p50": 524,
254
+ "p95": 526,
255
+ "p99": 527,
256
+ "max": 527
257
+ },
258
+ "slowEventLagMs": {
259
+ "count": 0,
260
+ "min": 0,
261
+ "avg": 0,
262
+ "p50": 0,
263
+ "p95": 0,
264
+ "p99": 0,
265
+ "max": 0
266
+ },
267
+ "firstEventMs": {
268
+ "count": 2,
269
+ "min": 15.42,
270
+ "avg": 16.03,
271
+ "p50": 16.63,
272
+ "p95": 16.63,
273
+ "p99": 16.63,
274
+ "max": 16.63
275
+ },
276
+ "reconnects": 0,
277
+ "resetsAfterReconnect": 0,
278
+ "slowPauses": 0,
279
+ "slowDrops": 0,
280
+ "sseRecoveryMs": {
281
+ "count": 0,
282
+ "min": 0,
283
+ "avg": 0,
284
+ "p50": 0,
285
+ "p95": 0,
286
+ "p99": 0,
287
+ "max": 0
288
+ }
289
+ },
290
+ "hub": {
291
+ "baseline": {
292
+ "pid": 4048417,
293
+ "uptimeMs": 2006.08,
294
+ "hubRunId": "c462ff5e-b223-4b3e-b50c-6ebd9dc028b1",
295
+ "eventLoopDelayMs": {
296
+ "p50": 10.12,
297
+ "p95": 11.14,
298
+ "p99": 12.17,
299
+ "max": 17.5
300
+ },
301
+ "eventLoopUtilization": 0.0306,
302
+ "cpuPercent": 17.69,
303
+ "cpuMs": {
304
+ "user": 257.28,
305
+ "system": 66.54
306
+ },
307
+ "rssBytes": 136019968,
308
+ "rssPeakBytes": 136019968,
309
+ "heapUsedBytes": 14512672,
310
+ "database": {
311
+ "bytes": 439480,
312
+ "walBytes": 201912,
313
+ "mainBytes": 237568
314
+ },
315
+ "store": {
316
+ "queuedRecords": 0,
317
+ "queuedBatches": 0,
318
+ "lastFlushMs": 1793752261425,
319
+ "lastFlushDurationMs": 5,
320
+ "committedRecords": 10,
321
+ "duplicateRecords": 0,
322
+ "rejectedRecords": 0,
323
+ "writeFailures": 0,
324
+ "lastWriteError": null,
325
+ "diskFullFailures": 0,
326
+ "dbBytes": 439480,
327
+ "dbWalBytes": 201912,
328
+ "dbBytesLimit": 536870912,
329
+ "retention": {
330
+ "lastRunAtMs": 0,
331
+ "lastRunDurationMs": 0,
332
+ "deletedRows": 0,
333
+ "pressure": false,
334
+ "effectiveRawCutoffMs": null,
335
+ "physicalBytes": 439480,
336
+ "physicalLimitBytes": 536870912,
337
+ "physicalPressure": false,
338
+ "walBytes": 201912
339
+ }
340
+ },
341
+ "liveClients": 0,
342
+ "sessions": 4,
343
+ "connectedMachines": 5,
344
+ "configuredMachines": 5
345
+ },
346
+ "window": {
347
+ "pid": 4048417,
348
+ "uptimeMs": 62025.33,
349
+ "hubRunId": "c462ff5e-b223-4b3e-b50c-6ebd9dc028b1",
350
+ "eventLoopDelayMs": {
351
+ "p50": 10.12,
352
+ "p95": 10.85,
353
+ "p99": 12.52,
354
+ "max": 18.5
355
+ },
356
+ "eventLoopUtilization": 0.0202,
357
+ "cpuPercent": 2.63,
358
+ "cpuMs": {
359
+ "user": 1333.4,
360
+ "system": 247.76
361
+ },
362
+ "rssBytes": 142528512,
363
+ "rssPeakBytes": 142528512,
364
+ "heapUsedBytes": 15721680,
365
+ "database": {
366
+ "bytes": 5297960,
367
+ "walBytes": 4527912,
368
+ "mainBytes": 770048
369
+ },
370
+ "store": {
371
+ "queuedRecords": 0,
372
+ "queuedBatches": 0,
373
+ "lastFlushMs": 1793752321445,
374
+ "lastFlushDurationMs": 5,
375
+ "committedRecords": 310,
376
+ "duplicateRecords": 0,
377
+ "rejectedRecords": 0,
378
+ "writeFailures": 0,
379
+ "lastWriteError": null,
380
+ "diskFullFailures": 0,
381
+ "dbBytes": 5297960,
382
+ "dbWalBytes": 4527912,
383
+ "dbBytesLimit": 536870912,
384
+ "retention": {
385
+ "lastRunAtMs": 1793752320072,
386
+ "lastRunDurationMs": 3,
387
+ "deletedRows": 0,
388
+ "pressure": false,
389
+ "effectiveRawCutoffMs": 1793579520072,
390
+ "physicalBytes": 5297960,
391
+ "physicalLimitBytes": 536870912,
392
+ "physicalPressure": false,
393
+ "walBytes": 4527912
394
+ }
395
+ },
396
+ "liveClients": 2,
397
+ "sessions": 4,
398
+ "connectedMachines": 5,
399
+ "configuredMachines": 5
400
+ },
401
+ "final": {
402
+ "pid": 4048417,
403
+ "uptimeMs": 65031.57,
404
+ "hubRunId": "c462ff5e-b223-4b3e-b50c-6ebd9dc028b1",
405
+ "eventLoopDelayMs": {
406
+ "p50": 10.11,
407
+ "p95": 10.3,
408
+ "p99": 10.57,
409
+ "max": 11.98
410
+ },
411
+ "eventLoopUtilization": 0.006,
412
+ "cpuPercent": 1,
413
+ "cpuMs": {
414
+ "user": 21.81,
415
+ "system": 8.25
416
+ },
417
+ "rssBytes": 140431360,
418
+ "rssPeakBytes": 142528512,
419
+ "heapUsedBytes": 15687224,
420
+ "database": {
421
+ "bytes": 5297960,
422
+ "walBytes": 4527912,
423
+ "mainBytes": 770048
424
+ },
425
+ "store": {
426
+ "queuedRecords": 0,
427
+ "queuedBatches": 0,
428
+ "lastFlushMs": 1793752323443,
429
+ "lastFlushDurationMs": 2,
430
+ "committedRecords": 317,
431
+ "duplicateRecords": 0,
432
+ "rejectedRecords": 0,
433
+ "writeFailures": 0,
434
+ "lastWriteError": null,
435
+ "diskFullFailures": 0,
436
+ "dbBytes": 5297960,
437
+ "dbWalBytes": 4527912,
438
+ "dbBytesLimit": 536870912,
439
+ "retention": {
440
+ "lastRunAtMs": 1793752320072,
441
+ "lastRunDurationMs": 3,
442
+ "deletedRows": 0,
443
+ "pressure": false,
444
+ "effectiveRawCutoffMs": 1793579520072,
445
+ "physicalBytes": 5297960,
446
+ "physicalLimitBytes": 536870912,
447
+ "physicalPressure": false,
448
+ "walBytes": 4527912
449
+ }
450
+ },
451
+ "liveClients": 2,
452
+ "sessions": 4,
453
+ "connectedMachines": 5,
454
+ "configuredMachines": 5
455
+ },
456
+ "databaseGrowth": {
457
+ "bytes": 4858480,
458
+ "walBytes": 4326000,
459
+ "mainBytes": 532480
460
+ }
461
+ },
462
+ "elapsedMs": 60005.8,
463
+ "artifacts": {
464
+ "directory": "/tmp/rigscope-scale-QJtfOk",
465
+ "kept": false,
466
+ "configPath": "/tmp/rigscope-scale-QJtfOk/hub-config.json",
467
+ "databasePath": "/tmp/rigscope-scale-QJtfOk/scale.sqlite"
468
+ }
469
+ },
470
+ {
471
+ "name": "fleet-75m",
472
+ "description": "75 machines with eight concurrent History viewers and four SSE viewers.",
473
+ "config": {
474
+ "name": "fleet-75m",
475
+ "description": "75 machines with eight concurrent History viewers and four SSE viewers.",
476
+ "machines": 75,
477
+ "durationMs": 60000,
478
+ "sampleIntervalMs": 1000,
479
+ "recordsPerBatch": 1,
480
+ "viewers": 8,
481
+ "sseClients": 4,
482
+ "slowSseClients": 0,
483
+ "slowSsePauseAfterMs": 0,
484
+ "slowSsePauseMs": 0,
485
+ "historyIntervalMs": 1000,
486
+ "historyMetricSet": "standard",
487
+ "churnEveryMs": null,
488
+ "churnMachines": 0,
489
+ "replayRecords": 0,
490
+ "warmupMs": 1500,
491
+ "maxCollectorConnections": 100,
492
+ "databaseBudgetBytes": 536870912
493
+ },
494
+ "host": {
495
+ "platform": "linux",
496
+ "release": "7.3.0-9-generic",
497
+ "arch": "x64",
498
+ "cpuModel": "AMD EPYC 7402P 24-Core Processor",
499
+ "logicalCores": 48,
500
+ "totalMemoryBytes": 130351214592,
501
+ "loadAverage": [
502
+ 0.44,
503
+ 0.77,
504
+ 0.87
505
+ ],
506
+ "node": "v26.13.0"
507
+ },
508
+ "ingestion": {
509
+ "recordsSent": 4789,
510
+ "recordsAccepted": 4789,
511
+ "recordsRejected": 0,
512
+ "replayRecordsSent": 0,
513
+ "replayRecordsAccepted": 0,
514
+ "retryAcks": 0,
515
+ "unackedLiveRecords": 0,
516
+ "sendErrors": 0,
517
+ "ackLatencyMs": {
518
+ "count": 4789,
519
+ "min": 4.43,
520
+ "avg": 36.56,
521
+ "p50": 35.75,
522
+ "p95": 55.64,
523
+ "p99": 61.49,
524
+ "max": 69.62
525
+ },
526
+ "sampleToCommitLagMs": {
527
+ "count": 4789,
528
+ "min": 5,
529
+ "avg": 36.55,
530
+ "p50": 36,
531
+ "p95": 56,
532
+ "p99": 61,
533
+ "max": 69
534
+ },
535
+ "messagesSent": 4864,
536
+ "backpressureSkips": 0,
537
+ "connects": 75,
538
+ "reconnects": 0,
539
+ "reconnectFailures": 0,
540
+ "collectorRecoveryMs": {
541
+ "count": 0,
542
+ "min": 0,
543
+ "avg": 0,
544
+ "p50": 0,
545
+ "p95": 0,
546
+ "p99": 0,
547
+ "max": 0
548
+ }
549
+ },
550
+ "history": {
551
+ "queries": 488,
552
+ "ok": 488,
553
+ "rateLimited": 0,
554
+ "errors": 0,
555
+ "latencyMs": {
556
+ "count": 488,
557
+ "min": 2.04,
558
+ "avg": 10.97,
559
+ "p50": 10.24,
560
+ "p95": 20.85,
561
+ "p99": 27.84,
562
+ "max": 35.17
563
+ },
564
+ "series": {
565
+ "count": 488,
566
+ "min": 4,
567
+ "avg": 4,
568
+ "p50": 4,
569
+ "p95": 4,
570
+ "p99": 4,
571
+ "max": 4
572
+ },
573
+ "points": {
574
+ "count": 488,
575
+ "min": 8,
576
+ "avg": 128,
577
+ "p50": 128,
578
+ "p95": 236,
579
+ "p99": 248,
580
+ "max": 248
581
+ },
582
+ "truncated": 0,
583
+ "tiers": {
584
+ "raw": 488
585
+ }
586
+ },
587
+ "stream": {
588
+ "clients": 4,
589
+ "slowClients": 0,
590
+ "events": 252,
591
+ "snapshots": 4,
592
+ "updates": 248,
593
+ "resets": 0,
594
+ "bytes": 37306640,
595
+ "eventLagMs": {
596
+ "count": 252,
597
+ "min": 409,
598
+ "avg": 423.64,
599
+ "p50": 420,
600
+ "p95": 439,
601
+ "p99": 526,
602
+ "max": 531
603
+ },
604
+ "normalEventLagMs": {
605
+ "count": 252,
606
+ "min": 409,
607
+ "avg": 423.64,
608
+ "p50": 420,
609
+ "p95": 439,
610
+ "p99": 526,
611
+ "max": 531
612
+ },
613
+ "slowEventLagMs": {
614
+ "count": 0,
615
+ "min": 0,
616
+ "avg": 0,
617
+ "p50": 0,
618
+ "p95": 0,
619
+ "p99": 0,
620
+ "max": 0
621
+ },
622
+ "firstEventMs": {
623
+ "count": 4,
624
+ "min": 16.22,
625
+ "avg": 20.1,
626
+ "p50": 21.31,
627
+ "p95": 23.8,
628
+ "p99": 23.8,
629
+ "max": 23.8
630
+ },
631
+ "reconnects": 0,
632
+ "resetsAfterReconnect": 0,
633
+ "slowPauses": 0,
634
+ "slowDrops": 0,
635
+ "sseRecoveryMs": {
636
+ "count": 0,
637
+ "min": 0,
638
+ "avg": 0,
639
+ "p50": 0,
640
+ "p95": 0,
641
+ "p99": 0,
642
+ "max": 0
643
+ }
644
+ },
645
+ "hub": {
646
+ "baseline": {
647
+ "pid": 4049072,
648
+ "uptimeMs": 2249.71,
649
+ "hubRunId": "611b986e-d1fd-4f04-8e74-ee4a14a3cf0d",
650
+ "eventLoopDelayMs": {
651
+ "p50": 10.11,
652
+ "p95": 16.24,
653
+ "p99": 27.36,
654
+ "max": 41.75
655
+ },
656
+ "eventLoopUtilization": 0.127,
657
+ "cpuPercent": 37.23,
658
+ "cpuMs": {
659
+ "user": 682.4,
660
+ "system": 91.68
661
+ },
662
+ "rssBytes": 160559104,
663
+ "rssPeakBytes": 160559104,
664
+ "heapUsedBytes": 19331936,
665
+ "database": {
666
+ "bytes": 2829080,
667
+ "walBytes": 2591512,
668
+ "mainBytes": 237568
669
+ },
670
+ "store": {
671
+ "queuedRecords": 0,
672
+ "queuedBatches": 0,
673
+ "lastFlushMs": 1793752328867,
674
+ "lastFlushDurationMs": 13,
675
+ "committedRecords": 150,
676
+ "duplicateRecords": 0,
677
+ "rejectedRecords": 0,
678
+ "writeFailures": 0,
679
+ "lastWriteError": null,
680
+ "diskFullFailures": 0,
681
+ "dbBytes": 2829080,
682
+ "dbWalBytes": 2591512,
683
+ "dbBytesLimit": 536870912,
684
+ "retention": {
685
+ "lastRunAtMs": 0,
686
+ "lastRunDurationMs": 0,
687
+ "deletedRows": 0,
688
+ "pressure": false,
689
+ "effectiveRawCutoffMs": null,
690
+ "physicalBytes": 2829080,
691
+ "physicalLimitBytes": 536870912,
692
+ "physicalPressure": false,
693
+ "walBytes": 2591512
694
+ }
695
+ },
696
+ "liveClients": 0,
697
+ "sessions": 8,
698
+ "connectedMachines": 75,
699
+ "configuredMachines": 75
700
+ },
701
+ "window": {
702
+ "pid": 4049072,
703
+ "uptimeMs": 62264.13,
704
+ "hubRunId": "611b986e-d1fd-4f04-8e74-ee4a14a3cf0d",
705
+ "eventLoopDelayMs": {
706
+ "p50": 10.11,
707
+ "p95": 15.6,
708
+ "p99": 30.43,
709
+ "max": 44.56
710
+ },
711
+ "eventLoopUtilization": 0.1124,
712
+ "cpuPercent": 12.38,
713
+ "cpuMs": {
714
+ "user": 6162.62,
715
+ "system": 1266.7
716
+ },
717
+ "rssBytes": 197812224,
718
+ "rssPeakBytes": 197812224,
719
+ "heapUsedBytes": 25300168,
720
+ "database": {
721
+ "bytes": 15252960,
722
+ "walBytes": 6229472,
723
+ "mainBytes": 9023488
724
+ },
725
+ "store": {
726
+ "queuedRecords": 0,
727
+ "queuedBatches": 0,
728
+ "lastFlushMs": 1793752388900,
729
+ "lastFlushDurationMs": 3,
730
+ "committedRecords": 4650,
731
+ "duplicateRecords": 0,
732
+ "rejectedRecords": 0,
733
+ "writeFailures": 0,
734
+ "lastWriteError": null,
735
+ "diskFullFailures": 0,
736
+ "dbBytes": 15252960,
737
+ "dbWalBytes": 6229472,
738
+ "dbBytesLimit": 536870912,
739
+ "retention": {
740
+ "lastRunAtMs": 1793752387241,
741
+ "lastRunDurationMs": 29,
742
+ "deletedRows": 0,
743
+ "pressure": false,
744
+ "effectiveRawCutoffMs": 1793579587241,
745
+ "physicalBytes": 15252960,
746
+ "physicalLimitBytes": 536870912,
747
+ "physicalPressure": false,
748
+ "walBytes": 6229472
749
+ }
750
+ },
751
+ "liveClients": 4,
752
+ "sessions": 8,
753
+ "connectedMachines": 75,
754
+ "configuredMachines": 75
755
+ },
756
+ "final": {
757
+ "pid": 4049072,
758
+ "uptimeMs": 65266.81,
759
+ "hubRunId": "611b986e-d1fd-4f04-8e74-ee4a14a3cf0d",
760
+ "eventLoopDelayMs": {
761
+ "p50": 10.11,
762
+ "p95": 11.17,
763
+ "p99": 32.13,
764
+ "max": 39.62
765
+ },
766
+ "eventLoopUtilization": 0.0673,
767
+ "cpuPercent": 7.15,
768
+ "cpuMs": {
769
+ "user": 160.44,
770
+ "system": 54.2
771
+ },
772
+ "rssBytes": 198205440,
773
+ "rssPeakBytes": 198205440,
774
+ "heapUsedBytes": 20425912,
775
+ "database": {
776
+ "bytes": 15490528,
777
+ "walBytes": 6229472,
778
+ "mainBytes": 9261056
779
+ },
780
+ "store": {
781
+ "queuedRecords": 0,
782
+ "queuedBatches": 0,
783
+ "lastFlushMs": 1793752390870,
784
+ "lastFlushDurationMs": 29,
785
+ "committedRecords": 4789,
786
+ "duplicateRecords": 0,
787
+ "rejectedRecords": 0,
788
+ "writeFailures": 0,
789
+ "lastWriteError": null,
790
+ "diskFullFailures": 0,
791
+ "dbBytes": 15490528,
792
+ "dbWalBytes": 6229472,
793
+ "dbBytesLimit": 536870912,
794
+ "retention": {
795
+ "lastRunAtMs": 1793752387241,
796
+ "lastRunDurationMs": 29,
797
+ "deletedRows": 0,
798
+ "pressure": false,
799
+ "effectiveRawCutoffMs": 1793579587241,
800
+ "physicalBytes": 15490528,
801
+ "physicalLimitBytes": 536870912,
802
+ "physicalPressure": false,
803
+ "walBytes": 6229472
804
+ }
805
+ },
806
+ "liveClients": 4,
807
+ "sessions": 8,
808
+ "connectedMachines": 75,
809
+ "configuredMachines": 75
810
+ },
811
+ "databaseGrowth": {
812
+ "bytes": 12661448,
813
+ "walBytes": 3637960,
814
+ "mainBytes": 9023488
815
+ }
816
+ },
817
+ "elapsedMs": 60004.22,
818
+ "artifacts": {
819
+ "directory": "/tmp/rigscope-scale-We6W4S",
820
+ "kept": false,
821
+ "configPath": "/tmp/rigscope-scale-We6W4S/hub-config.json",
822
+ "databasePath": "/tmp/rigscope-scale-We6W4S/scale.sqlite"
823
+ }
824
+ },
825
+ {
826
+ "name": "fleet-75m-churn",
827
+ "description": "75 machines with collector reconnect/replay churn and SSE reconnect/reset churn.",
828
+ "config": {
829
+ "name": "fleet-75m-churn",
830
+ "description": "75 machines with collector reconnect/replay churn and SSE reconnect/reset churn.",
831
+ "machines": 75,
832
+ "durationMs": 60000,
833
+ "sampleIntervalMs": 1000,
834
+ "recordsPerBatch": 1,
835
+ "viewers": 8,
836
+ "sseClients": 4,
837
+ "slowSseClients": 0,
838
+ "slowSsePauseAfterMs": 0,
839
+ "slowSsePauseMs": 0,
840
+ "historyIntervalMs": 1000,
841
+ "historyMetricSet": "standard",
842
+ "churnEveryMs": 15000,
843
+ "churnMachines": 15,
844
+ "replayRecords": 20,
845
+ "warmupMs": 1500,
846
+ "maxCollectorConnections": 100,
847
+ "databaseBudgetBytes": 536870912
848
+ },
849
+ "host": {
850
+ "platform": "linux",
851
+ "release": "7.3.0-9-generic",
852
+ "arch": "x64",
853
+ "cpuModel": "AMD EPYC 7402P 24-Core Processor",
854
+ "logicalCores": 48,
855
+ "totalMemoryBytes": 130351214592,
856
+ "loadAverage": [
857
+ 0.51,
858
+ 0.71,
859
+ 0.84
860
+ ],
861
+ "node": "v26.13.0"
862
+ },
863
+ "ingestion": {
864
+ "recordsSent": 4845,
865
+ "recordsAccepted": 4845,
866
+ "recordsRejected": 0,
867
+ "replayRecordsSent": 900,
868
+ "replayRecordsAccepted": 900,
869
+ "retryAcks": 0,
870
+ "unackedLiveRecords": 0,
871
+ "sendErrors": 0,
872
+ "ackLatencyMs": {
873
+ "count": 4845,
874
+ "min": 7.28,
875
+ "avg": 34.26,
876
+ "p50": 33.33,
877
+ "p95": 52.18,
878
+ "p99": 81.78,
879
+ "max": 147.01
880
+ },
881
+ "sampleToCommitLagMs": {
882
+ "count": 4845,
883
+ "min": 7,
884
+ "avg": 34.26,
885
+ "p50": 33,
886
+ "p95": 52,
887
+ "p99": 82,
888
+ "max": 147
889
+ },
890
+ "messagesSent": 5010,
891
+ "backpressureSkips": 0,
892
+ "connects": 120,
893
+ "reconnects": 45,
894
+ "reconnectFailures": 0,
895
+ "collectorRecoveryMs": {
896
+ "count": 45,
897
+ "min": 46.43,
898
+ "avg": 110.7,
899
+ "p50": 109.43,
900
+ "p95": 167.88,
901
+ "p99": 175.77,
902
+ "max": 175.77
903
+ }
904
+ },
905
+ "history": {
906
+ "queries": 488,
907
+ "ok": 488,
908
+ "rateLimited": 0,
909
+ "errors": 0,
910
+ "latencyMs": {
911
+ "count": 488,
912
+ "min": 3.15,
913
+ "avg": 12.57,
914
+ "p50": 12,
915
+ "p95": 23.4,
916
+ "p99": 29.29,
917
+ "max": 35
918
+ },
919
+ "series": {
920
+ "count": 488,
921
+ "min": 4,
922
+ "avg": 4,
923
+ "p50": 4,
924
+ "p95": 4,
925
+ "p99": 4,
926
+ "max": 4
927
+ },
928
+ "points": {
929
+ "count": 488,
930
+ "min": 8,
931
+ "avg": 130.25,
932
+ "p50": 132,
933
+ "p95": 240,
934
+ "p99": 264,
935
+ "max": 316
936
+ },
937
+ "truncated": 0,
938
+ "tiers": {
939
+ "raw": 488
940
+ }
941
+ },
942
+ "stream": {
943
+ "clients": 4,
944
+ "slowClients": 0,
945
+ "events": 300,
946
+ "snapshots": 4,
947
+ "updates": 248,
948
+ "resets": 48,
949
+ "bytes": 44410364,
950
+ "eventLagMs": {
951
+ "count": 300,
952
+ "min": 61,
953
+ "avg": 229.45,
954
+ "p50": 215,
955
+ "p95": 438,
956
+ "p99": 770,
957
+ "max": 773
958
+ },
959
+ "normalEventLagMs": {
960
+ "count": 300,
961
+ "min": 61,
962
+ "avg": 229.45,
963
+ "p50": 215,
964
+ "p95": 438,
965
+ "p99": 770,
966
+ "max": 773
967
+ },
968
+ "slowEventLagMs": {
969
+ "count": 0,
970
+ "min": 0,
971
+ "avg": 0,
972
+ "p50": 0,
973
+ "p95": 0,
974
+ "p99": 0,
975
+ "max": 0
976
+ },
977
+ "firstEventMs": {
978
+ "count": 52,
979
+ "min": 2.4,
980
+ "avg": 6.87,
981
+ "p50": 5.78,
982
+ "p95": 17.16,
983
+ "p99": 21.45,
984
+ "max": 21.45
985
+ },
986
+ "reconnects": 48,
987
+ "resetsAfterReconnect": 48,
988
+ "slowPauses": 0,
989
+ "slowDrops": 0,
990
+ "sseRecoveryMs": {
991
+ "count": 48,
992
+ "min": 2.41,
993
+ "avg": 5.91,
994
+ "p50": 5.56,
995
+ "p95": 10.09,
996
+ "p99": 13.91,
997
+ "max": 13.91
998
+ }
999
+ },
1000
+ "hub": {
1001
+ "baseline": {
1002
+ "pid": 4049432,
1003
+ "uptimeMs": 2257.32,
1004
+ "hubRunId": "d128e26f-6612-48bd-90b7-dfd2277bb8f8",
1005
+ "eventLoopDelayMs": {
1006
+ "p50": 10.11,
1007
+ "p95": 11.29,
1008
+ "p99": 25.62,
1009
+ "max": 41.39
1010
+ },
1011
+ "eventLoopUtilization": 0.1205,
1012
+ "cpuPercent": 36.16,
1013
+ "cpuMs": {
1014
+ "user": 651.04,
1015
+ "system": 103.27
1016
+ },
1017
+ "rssBytes": 161738752,
1018
+ "rssPeakBytes": 161738752,
1019
+ "heapUsedBytes": 18513728,
1020
+ "database": {
1021
+ "bytes": 2824960,
1022
+ "walBytes": 2587392,
1023
+ "mainBytes": 237568
1024
+ },
1025
+ "store": {
1026
+ "queuedRecords": 0,
1027
+ "queuedBatches": 0,
1028
+ "lastFlushMs": 1793752396299,
1029
+ "lastFlushDurationMs": 11,
1030
+ "committedRecords": 150,
1031
+ "duplicateRecords": 0,
1032
+ "rejectedRecords": 0,
1033
+ "writeFailures": 0,
1034
+ "lastWriteError": null,
1035
+ "diskFullFailures": 0,
1036
+ "dbBytes": 2824960,
1037
+ "dbWalBytes": 2587392,
1038
+ "dbBytesLimit": 536870912,
1039
+ "retention": {
1040
+ "lastRunAtMs": 0,
1041
+ "lastRunDurationMs": 0,
1042
+ "deletedRows": 0,
1043
+ "pressure": false,
1044
+ "effectiveRawCutoffMs": null,
1045
+ "physicalBytes": 2824960,
1046
+ "physicalLimitBytes": 536870912,
1047
+ "physicalPressure": false,
1048
+ "walBytes": 2587392
1049
+ }
1050
+ },
1051
+ "liveClients": 0,
1052
+ "sessions": 8,
1053
+ "connectedMachines": 75,
1054
+ "configuredMachines": 75
1055
+ },
1056
+ "window": {
1057
+ "pid": 4049432,
1058
+ "uptimeMs": 62283.23,
1059
+ "hubRunId": "d128e26f-6612-48bd-90b7-dfd2277bb8f8",
1060
+ "eventLoopDelayMs": {
1061
+ "p50": 10.11,
1062
+ "p95": 19.15,
1063
+ "p99": 28.98,
1064
+ "max": 42.43
1065
+ },
1066
+ "eventLoopUtilization": 0.1288,
1067
+ "cpuPercent": 14.19,
1068
+ "cpuMs": {
1069
+ "user": 6951.19,
1070
+ "system": 1564.78
1071
+ },
1072
+ "rssBytes": 213061632,
1073
+ "rssPeakBytes": 213061632,
1074
+ "heapUsedBytes": 47326080,
1075
+ "database": {
1076
+ "bytes": 17456544,
1077
+ "walBytes": 6921632,
1078
+ "mainBytes": 10534912
1079
+ },
1080
+ "store": {
1081
+ "queuedRecords": 0,
1082
+ "queuedBatches": 0,
1083
+ "lastFlushMs": 1793752456346,
1084
+ "lastFlushDurationMs": 19,
1085
+ "committedRecords": 5595,
1086
+ "duplicateRecords": 0,
1087
+ "rejectedRecords": 0,
1088
+ "writeFailures": 0,
1089
+ "lastWriteError": null,
1090
+ "diskFullFailures": 0,
1091
+ "dbBytes": 17456544,
1092
+ "dbWalBytes": 6921632,
1093
+ "dbBytesLimit": 536870912,
1094
+ "retention": {
1095
+ "lastRunAtMs": 1793752454695,
1096
+ "lastRunDurationMs": 35,
1097
+ "deletedRows": 0,
1098
+ "pressure": false,
1099
+ "effectiveRawCutoffMs": 1793579654695,
1100
+ "physicalBytes": 17456544,
1101
+ "physicalLimitBytes": 536870912,
1102
+ "physicalPressure": false,
1103
+ "walBytes": 6921632
1104
+ }
1105
+ },
1106
+ "liveClients": 4,
1107
+ "sessions": 8,
1108
+ "connectedMachines": 75,
1109
+ "configuredMachines": 75
1110
+ },
1111
+ "final": {
1112
+ "pid": 4049432,
1113
+ "uptimeMs": 65286.06,
1114
+ "hubRunId": "d128e26f-6612-48bd-90b7-dfd2277bb8f8",
1115
+ "eventLoopDelayMs": {
1116
+ "p50": 10.11,
1117
+ "p95": 10.37,
1118
+ "p99": 31.21,
1119
+ "max": 32.15
1120
+ },
1121
+ "eventLoopUtilization": 0.0813,
1122
+ "cpuPercent": 8.68,
1123
+ "cpuMs": {
1124
+ "user": 179.46,
1125
+ "system": 81.04
1126
+ },
1127
+ "rssBytes": 213061632,
1128
+ "rssPeakBytes": 213061632,
1129
+ "heapUsedBytes": 29464632,
1130
+ "database": {
1131
+ "bytes": 17735072,
1132
+ "walBytes": 6921632,
1133
+ "mainBytes": 10813440
1134
+ },
1135
+ "store": {
1136
+ "queuedRecords": 0,
1137
+ "queuedBatches": 0,
1138
+ "lastFlushMs": 1793752458344,
1139
+ "lastFlushDurationMs": 19,
1140
+ "committedRecords": 5745,
1141
+ "duplicateRecords": 0,
1142
+ "rejectedRecords": 0,
1143
+ "writeFailures": 0,
1144
+ "lastWriteError": null,
1145
+ "diskFullFailures": 0,
1146
+ "dbBytes": 17735072,
1147
+ "dbWalBytes": 6921632,
1148
+ "dbBytesLimit": 536870912,
1149
+ "retention": {
1150
+ "lastRunAtMs": 1793752454695,
1151
+ "lastRunDurationMs": 35,
1152
+ "deletedRows": 0,
1153
+ "pressure": false,
1154
+ "effectiveRawCutoffMs": 1793579654695,
1155
+ "physicalBytes": 17735072,
1156
+ "physicalLimitBytes": 536870912,
1157
+ "physicalPressure": false,
1158
+ "walBytes": 6921632
1159
+ }
1160
+ },
1161
+ "liveClients": 4,
1162
+ "sessions": 8,
1163
+ "connectedMachines": 75,
1164
+ "configuredMachines": 75
1165
+ },
1166
+ "databaseGrowth": {
1167
+ "bytes": 14910112,
1168
+ "walBytes": 4334240,
1169
+ "mainBytes": 10575872
1170
+ }
1171
+ },
1172
+ "elapsedMs": 60004.03,
1173
+ "artifacts": {
1174
+ "directory": "/tmp/rigscope-scale-i6Gn7I",
1175
+ "kept": false,
1176
+ "configPath": "/tmp/rigscope-scale-i6Gn7I/hub-config.json",
1177
+ "databasePath": "/tmp/rigscope-scale-i6Gn7I/scale.sqlite"
1178
+ }
1179
+ },
1180
+ {
1181
+ "name": "fleet-75m-slow-sse",
1182
+ "description": "75 machines with six SSE viewers, two deliberately paused to force buffering/reconnect.",
1183
+ "config": {
1184
+ "name": "fleet-75m-slow-sse",
1185
+ "description": "75 machines with six SSE viewers, two deliberately paused to force buffering/reconnect.",
1186
+ "machines": 75,
1187
+ "durationMs": 60000,
1188
+ "sampleIntervalMs": 1000,
1189
+ "recordsPerBatch": 1,
1190
+ "viewers": 8,
1191
+ "sseClients": 6,
1192
+ "slowSseClients": 2,
1193
+ "slowSsePauseAfterMs": 10000,
1194
+ "slowSsePauseMs": 15000,
1195
+ "historyIntervalMs": 1000,
1196
+ "historyMetricSet": "standard",
1197
+ "churnEveryMs": null,
1198
+ "churnMachines": 0,
1199
+ "replayRecords": 0,
1200
+ "warmupMs": 1500,
1201
+ "maxCollectorConnections": 100,
1202
+ "databaseBudgetBytes": 536870912
1203
+ },
1204
+ "host": {
1205
+ "platform": "linux",
1206
+ "release": "7.3.0-9-generic",
1207
+ "arch": "x64",
1208
+ "cpuModel": "AMD EPYC 7402P 24-Core Processor",
1209
+ "logicalCores": 48,
1210
+ "totalMemoryBytes": 130351214592,
1211
+ "loadAverage": [
1212
+ 0.55,
1213
+ 0.7,
1214
+ 0.83
1215
+ ],
1216
+ "node": "v26.13.0"
1217
+ },
1218
+ "ingestion": {
1219
+ "recordsSent": 4791,
1220
+ "recordsAccepted": 4791,
1221
+ "recordsRejected": 0,
1222
+ "replayRecordsSent": 0,
1223
+ "replayRecordsAccepted": 0,
1224
+ "retryAcks": 0,
1225
+ "unackedLiveRecords": 0,
1226
+ "sendErrors": 0,
1227
+ "ackLatencyMs": {
1228
+ "count": 4791,
1229
+ "min": 8.74,
1230
+ "avg": 45.49,
1231
+ "p50": 45.97,
1232
+ "p95": 64.41,
1233
+ "p99": 74.04,
1234
+ "max": 84.02
1235
+ },
1236
+ "sampleToCommitLagMs": {
1237
+ "count": 4791,
1238
+ "min": 8,
1239
+ "avg": 45.47,
1240
+ "p50": 46,
1241
+ "p95": 64,
1242
+ "p99": 74,
1243
+ "max": 84
1244
+ },
1245
+ "messagesSent": 4866,
1246
+ "backpressureSkips": 0,
1247
+ "connects": 75,
1248
+ "reconnects": 0,
1249
+ "reconnectFailures": 0,
1250
+ "collectorRecoveryMs": {
1251
+ "count": 0,
1252
+ "min": 0,
1253
+ "avg": 0,
1254
+ "p50": 0,
1255
+ "p95": 0,
1256
+ "p99": 0,
1257
+ "max": 0
1258
+ }
1259
+ },
1260
+ "history": {
1261
+ "queries": 480,
1262
+ "ok": 480,
1263
+ "rateLimited": 0,
1264
+ "errors": 0,
1265
+ "latencyMs": {
1266
+ "count": 480,
1267
+ "min": 2.46,
1268
+ "avg": 10.9,
1269
+ "p50": 9.99,
1270
+ "p95": 23.01,
1271
+ "p99": 29.57,
1272
+ "max": 36.61
1273
+ },
1274
+ "series": {
1275
+ "count": 480,
1276
+ "min": 4,
1277
+ "avg": 4,
1278
+ "p50": 4,
1279
+ "p95": 4,
1280
+ "p99": 4,
1281
+ "max": 4
1282
+ },
1283
+ "points": {
1284
+ "count": 480,
1285
+ "min": 8,
1286
+ "avg": 126,
1287
+ "p50": 128,
1288
+ "p95": 236,
1289
+ "p99": 244,
1290
+ "max": 244
1291
+ },
1292
+ "truncated": 0,
1293
+ "tiers": {
1294
+ "raw": 480
1295
+ }
1296
+ },
1297
+ "stream": {
1298
+ "clients": 6,
1299
+ "slowClients": 2,
1300
+ "events": 378,
1301
+ "snapshots": 6,
1302
+ "updates": 372,
1303
+ "resets": 0,
1304
+ "bytes": 55959834,
1305
+ "eventLagMs": {
1306
+ "count": 378,
1307
+ "min": 452,
1308
+ "avg": 1039.88,
1309
+ "p50": 479,
1310
+ "p95": 5560,
1311
+ "p99": 13519,
1312
+ "max": 14526
1313
+ },
1314
+ "normalEventLagMs": {
1315
+ "count": 252,
1316
+ "min": 456,
1317
+ "avg": 479.62,
1318
+ "p50": 477,
1319
+ "p95": 502,
1320
+ "p99": 527,
1321
+ "max": 531
1322
+ },
1323
+ "slowEventLagMs": {
1324
+ "count": 126,
1325
+ "min": 452,
1326
+ "avg": 2160.41,
1327
+ "p50": 484,
1328
+ "p95": 11553,
1329
+ "p99": 14518,
1330
+ "max": 14526
1331
+ },
1332
+ "firstEventMs": {
1333
+ "count": 6,
1334
+ "min": 14.07,
1335
+ "avg": 19.07,
1336
+ "p50": 20.06,
1337
+ "p95": 24.17,
1338
+ "p99": 24.17,
1339
+ "max": 24.17
1340
+ },
1341
+ "reconnects": 0,
1342
+ "resetsAfterReconnect": 0,
1343
+ "slowPauses": 2,
1344
+ "slowDrops": 0,
1345
+ "sseRecoveryMs": {
1346
+ "count": 0,
1347
+ "min": 0,
1348
+ "avg": 0,
1349
+ "p50": 0,
1350
+ "p95": 0,
1351
+ "p99": 0,
1352
+ "max": 0
1353
+ }
1354
+ },
1355
+ "hub": {
1356
+ "baseline": {
1357
+ "pid": 4049700,
1358
+ "uptimeMs": 2216.18,
1359
+ "hubRunId": "8d0bb80c-6c39-400a-8924-ab23157d5b76",
1360
+ "eventLoopDelayMs": {
1361
+ "p50": 10.1,
1362
+ "p95": 10.76,
1363
+ "p99": 32.05,
1364
+ "max": 43.58
1365
+ },
1366
+ "eventLoopUtilization": 0.1095,
1367
+ "cpuPercent": 36.27,
1368
+ "cpuMs": {
1369
+ "user": 648.75,
1370
+ "system": 92.17
1371
+ },
1372
+ "rssBytes": 161660928,
1373
+ "rssPeakBytes": 161660928,
1374
+ "heapUsedBytes": 14607768,
1375
+ "database": {
1376
+ "bytes": 2738440,
1377
+ "walBytes": 2500872,
1378
+ "mainBytes": 237568
1379
+ },
1380
+ "store": {
1381
+ "queuedRecords": 0,
1382
+ "queuedBatches": 0,
1383
+ "lastFlushMs": 1793752463783,
1384
+ "lastFlushDurationMs": 10,
1385
+ "committedRecords": 150,
1386
+ "duplicateRecords": 0,
1387
+ "rejectedRecords": 0,
1388
+ "writeFailures": 0,
1389
+ "lastWriteError": null,
1390
+ "diskFullFailures": 0,
1391
+ "dbBytes": 2738440,
1392
+ "dbWalBytes": 2500872,
1393
+ "dbBytesLimit": 536870912,
1394
+ "retention": {
1395
+ "lastRunAtMs": 0,
1396
+ "lastRunDurationMs": 0,
1397
+ "deletedRows": 0,
1398
+ "pressure": false,
1399
+ "effectiveRawCutoffMs": null,
1400
+ "physicalBytes": 2738440,
1401
+ "physicalLimitBytes": 536870912,
1402
+ "physicalPressure": false,
1403
+ "walBytes": 2500872
1404
+ }
1405
+ },
1406
+ "liveClients": 0,
1407
+ "sessions": 8,
1408
+ "connectedMachines": 75,
1409
+ "configuredMachines": 75
1410
+ },
1411
+ "window": {
1412
+ "pid": 4049700,
1413
+ "uptimeMs": 62231.28,
1414
+ "hubRunId": "8d0bb80c-6c39-400a-8924-ab23157d5b76",
1415
+ "eventLoopDelayMs": {
1416
+ "p50": 10.11,
1417
+ "p95": 11.27,
1418
+ "p99": 38.5,
1419
+ "max": 76.22
1420
+ },
1421
+ "eventLoopUtilization": 0.1087,
1422
+ "cpuPercent": 11.95,
1423
+ "cpuMs": {
1424
+ "user": 5930.08,
1425
+ "system": 1240.73
1426
+ },
1427
+ "rssBytes": 199393280,
1428
+ "rssPeakBytes": 199409664,
1429
+ "heapUsedBytes": 20655624,
1430
+ "database": {
1431
+ "bytes": 16068840,
1432
+ "walBytes": 7065832,
1433
+ "mainBytes": 9003008
1434
+ },
1435
+ "store": {
1436
+ "queuedRecords": 0,
1437
+ "queuedBatches": 0,
1438
+ "lastFlushMs": 1793752523787,
1439
+ "lastFlushDurationMs": 17,
1440
+ "committedRecords": 4650,
1441
+ "duplicateRecords": 0,
1442
+ "rejectedRecords": 0,
1443
+ "writeFailures": 0,
1444
+ "lastWriteError": null,
1445
+ "diskFullFailures": 0,
1446
+ "dbBytes": 16068840,
1447
+ "dbWalBytes": 7065832,
1448
+ "dbBytesLimit": 536870912,
1449
+ "retention": {
1450
+ "lastRunAtMs": 1793752522183,
1451
+ "lastRunDurationMs": 30,
1452
+ "deletedRows": 0,
1453
+ "pressure": false,
1454
+ "effectiveRawCutoffMs": 1793579722183,
1455
+ "physicalBytes": 16068840,
1456
+ "physicalLimitBytes": 536870912,
1457
+ "physicalPressure": false,
1458
+ "walBytes": 7065832
1459
+ }
1460
+ },
1461
+ "liveClients": 6,
1462
+ "sessions": 8,
1463
+ "connectedMachines": 75,
1464
+ "configuredMachines": 75
1465
+ },
1466
+ "final": {
1467
+ "pid": 4049700,
1468
+ "uptimeMs": 65235.63,
1469
+ "hubRunId": "8d0bb80c-6c39-400a-8924-ab23157d5b76",
1470
+ "eventLoopDelayMs": {
1471
+ "p50": 10.13,
1472
+ "p95": 11.17,
1473
+ "p99": 20.37,
1474
+ "max": 68.42
1475
+ },
1476
+ "eventLoopUtilization": 0.0578,
1477
+ "cpuPercent": 6.26,
1478
+ "cpuMs": {
1479
+ "user": 135.58,
1480
+ "system": 52.52
1481
+ },
1482
+ "rssBytes": 199786496,
1483
+ "rssPeakBytes": 199786496,
1484
+ "heapUsedBytes": 31001152,
1485
+ "database": {
1486
+ "bytes": 16318696,
1487
+ "walBytes": 7065832,
1488
+ "mainBytes": 9252864
1489
+ },
1490
+ "store": {
1491
+ "queuedRecords": 0,
1492
+ "queuedBatches": 0,
1493
+ "lastFlushMs": 1793752525787,
1494
+ "lastFlushDurationMs": 10,
1495
+ "committedRecords": 4791,
1496
+ "duplicateRecords": 0,
1497
+ "rejectedRecords": 0,
1498
+ "writeFailures": 0,
1499
+ "lastWriteError": null,
1500
+ "diskFullFailures": 0,
1501
+ "dbBytes": 16318696,
1502
+ "dbWalBytes": 7065832,
1503
+ "dbBytesLimit": 536870912,
1504
+ "retention": {
1505
+ "lastRunAtMs": 1793752522183,
1506
+ "lastRunDurationMs": 30,
1507
+ "deletedRows": 0,
1508
+ "pressure": false,
1509
+ "effectiveRawCutoffMs": 1793579722183,
1510
+ "physicalBytes": 16318696,
1511
+ "physicalLimitBytes": 536870912,
1512
+ "physicalPressure": false,
1513
+ "walBytes": 7065832
1514
+ }
1515
+ },
1516
+ "liveClients": 6,
1517
+ "sessions": 8,
1518
+ "connectedMachines": 75,
1519
+ "configuredMachines": 75
1520
+ },
1521
+ "databaseGrowth": {
1522
+ "bytes": 13580256,
1523
+ "walBytes": 4564960,
1524
+ "mainBytes": 9015296
1525
+ }
1526
+ },
1527
+ "elapsedMs": 60011.68,
1528
+ "artifacts": {
1529
+ "directory": "/tmp/rigscope-scale-hOqj6Z",
1530
+ "kept": false,
1531
+ "configPath": "/tmp/rigscope-scale-hOqj6Z/hub-config.json",
1532
+ "databasePath": "/tmp/rigscope-scale-hOqj6Z/scale.sqlite"
1533
+ }
1534
+ },
1535
+ {
1536
+ "name": "fleet-75m-history",
1537
+ "description": "75 machines with eight History viewers polling a broad metric set near the session budget.",
1538
+ "config": {
1539
+ "name": "fleet-75m-history",
1540
+ "description": "75 machines with eight History viewers polling a broad metric set near the session budget.",
1541
+ "machines": 75,
1542
+ "durationMs": 60000,
1543
+ "sampleIntervalMs": 1000,
1544
+ "recordsPerBatch": 1,
1545
+ "viewers": 8,
1546
+ "sseClients": 2,
1547
+ "slowSseClients": 0,
1548
+ "slowSsePauseAfterMs": 0,
1549
+ "slowSsePauseMs": 0,
1550
+ "historyIntervalMs": 300,
1551
+ "historyMetricSet": "broad",
1552
+ "churnEveryMs": null,
1553
+ "churnMachines": 0,
1554
+ "replayRecords": 0,
1555
+ "warmupMs": 1500,
1556
+ "maxCollectorConnections": 100,
1557
+ "databaseBudgetBytes": 536870912
1558
+ },
1559
+ "host": {
1560
+ "platform": "linux",
1561
+ "release": "7.3.0-9-generic",
1562
+ "arch": "x64",
1563
+ "cpuModel": "AMD EPYC 7402P 24-Core Processor",
1564
+ "logicalCores": 48,
1565
+ "totalMemoryBytes": 130351214592,
1566
+ "loadAverage": [
1567
+ 0.83,
1568
+ 0.74,
1569
+ 0.83
1570
+ ],
1571
+ "node": "v26.13.0"
1572
+ },
1573
+ "ingestion": {
1574
+ "recordsSent": 4785,
1575
+ "recordsAccepted": 4785,
1576
+ "recordsRejected": 0,
1577
+ "replayRecordsSent": 0,
1578
+ "replayRecordsAccepted": 0,
1579
+ "retryAcks": 0,
1580
+ "unackedLiveRecords": 0,
1581
+ "sendErrors": 0,
1582
+ "ackLatencyMs": {
1583
+ "count": 4785,
1584
+ "min": 4.3,
1585
+ "avg": 38.84,
1586
+ "p50": 36.21,
1587
+ "p95": 70.66,
1588
+ "p99": 82.26,
1589
+ "max": 93.82
1590
+ },
1591
+ "sampleToCommitLagMs": {
1592
+ "count": 4785,
1593
+ "min": 5,
1594
+ "avg": 38.83,
1595
+ "p50": 36,
1596
+ "p95": 71,
1597
+ "p99": 82,
1598
+ "max": 94
1599
+ },
1600
+ "messagesSent": 4860,
1601
+ "backpressureSkips": 0,
1602
+ "connects": 75,
1603
+ "reconnects": 0,
1604
+ "reconnectFailures": 0,
1605
+ "collectorRecoveryMs": {
1606
+ "count": 0,
1607
+ "min": 0,
1608
+ "avg": 0,
1609
+ "p50": 0,
1610
+ "p95": 0,
1611
+ "p99": 0,
1612
+ "max": 0
1613
+ }
1614
+ },
1615
+ "history": {
1616
+ "queries": 1608,
1617
+ "ok": 1608,
1618
+ "rateLimited": 0,
1619
+ "errors": 0,
1620
+ "latencyMs": {
1621
+ "count": 1608,
1622
+ "min": 4.54,
1623
+ "avg": 29.93,
1624
+ "p50": 29.36,
1625
+ "p95": 50.27,
1626
+ "p99": 56.22,
1627
+ "max": 60.53
1628
+ },
1629
+ "series": {
1630
+ "count": 1608,
1631
+ "min": 25,
1632
+ "avg": 25,
1633
+ "p50": 25,
1634
+ "p95": 25,
1635
+ "p99": 25,
1636
+ "max": 25
1637
+ },
1638
+ "points": {
1639
+ "count": 1608,
1640
+ "min": 50,
1641
+ "avg": 800.26,
1642
+ "p50": 800,
1643
+ "p95": 1475,
1644
+ "p99": 1525,
1645
+ "max": 1550
1646
+ },
1647
+ "truncated": 0,
1648
+ "tiers": {
1649
+ "raw": 1608
1650
+ }
1651
+ },
1652
+ "stream": {
1653
+ "clients": 2,
1654
+ "slowClients": 0,
1655
+ "events": 126,
1656
+ "snapshots": 2,
1657
+ "updates": 124,
1658
+ "resets": 0,
1659
+ "bytes": 18653320,
1660
+ "eventLagMs": {
1661
+ "count": 126,
1662
+ "min": 382,
1663
+ "avg": 410.01,
1664
+ "p50": 405,
1665
+ "p95": 453,
1666
+ "p99": 524,
1667
+ "max": 526
1668
+ },
1669
+ "normalEventLagMs": {
1670
+ "count": 126,
1671
+ "min": 382,
1672
+ "avg": 410.01,
1673
+ "p50": 405,
1674
+ "p95": 453,
1675
+ "p99": 524,
1676
+ "max": 526
1677
+ },
1678
+ "slowEventLagMs": {
1679
+ "count": 0,
1680
+ "min": 0,
1681
+ "avg": 0,
1682
+ "p50": 0,
1683
+ "p95": 0,
1684
+ "p99": 0,
1685
+ "max": 0
1686
+ },
1687
+ "firstEventMs": {
1688
+ "count": 2,
1689
+ "min": 18.79,
1690
+ "avg": 19.73,
1691
+ "p50": 20.67,
1692
+ "p95": 20.67,
1693
+ "p99": 20.67,
1694
+ "max": 20.67
1695
+ },
1696
+ "reconnects": 0,
1697
+ "resetsAfterReconnect": 0,
1698
+ "slowPauses": 0,
1699
+ "slowDrops": 0,
1700
+ "sseRecoveryMs": {
1701
+ "count": 0,
1702
+ "min": 0,
1703
+ "avg": 0,
1704
+ "p50": 0,
1705
+ "p95": 0,
1706
+ "p99": 0,
1707
+ "max": 0
1708
+ }
1709
+ },
1710
+ "hub": {
1711
+ "baseline": {
1712
+ "pid": 4050066,
1713
+ "uptimeMs": 2261.42,
1714
+ "hubRunId": "b592e11e-270d-4232-95ae-75cffe850ffa",
1715
+ "eventLoopDelayMs": {
1716
+ "p50": 10.12,
1717
+ "p95": 13.31,
1718
+ "p99": 29.93,
1719
+ "max": 39.78
1720
+ },
1721
+ "eventLoopUtilization": 0.1304,
1722
+ "cpuPercent": 36.82,
1723
+ "cpuMs": {
1724
+ "user": 667.19,
1725
+ "system": 102.09
1726
+ },
1727
+ "rssBytes": 162062336,
1728
+ "rssPeakBytes": 162062336,
1729
+ "heapUsedBytes": 15439400,
1730
+ "database": {
1731
+ "bytes": 2841440,
1732
+ "walBytes": 2603872,
1733
+ "mainBytes": 237568
1734
+ },
1735
+ "store": {
1736
+ "queuedRecords": 0,
1737
+ "queuedBatches": 0,
1738
+ "lastFlushMs": 1793752531225,
1739
+ "lastFlushDurationMs": 17,
1740
+ "committedRecords": 150,
1741
+ "duplicateRecords": 0,
1742
+ "rejectedRecords": 0,
1743
+ "writeFailures": 0,
1744
+ "lastWriteError": null,
1745
+ "diskFullFailures": 0,
1746
+ "dbBytes": 2841440,
1747
+ "dbWalBytes": 2603872,
1748
+ "dbBytesLimit": 536870912,
1749
+ "retention": {
1750
+ "lastRunAtMs": 0,
1751
+ "lastRunDurationMs": 0,
1752
+ "deletedRows": 0,
1753
+ "pressure": false,
1754
+ "effectiveRawCutoffMs": null,
1755
+ "physicalBytes": 2841440,
1756
+ "physicalLimitBytes": 536870912,
1757
+ "physicalPressure": false,
1758
+ "walBytes": 2603872
1759
+ }
1760
+ },
1761
+ "liveClients": 0,
1762
+ "sessions": 8,
1763
+ "connectedMachines": 75,
1764
+ "configuredMachines": 75
1765
+ },
1766
+ "window": {
1767
+ "pid": 4050066,
1768
+ "uptimeMs": 62267.46,
1769
+ "hubRunId": "b592e11e-270d-4232-95ae-75cffe850ffa",
1770
+ "eventLoopDelayMs": {
1771
+ "p50": 10.08,
1772
+ "p95": 27.95,
1773
+ "p99": 48.04,
1774
+ "max": 72.68
1775
+ },
1776
+ "eventLoopUtilization": 0.2912,
1777
+ "cpuPercent": 31.15,
1778
+ "cpuMs": {
1779
+ "user": 17118.57,
1780
+ "system": 1569.92
1781
+ },
1782
+ "rssBytes": 240828416,
1783
+ "rssPeakBytes": 240828416,
1784
+ "heapUsedBytes": 28643264,
1785
+ "database": {
1786
+ "bytes": 16213064,
1787
+ "walBytes": 7214152,
1788
+ "mainBytes": 8998912
1789
+ },
1790
+ "store": {
1791
+ "queuedRecords": 0,
1792
+ "queuedBatches": 0,
1793
+ "lastFlushMs": 1793752591250,
1794
+ "lastFlushDurationMs": 13,
1795
+ "committedRecords": 4650,
1796
+ "duplicateRecords": 0,
1797
+ "rejectedRecords": 0,
1798
+ "writeFailures": 0,
1799
+ "lastWriteError": null,
1800
+ "diskFullFailures": 0,
1801
+ "dbBytes": 16213064,
1802
+ "dbWalBytes": 7214152,
1803
+ "dbBytesLimit": 536870912,
1804
+ "retention": {
1805
+ "lastRunAtMs": 1793752589610,
1806
+ "lastRunDurationMs": 19,
1807
+ "deletedRows": 0,
1808
+ "pressure": false,
1809
+ "effectiveRawCutoffMs": 1793579789610,
1810
+ "physicalBytes": 16213064,
1811
+ "physicalLimitBytes": 536870912,
1812
+ "physicalPressure": false,
1813
+ "walBytes": 7214152
1814
+ }
1815
+ },
1816
+ "liveClients": 2,
1817
+ "sessions": 8,
1818
+ "connectedMachines": 75,
1819
+ "configuredMachines": 75
1820
+ },
1821
+ "final": {
1822
+ "pid": 4050066,
1823
+ "uptimeMs": 65272.14,
1824
+ "hubRunId": "b592e11e-270d-4232-95ae-75cffe850ffa",
1825
+ "eventLoopDelayMs": {
1826
+ "p50": 10.12,
1827
+ "p95": 11.31,
1828
+ "p99": 27.8,
1829
+ "max": 42.34
1830
+ },
1831
+ "eventLoopUtilization": 0.0653,
1832
+ "cpuPercent": 6.88,
1833
+ "cpuMs": {
1834
+ "user": 157.87,
1835
+ "system": 48.76
1836
+ },
1837
+ "rssBytes": 241614848,
1838
+ "rssPeakBytes": 241614848,
1839
+ "heapUsedBytes": 37519640,
1840
+ "database": {
1841
+ "bytes": 16446536,
1842
+ "walBytes": 7214152,
1843
+ "mainBytes": 9232384
1844
+ },
1845
+ "store": {
1846
+ "queuedRecords": 0,
1847
+ "queuedBatches": 0,
1848
+ "lastFlushMs": 1793752593243,
1849
+ "lastFlushDurationMs": 18,
1850
+ "committedRecords": 4785,
1851
+ "duplicateRecords": 0,
1852
+ "rejectedRecords": 0,
1853
+ "writeFailures": 0,
1854
+ "lastWriteError": null,
1855
+ "diskFullFailures": 0,
1856
+ "dbBytes": 16446536,
1857
+ "dbWalBytes": 7214152,
1858
+ "dbBytesLimit": 536870912,
1859
+ "retention": {
1860
+ "lastRunAtMs": 1793752589610,
1861
+ "lastRunDurationMs": 19,
1862
+ "deletedRows": 0,
1863
+ "pressure": false,
1864
+ "effectiveRawCutoffMs": 1793579789610,
1865
+ "physicalBytes": 16446536,
1866
+ "physicalLimitBytes": 536870912,
1867
+ "physicalPressure": false,
1868
+ "walBytes": 7214152
1869
+ }
1870
+ },
1871
+ "liveClients": 2,
1872
+ "sessions": 8,
1873
+ "connectedMachines": 75,
1874
+ "configuredMachines": 75
1875
+ },
1876
+ "databaseGrowth": {
1877
+ "bytes": 13605096,
1878
+ "walBytes": 4610280,
1879
+ "mainBytes": 8994816
1880
+ }
1881
+ },
1882
+ "elapsedMs": 60002.25,
1883
+ "artifacts": {
1884
+ "directory": "/tmp/rigscope-scale-dC5MUI",
1885
+ "kept": false,
1886
+ "configPath": "/tmp/rigscope-scale-dC5MUI/hub-config.json",
1887
+ "databasePath": "/tmp/rigscope-scale-dC5MUI/scale.sqlite"
1888
+ }
1889
+ }
1890
+ ],
1891
+ "limitations": [
1892
+ "Collector payload values and cadence are synthetic; the hub, database, auth, SSE and History paths are real modules.",
1893
+ "The hub child and all load generators share one host and one CPU; this is not a distributed-load measurement.",
1894
+ "History queries are synchronous on the hub event loop, so 'concurrent' viewers model overlapping HTTP requests, not parallel SQLite readers.",
1895
+ "The measurement disables the live service entirely; it uses a fresh temporary database and loopback ephemeral port.",
1896
+ "A passing case is evidence for this host and workload, not an unlimited-capacity or latency guarantee."
1897
+ ]
1898
+ }