rigscope 0.0.0-stage → 0.1.1

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 (224) 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/NE6PGEiJxUnKRceuzUWPc/_buildManifest.js +1 -0
  126. package/.next/static/NE6PGEiJxUnKRceuzUWPc/_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-dc6158e0bb450ef6.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-1475454737279ee0.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-916ee73de5eb067d.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/e45c0c7ef5ba0336.css +1 -0
  156. package/ARCHITECTURE.md +279 -0
  157. package/CHANGELOG.md +37 -0
  158. package/DESIGN.md +299 -0
  159. package/LICENSE +21 -0
  160. package/README.md +74 -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 +5679 -0
  166. package/dist/hub.cjs +8364 -0
  167. package/dist/ops.cjs +4976 -0
  168. package/dist/system.cjs +4333 -0
  169. package/docs/bottlenecks.md +62 -0
  170. package/docs/configuration.md +85 -0
  171. package/docs/development.md +46 -0
  172. package/docs/exports.md +39 -0
  173. package/docs/installation.md +306 -0
  174. package/docs/monitoring.md +112 -0
  175. package/docs/operations.md +550 -0
  176. package/docs/releasing.md +154 -0
  177. package/docs/scale-acceptance.json +412 -0
  178. package/docs/scale-validation.json +1898 -0
  179. package/docs/scale-validation.md +294 -0
  180. package/docs/stress-2026-11-04/180301-probe-m100-u1-s1-20000ms.json +412 -0
  181. package/docs/stress-2026-11-04/180335-probe-m200-u1-s1-20000ms.json +412 -0
  182. package/docs/stress-2026-11-04/180409-probe-m400-u1-s1-20000ms.json +412 -0
  183. package/docs/stress-2026-11-04/180443-probe-m800-u1-s1-20000ms.json +412 -0
  184. package/docs/stress-2026-11-04/180518-probe-m600-u1-s1-20000ms.json +412 -0
  185. package/docs/stress-2026-11-04/180553-probe-m500-u1-s1-20000ms.json +412 -0
  186. package/docs/stress-2026-11-04/180628-probe-m550-u1-s1-20000ms.json +412 -0
  187. package/docs/stress-2026-11-04/180716-probe-m800-u1-s0-20000ms.json +415 -0
  188. package/docs/stress-2026-11-04/180751-probe-m1600-u1-s0-20000ms.json +415 -0
  189. package/docs/stress-2026-11-04/180828-probe-m3200-u1-s0-20000ms.json +416 -0
  190. package/docs/stress-2026-11-04/180941-probe-m2400-u1-s0-20000ms.json +416 -0
  191. package/docs/stress-2026-11-04/181031-probe-m2000-u1-s0-20000ms.json +416 -0
  192. package/docs/stress-2026-11-04/181114-probe-m1800-u1-s0-20000ms.json +416 -0
  193. package/docs/stress-2026-11-04/181203-probe-m100-u64-s64-20000ms.json +418 -0
  194. package/docs/stress-2026-11-04/181304-probe-m200-u64-s64-20000ms.json +418 -0
  195. package/docs/stress-2026-11-04/181405-probe-m400-u64-s64-20000ms.json +418 -0
  196. package/docs/stress-2026-11-04/181507-probe-m500-u64-s64-20000ms.json +418 -0
  197. package/docs/stress-2026-11-04/181609-probe-m450-u64-s64-20000ms.json +418 -0
  198. package/docs/stress-2026-11-04/181845-probe-m2-u2-s2-3000ms.json +419 -0
  199. package/docs/stress-2026-11-04/181931-probe-m500-u64-s64-30000ms.json +420 -0
  200. package/docs/stress-2026-11-04/182108-probe-m1800-u1-s0-120000ms.json +418 -0
  201. package/docs/stress-2026-11-04/182354-probe-m1200-u1-s0-120000ms.json +418 -0
  202. package/docs/stress-2026-11-04/182625-probe-m900-u1-s0-120000ms.json +418 -0
  203. package/docs/stress-2026-11-04/182847-probe-m1050-u1-s0-120000ms.json +418 -0
  204. package/docs/stress-2026-11-04/183112-probe-m1125-u1-s0-120000ms.json +418 -0
  205. package/docs/stress-2026-11-04/193608-probe-m500-u64-s64-120000ms.json +420 -0
  206. package/docs/stress-2026-11-04/193909-probe-m529-u1-s1-15000ms.json +420 -0
  207. package/docs/stress-2026-11-04/193940-probe-m530-u1-s1-15000ms.json +420 -0
  208. package/docs/stress-2026-11-04/194011-probe-m100-u1-s65-10000ms.json +421 -0
  209. package/docs/stress-2026-11-04/README.md +205 -0
  210. package/docs/stress-2026-11-04/index.jsonl +29 -0
  211. package/docs/stress-2026-11-04/manifest.json +13 -0
  212. package/docs/stress-2026-11-04/results.html +22 -0
  213. package/docs/system-installation.md +195 -0
  214. package/next.config.js +38 -0
  215. package/package.json +117 -4
  216. package/packaging/README.md +5 -0
  217. package/packaging/collector.env.example +24 -0
  218. package/packaging/hub.env.example +31 -0
  219. package/packaging/system/90-rigscope-rapl.rules +7 -0
  220. package/packaging/system/README.md +5 -0
  221. package/packaging/system/rigscope-collector.service.example +53 -0
  222. package/packaging/system/rigscope-hub.service.example +50 -0
  223. package/packaging/system/rigscope-rapl.sysusers +5 -0
  224. package/packaging/system/rigscope.sysusers +7 -0
