|
38 | 38 | "description": "Discrete occurrences during the run (currently just chain prunes). Typically rendered as annotations on charts.", |
39 | 39 | "items": { "$ref": "#/$defs/event" } |
40 | 40 | }, |
| 41 | + "sequencerStateSlots": { |
| 42 | + "type": "array", |
| 43 | + "description": "Per-slot sequencer state time budget reconstructed from structured state-transition logs. Optional for older runs and empty when sequencer debug logs were not enabled.", |
| 44 | + "items": { "$ref": "#/$defs/sequencerStateSlot" } |
| 45 | + }, |
41 | 46 | "notes": { |
42 | 47 | "type": "array", |
43 | 48 | "items": { "type": "string" }, |
|
65 | 70 | "format": "date-time", |
66 | 71 | "description": "Wall-clock time the load generator stopped sending txs (not the test-teardown time)." |
67 | 72 | }, |
| 73 | + "inclusionEndedAt": { |
| 74 | + "type": "string", |
| 75 | + "format": "date-time", |
| 76 | + "description": "Wall-clock time the scraper considers proposer-visible load fully included. With pending-drain scraping enabled, this is when validator pending TxPool depth first reached zero; otherwise it falls back to the bounded scrape window end. RPC/full-node pending may remain non-zero when load failed to propagate to validators." |
| 77 | + }, |
68 | 78 | "drainEndedAt": { |
69 | 79 | "type": "string", |
70 | 80 | "format": "date-time", |
71 | 81 | "description": "Wall-clock time the scraper began querying Prometheus. Typically endedAt + ~90s to let the OTel batch push (60s default) and one Prom scrape (15s) settle." |
72 | 82 | }, |
73 | 83 | "namespace": { "type": "string", "examples": ["bench-10tps"] }, |
| 84 | + "gcpProject": { |
| 85 | + "type": "string", |
| 86 | + "description": "GCP project containing the GKE container logs." |
| 87 | + }, |
| 88 | + "gcpLocation": { |
| 89 | + "type": "string", |
| 90 | + "description": "GKE cluster location used by Cloud Logging resource labels." |
| 91 | + }, |
| 92 | + "gkeCluster": { |
| 93 | + "type": "string", |
| 94 | + "description": "GKE cluster name used by Cloud Logging resource labels." |
| 95 | + }, |
74 | 96 | "image": { |
75 | 97 | "type": "string", |
76 | 98 | "description": "Aztec image tag or digest the validators ran." |
|
109 | 131 | "minimum": 1, |
110 | 132 | "description": "PromQL range-query step." |
111 | 133 | }, |
112 | | - "promUrl": { "type": "string" } |
| 134 | + "promUrl": { "type": "string" }, |
| 135 | + "waitForPendingZero": { |
| 136 | + "type": "boolean", |
| 137 | + "description": "Whether live scraping waited for validator pending TxPool depth to reach zero before querying." |
| 138 | + }, |
| 139 | + "maxPendingWaitSeconds": { |
| 140 | + "type": "integer", |
| 141 | + "minimum": 0, |
| 142 | + "description": "Maximum time the scraper was allowed to wait for validator pending TxPool depth to reach zero." |
| 143 | + }, |
| 144 | + "pendingAtScrape": { |
| 145 | + "type": ["number", "null"], |
| 146 | + "minimum": 0, |
| 147 | + "description": "Validator pending TxPool depth observed when scraping started, or null when the pending drain gate was disabled." |
| 148 | + }, |
| 149 | + "pendingByRoleAtScrape": { |
| 150 | + "type": ["object", "null"], |
| 151 | + "description": "Pending TxPool depth by pod role at scrape start. RPC/full-node pending can remain non-zero after validators drain, which indicates load that did not propagate to proposers before expiry.", |
| 152 | + "additionalProperties": false, |
| 153 | + "properties": { |
| 154 | + "rpc": { "type": ["number", "null"], "minimum": 0 }, |
| 155 | + "validator": { "type": ["number", "null"], "minimum": 0 }, |
| 156 | + "fullNode": { "type": ["number", "null"], "minimum": 0 } |
| 157 | + } |
| 158 | + }, |
| 159 | + "pendingWaitTimedOut": { |
| 160 | + "type": "boolean", |
| 161 | + "description": "True if scraping began because the pending-drain timeout expired." |
| 162 | + } |
113 | 163 | } |
114 | 164 | } |
115 | 165 | } |
|
127 | 177 | "targetTps": { "type": "number" }, |
128 | 178 | "inclusionTpsMean": { |
129 | 179 | "type": ["number", "null"], |
130 | | - "description": "Mean inclusion TPS over the steady-state window (run window minus warm-up)." |
| 180 | + "description": "Exact block-log inclusion throughput over the observed inclusion window: totalTxsMined / (inclusionEndedAt - startedAt)." |
| 181 | + }, |
| 182 | + "inclusionTpsPeak": { |
| 183 | + "type": ["number", "null"], |
| 184 | + "description": "Peak sampled Prometheus rolling inclusion rate over the observed scrape window." |
131 | 185 | }, |
132 | | - "inclusionTpsPeak": { "type": ["number", "null"] }, |
133 | 186 | "inclusionLatencyP50Ms": { "type": ["number", "null"] }, |
134 | 187 | "inclusionLatencyP95Ms": { "type": ["number", "null"] }, |
135 | 188 | "inclusionLatencyP99Ms": { "type": ["number", "null"] }, |
|
168 | 221 | "mempoolSizeRpc": { "$ref": "#/$defs/timeSeries" }, |
169 | 222 | "mempoolSizeValidator": { "$ref": "#/$defs/timeSeries" }, |
170 | 223 | "mempoolSizeFullNode": { "$ref": "#/$defs/timeSeries" }, |
| 224 | + "mempoolMinedMax": { "$ref": "#/$defs/timeSeries" }, |
171 | 225 | "mempoolEvictedByReasonRate": { "$ref": "#/$defs/timeSeries" }, |
172 | 226 | "mempoolRejectedByReasonRate": { "$ref": "#/$defs/timeSeries" }, |
173 | 227 | "blockBuildDurationP95": { "$ref": "#/$defs/timeSeries" }, |
|
181 | 235 | "l1InclusionDelayP95": { "$ref": "#/$defs/timeSeries" }, |
182 | 236 | "gossipLatencyP95": { "$ref": "#/$defs/timeSeries" }, |
183 | 237 | "peerCountMean": { "$ref": "#/$defs/timeSeries" }, |
184 | | - "attestationsCollectDurationP95": { "$ref": "#/$defs/timeSeries" }, |
| 238 | + "attestationsCollectDurationMean": { "$ref": "#/$defs/timeSeries" }, |
185 | 239 | "attestationsCollectAllowanceMean": { "$ref": "#/$defs/timeSeries" }, |
186 | 240 | "txCollectorTxsFromMempoolRate": { "$ref": "#/$defs/timeSeries" }, |
187 | 241 | "txCollectorTxsFromP2pRate": { "$ref": "#/$defs/timeSeries" }, |
|
203 | 257 | }, |
204 | 258 | "unit": { |
205 | 259 | "type": "string", |
206 | | - "examples": ["ms", "tps", "gas/s", "count"] |
| 260 | + "examples": ["ms", "tps", "mana/s", "count"] |
207 | 261 | }, |
208 | 262 | "source": { |
209 | 263 | "type": "string", |
|
231 | 285 | "labels": { |
232 | 286 | "type": "object", |
233 | 287 | "additionalProperties": { "type": "string" }, |
234 | | - "description": "Prometheus labels that disambiguate this series. Empty {} for single-series queries. Common keys: k8s_pod_name, aztec_gossip_topic_name, rejection_reason, sequencer_state." |
| 288 | + "description": "Prometheus labels that disambiguate this series. Empty {} for single-series queries. Common keys: k8s_pod_name, aztec_gossip_topic_name, rejection_reason, aztec_sequencer_state." |
235 | 289 | }, |
236 | 290 | "points": { |
237 | 291 | "type": "array", |
|
304 | 358 | "required": ["at", "type"], |
305 | 359 | "properties": { |
306 | 360 | "at": { "type": "string", "format": "date-time" }, |
307 | | - "type": { "type": "string", "const": "chainPruned" }, |
| 361 | + "type": { "type": "string", "enum": ["chainPruned", "slotSummary"] }, |
308 | 362 | "source": { "type": "string", "const": "log" }, |
309 | 363 | "fromBlock": { |
310 | 364 | "type": "integer", |
|
313 | 367 | "toBlock": { |
314 | 368 | "type": "integer", |
315 | 369 | "description": "For chainPruned: the post-prune tip." |
| 370 | + }, |
| 371 | + "slotNumber": { |
| 372 | + "type": "integer", |
| 373 | + "description": "For slotSummary: L2 slot number." |
| 374 | + }, |
| 375 | + "buildSlot": { |
| 376 | + "type": "integer", |
| 377 | + "description": "For slotSummary: wall-clock slot in which the checkpoint was built." |
| 378 | + }, |
| 379 | + "checkpointNumber": { "type": "integer" }, |
| 380 | + "sourcePod": { "type": "string" }, |
| 381 | + "proposer": { |
| 382 | + "type": "string", |
| 383 | + "description": "Validator/proposer address selected for this slot." |
| 384 | + }, |
| 385 | + "attestorAddress": { "type": "string" }, |
| 386 | + "publisherAddress": { "type": "string" }, |
| 387 | + "blocksBuilt": { "type": "number", "minimum": 0 }, |
| 388 | + "txCount": { "type": "number", "minimum": 0 }, |
| 389 | + "totalMana": { "type": "number", "minimum": 0 }, |
| 390 | + "blockBuildFailures": { |
| 391 | + "type": "array", |
| 392 | + "items": { "type": "object", "additionalProperties": true } |
| 393 | + }, |
| 394 | + "checkpointBuildFailure": { |
| 395 | + "type": "object", |
| 396 | + "additionalProperties": true |
| 397 | + }, |
| 398 | + "attestations": { |
| 399 | + "type": "object", |
| 400 | + "additionalProperties": true, |
| 401 | + "description": "For slotSummary: committee size, required/collected counts, and missing validator addresses when known." |
| 402 | + }, |
| 403 | + "publish": { |
| 404 | + "type": "object", |
| 405 | + "additionalProperties": true, |
| 406 | + "description": "For slotSummary: checkpoint publish status and L1 publisher action breakdown." |
| 407 | + } |
| 408 | + } |
| 409 | + }, |
| 410 | + |
| 411 | + "sequencerStateSlot": { |
| 412 | + "type": "object", |
| 413 | + "additionalProperties": false, |
| 414 | + "required": ["slotNumber", "startedAt", "endedAt", "totalMs", "states"], |
| 415 | + "properties": { |
| 416 | + "slotNumber": { |
| 417 | + "type": "integer", |
| 418 | + "description": "L2 slot number whose sequencer-state durations are represented." |
| 419 | + }, |
| 420 | + "startedAt": { |
| 421 | + "type": "string", |
| 422 | + "format": "date-time", |
| 423 | + "description": "Timestamp of the first parsed transition for this pod-slot." |
| 424 | + }, |
| 425 | + "endedAt": { |
| 426 | + "type": "string", |
| 427 | + "format": "date-time", |
| 428 | + "description": "Timestamp of the last parsed transition for this pod-slot." |
| 429 | + }, |
| 430 | + "sourcePod": { |
| 431 | + "type": "string", |
| 432 | + "description": "Validator pod whose transitions were selected for this slot. The scraper chooses the pod-slot with the strongest proposer-state signal." |
| 433 | + }, |
| 434 | + "totalMs": { |
| 435 | + "type": "number", |
| 436 | + "minimum": 0, |
| 437 | + "description": "Sum of all state durations in this slot record." |
| 438 | + }, |
| 439 | + "states": { |
| 440 | + "type": "object", |
| 441 | + "additionalProperties": { "type": "number", "minimum": 0 }, |
| 442 | + "description": "Map from SequencerState name to total milliseconds spent in that state during this slot." |
316 | 443 | } |
317 | 444 | } |
318 | 445 | } |
|
0 commit comments