@@ -0,0 +1,415 @@
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-04T18:07:45.347Z",
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.57,
16
+ 0.43,
17
+ 0.36
18
+ ],
19
+ "node": "v26.13.0"
20
+ },
21
+ "command": "npx tsx scripts/scale-harness.ts --case fleet-75m --machines 800 --viewers 1 --sse-clients 0 --duration-ms 20000 --history-interval-ms 1000 --database-budget-mb 1024 --json-out /home/triet/Project/rigscope/docs/stress-2026-11-04/180716-probe-m800-u1-s0-20000ms.json",
22
+ "suite": [
23
+ {
24
+ "name": "fleet-75m",
25
+ "description": "75 machines with eight concurrent History viewers and four SSE viewers.",
26
+ "machines": 800,
27
+ "durationMs": 20000,
28
+ "sampleIntervalMs": 1000,
29
+ "recordsPerBatch": 1,
30
+ "viewers": 1,
31
+ "sseClients": 0,
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
+ "cases": [
43
+ {
44
+ "name": "fleet-75m",
45
+ "description": "75 machines with eight concurrent History viewers and four SSE viewers.",
46
+ "config": {
47
+ "name": "fleet-75m",
48
+ "description": "75 machines with eight concurrent History viewers and four SSE viewers.",
49
+ "machines": 800,
50
+ "durationMs": 20000,
51
+ "sampleIntervalMs": 1000,
52
+ "recordsPerBatch": 1,
53
+ "viewers": 1,
54
+ "sseClients": 0,
55
+ "slowSseClients": 0,
56
+ "slowSsePauseAfterMs": 0,
57
+ "slowSsePauseMs": 0,
58
+ "historyIntervalMs": 1000,
59
+ "historyMetricSet": "standard",
60
+ "churnEveryMs": null,
61
+ "churnMachines": 0,
62
+ "replayRecords": 0,
63
+ "warmupMs": 1500,
64
+ "maxCollectorConnections": 810,
65
+ "databaseBudgetBytes": 1073741824
66
+ },
67
+ "host": {
68
+ "platform": "linux",
69
+ "release": "7.3.0-9-generic",
70
+ "arch": "x64",
71
+ "cpuModel": "AMD EPYC 7402P 24-Core Processor",
72
+ "logicalCores": 48,
73
+ "totalMemoryBytes": 130351214592,
74
+ "loadAverage": [
75
+ 0.62,
76
+ 0.44,
77
+ 0.36
78
+ ],
79
+ "node": "v26.13.0"
80
+ },
81
+ "authorization": {
82
+ "anonymousDenied": true,
83
+ "scopedHistory": true,
84
+ "scopedSnapshot": true,
85
+ "scopedReset": true
86
+ },
87
+ "ingestion": {
88
+ "recordsSent": 19295,
89
+ "recordsAccepted": 19295,
90
+ "recordsRejected": 0,
91
+ "replayRecordsSent": 0,
92
+ "replayRecordsAccepted": 0,
93
+ "retryAcks": 0,
94
+ "unackedLiveRecords": 0,
95
+ "sendErrors": 0,
96
+ "ackLatencyMs": {
97
+ "count": 19295,
98
+ "min": 2.83,
99
+ "avg": 35.85,
100
+ "p50": 35.45,
101
+ "p95": 53.46,
102
+ "p99": 60.54,
103
+ "max": 68.42
104
+ },
105
+ "sampleToCommitLagMs": {
106
+ "count": 19295,
107
+ "min": 2,
108
+ "avg": 35.84,
109
+ "p50": 35,
110
+ "p95": 53,
111
+ "p99": 61,
112
+ "max": 68
113
+ },
114
+ "messagesSent": 20095,
115
+ "backpressureSkips": 0,
116
+ "connects": 800,
117
+ "reconnects": 0,
118
+ "reconnectFailures": 0,
119
+ "collectorRecoveryMs": {
120
+ "count": 0,
121
+ "min": 0,
122
+ "avg": 0,
123
+ "p50": 0,
124
+ "p95": 0,
125
+ "p99": 0,
126
+ "max": 0
127
+ }
128
+ },
129
+ "history": {
130
+ "queries": 21,
131
+ "ok": 21,
132
+ "rateLimited": 0,
133
+ "errors": 0,
134
+ "latencyMs": {
135
+ "count": 21,
136
+ "min": 3.51,
137
+ "avg": 4.92,
138
+ "p50": 3.93,
139
+ "p95": 10.13,
140
+ "p99": 15.52,
141
+ "max": 15.52
142
+ },
143
+ "series": {
144
+ "count": 21,
145
+ "min": 4,
146
+ "avg": 4,
147
+ "p50": 4,
148
+ "p95": 4,
149
+ "p99": 4,
150
+ "max": 4
151
+ },
152
+ "points": {
153
+ "count": 21,
154
+ "min": 8,
155
+ "avg": 50.67,
156
+ "p50": 52,
157
+ "p95": 88,
158
+ "p99": 88,
159
+ "max": 88
160
+ },
161
+ "truncated": 0,
162
+ "tiers": {
163
+ "raw": 21
164
+ }
165
+ },
166
+ "stream": {
167
+ "clients": 0,
168
+ "slowClients": 0,
169
+ "events": 0,
170
+ "snapshots": 0,
171
+ "updates": 0,
172
+ "resets": 0,
173
+ "bytes": 0,
174
+ "eventLagMs": {
175
+ "count": 0,
176
+ "min": 0,
177
+ "avg": 0,
178
+ "p50": 0,
179
+ "p95": 0,
180
+ "p99": 0,
181
+ "max": 0
182
+ },
183
+ "normalEventLagMs": {
184
+ "count": 0,
185
+ "min": 0,
186
+ "avg": 0,
187
+ "p50": 0,
188
+ "p95": 0,
189
+ "p99": 0,
190
+ "max": 0
191
+ },
192
+ "slowEventLagMs": {
193
+ "count": 0,
194
+ "min": 0,
195
+ "avg": 0,
196
+ "p50": 0,
197
+ "p95": 0,
198
+ "p99": 0,
199
+ "max": 0
200
+ },
201
+ "firstEventMs": {
202
+ "count": 0,
203
+ "min": 0,
204
+ "avg": 0,
205
+ "p50": 0,
206
+ "p95": 0,
207
+ "p99": 0,
208
+ "max": 0
209
+ },
210
+ "reconnects": 0,
211
+ "resetsAfterReconnect": 0,
212
+ "slowPauses": 0,
213
+ "slowDrops": 0,
214
+ "sseRecoveryMs": {
215
+ "count": 0,
216
+ "min": 0,
217
+ "avg": 0,
218
+ "p50": 0,
219
+ "p95": 0,
220
+ "p99": 0,
221
+ "max": 0
222
+ }
223
+ },
224
+ "hub": {
225
+ "baseline": {
226
+ "pid": 182096,
227
+ "uptimeMs": 2974.12,
228
+ "hubRunId": "94e92ae4-85af-45ac-ad27-20339ff699fc",
229
+ "eventLoopDelayMs": {
230
+ "p50": 10.29,
231
+ "p95": 36.37,
232
+ "p99": 42.6,
233
+ "max": 48.66
234
+ },
235
+ "eventLoopUtilization": 0.6335,
236
+ "cpuPercent": 79.75,
237
+ "cpuMs": {
238
+ "user": 1930.04,
239
+ "system": 276.5
240
+ },
241
+ "rssBytes": 165425152,
242
+ "rssPeakBytes": 165425152,
243
+ "heapUsedBytes": 45225272,
244
+ "database": {
245
+ "bytes": 18085504,
246
+ "walBytes": 4499072,
247
+ "mainBytes": 13586432
248
+ },
249
+ "store": {
250
+ "queuedRecords": 20,
251
+ "queuedBatches": 20,
252
+ "lastFlushMs": 1793815640013,
253
+ "lastFlushDurationMs": 11,
254
+ "committedRecords": 2060,
255
+ "duplicateRecords": 0,
256
+ "rejectedRecords": 0,
257
+ "writeFailures": 0,
258
+ "lastWriteError": null,
259
+ "diskFullFailures": 0,
260
+ "dbBytes": 18085504,
261
+ "dbWalBytes": 4499072,
262
+ "dbBytesLimit": 1073741824,
263
+ "retention": {
264
+ "lastRunAtMs": 0,
265
+ "lastRunDurationMs": 0,
266
+ "deletedRows": 0,
267
+ "pressure": false,
268
+ "effectiveRawCutoffMs": null,
269
+ "physicalBytes": 18085504,
270
+ "physicalLimitBytes": 1073741824,
271
+ "physicalPressure": false,
272
+ "walBytes": 4499072
273
+ }
274
+ },
275
+ "liveClients": 0,
276
+ "sessions": 2,
277
+ "connectedMachines": 800,
278
+ "configuredMachines": 800,
279
+ "snapshotBytes": 1583153
280
+ },
281
+ "window": {
282
+ "pid": 182096,
283
+ "uptimeMs": 22986.46,
284
+ "hubRunId": "94e92ae4-85af-45ac-ad27-20339ff699fc",
285
+ "eventLoopDelayMs": {
286
+ "p50": 10.35,
287
+ "p95": 36.31,
288
+ "p99": 46.33,
289
+ "max": 58.69
290
+ },
291
+ "eventLoopUtilization": 0.5626,
292
+ "cpuPercent": 61.88,
293
+ "cpuMs": {
294
+ "user": 10784.46,
295
+ "system": 1594.69
296
+ },
297
+ "rssBytes": 227520512,
298
+ "rssPeakBytes": 227520512,
299
+ "heapUsedBytes": 32215768,
300
+ "database": {
301
+ "bytes": 46018176,
302
+ "walBytes": 5553792,
303
+ "mainBytes": 40464384
304
+ },
305
+ "store": {
306
+ "queuedRecords": 20,
307
+ "queuedBatches": 20,
308
+ "lastFlushMs": 1793815660013,
309
+ "lastFlushDurationMs": 11,
310
+ "committedRecords": 18060,
311
+ "duplicateRecords": 0,
312
+ "rejectedRecords": 0,
313
+ "writeFailures": 0,
314
+ "lastWriteError": null,
315
+ "diskFullFailures": 0,
316
+ "dbBytes": 46018176,
317
+ "dbWalBytes": 5553792,
318
+ "dbBytesLimit": 1073741824,
319
+ "retention": {
320
+ "lastRunAtMs": 0,
321
+ "lastRunDurationMs": 0,
322
+ "deletedRows": 0,
323
+ "pressure": false,
324
+ "effectiveRawCutoffMs": null,
325
+ "physicalBytes": 46018176,
326
+ "physicalLimitBytes": 1073741824,
327
+ "physicalPressure": false,
328
+ "walBytes": 5553792
329
+ }
330
+ },
331
+ "liveClients": 0,
332
+ "sessions": 2,
333
+ "connectedMachines": 800,
334
+ "configuredMachines": 800,
335
+ "snapshotBytes": 1583953
336
+ },
337
+ "final": {
338
+ "pid": 182096,
339
+ "uptimeMs": 25998.92,
340
+ "hubRunId": "94e92ae4-85af-45ac-ad27-20339ff699fc",
341
+ "eventLoopDelayMs": {
342
+ "p50": 10.19,
343
+ "p95": 33.41,
344
+ "p99": 40.34,
345
+ "max": 43.75
346
+ },
347
+ "eventLoopUtilization": 0.2909,
348
+ "cpuPercent": 30.07,
349
+ "cpuMs": {
350
+ "user": 756.59,
351
+ "system": 147.15
352
+ },
353
+ "rssBytes": 229486592,
354
+ "rssPeakBytes": 229486592,
355
+ "heapUsedBytes": 50656344,
356
+ "database": {
357
+ "bytes": 48144432,
358
+ "walBytes": 5627952,
359
+ "mainBytes": 42516480
360
+ },
361
+ "store": {
362
+ "queuedRecords": 0,
363
+ "queuedBatches": 0,
364
+ "lastFlushMs": 1793815661556,
365
+ "lastFlushDurationMs": 1,
366
+ "committedRecords": 19295,
367
+ "duplicateRecords": 0,
368
+ "rejectedRecords": 0,
369
+ "writeFailures": 0,
370
+ "lastWriteError": null,
371
+ "diskFullFailures": 0,
372
+ "dbBytes": 48144432,
373
+ "dbWalBytes": 5627952,
374
+ "dbBytesLimit": 1073741824,
375
+ "retention": {
376
+ "lastRunAtMs": 0,
377
+ "lastRunDurationMs": 0,
378
+ "deletedRows": 0,
379
+ "pressure": false,
380
+ "effectiveRawCutoffMs": null,
381
+ "physicalBytes": 48144432,
382
+ "physicalLimitBytes": 1073741824,
383
+ "physicalPressure": false,
384
+ "walBytes": 5627952
385
+ }
386
+ },
387
+ "liveClients": 0,
388
+ "sessions": 2,
389
+ "connectedMachines": 800,
390
+ "configuredMachines": 800,
391
+ "snapshotBytes": 1583953
392
+ },
393
+ "databaseGrowth": {
394
+ "bytes": 30058928,
395
+ "walBytes": 1128880,
396
+ "mainBytes": 28930048
397
+ }
398
+ },
399
+ "elapsedMs": 20001.59,
400
+ "artifacts": {
401
+ "directory": "/tmp/rigscope-scale-Wgz0om",
402
+ "kept": false,
403
+ "configPath": "/tmp/rigscope-scale-Wgz0om/hub-config.json",
404
+ "databasePath": "/tmp/rigscope-scale-Wgz0om/scale.sqlite"
405
+ }
406
+ }
407
+ ],
408
+ "limitations": [
409
+ "Collector payload values and cadence are synthetic; the hub, database, auth, SSE and History paths are real modules.",
410
+ "The hub child and all load generators share one host; the hub event loop is single-threaded, while load processes can use other cores. This is not distributed load.",
411
+ "History queries are synchronous on the hub event loop, so 'concurrent' viewers model overlapping HTTP requests, not parallel SQLite readers.",
412
+ "The measurement never contacts the live service; it uses a fresh temporary database and loopback ephemeral port.",
413
+ "A passing case is evidence for this host and workload, not an unlimited-capacity or latency guarantee."
414
+ ]
415
+ }