Home / IntersectMBO / cardano-node
May 09, 5-6 AM (0)
May 09, 6-7 AM (0)
May 09, 7-8 AM (0)
May 09, 8-9 AM (0)
May 09, 9-10 AM (0)
May 09, 10-11 AM (0)
May 09, 11-12 PM (0)
May 09, 12-1 PM (0)
May 09, 1-2 PM (0)
May 09, 2-3 PM (0)
May 09, 3-4 PM (0)
May 09, 4-5 PM (0)
May 09, 5-6 PM (0)
May 09, 6-7 PM (0)
May 09, 7-8 PM (0)
May 09, 8-9 PM (0)
May 09, 9-10 PM (0)
May 09, 10-11 PM (0)
May 09, 11-12 AM (1)
May 10, 12-1 AM (0)
May 10, 1-2 AM (0)
May 10, 2-3 AM (0)
May 10, 3-4 AM (0)
May 10, 4-5 AM (0)
May 10, 5-6 AM (0)
May 10, 6-7 AM (0)
May 10, 7-8 AM (0)
May 10, 8-9 AM (0)
May 10, 9-10 AM (0)
May 10, 10-11 AM (0)
May 10, 11-12 PM (0)
May 10, 12-1 PM (0)
May 10, 1-2 PM (0)
May 10, 2-3 PM (0)
May 10, 3-4 PM (0)
May 10, 4-5 PM (0)
May 10, 5-6 PM (0)
May 10, 6-7 PM (0)
May 10, 7-8 PM (0)
May 10, 8-9 PM (0)
May 10, 9-10 PM (0)
May 10, 10-11 PM (0)
May 10, 11-12 AM (0)
May 11, 12-1 AM (0)
May 11, 1-2 AM (0)
May 11, 2-3 AM (0)
May 11, 3-4 AM (0)
May 11, 4-5 AM (0)
May 11, 5-6 AM (0)
May 11, 6-7 AM (0)
May 11, 7-8 AM (2)
May 11, 8-9 AM (6)
May 11, 9-10 AM (2)
May 11, 10-11 AM (4)
May 11, 11-12 PM (12)
May 11, 12-1 PM (0)
May 11, 1-2 PM (4)
May 11, 2-3 PM (0)
May 11, 3-4 PM (0)
May 11, 4-5 PM (0)
May 11, 5-6 PM (0)
May 11, 6-7 PM (0)
May 11, 7-8 PM (0)
May 11, 8-9 PM (0)
May 11, 9-10 PM (4)
May 11, 10-11 PM (2)
May 11, 11-12 AM (1)
May 12, 12-1 AM (0)
May 12, 1-2 AM (0)
May 12, 2-3 AM (0)
May 12, 3-4 AM (0)
May 12, 4-5 AM (0)
May 12, 5-6 AM (0)
May 12, 6-7 AM (1)
May 12, 7-8 AM (1)
May 12, 8-9 AM (0)
May 12, 9-10 AM (0)
May 12, 10-11 AM (0)
May 12, 11-12 PM (1)
May 12, 12-1 PM (0)
May 12, 1-2 PM (3)
May 12, 2-3 PM (0)
May 12, 3-4 PM (0)
May 12, 4-5 PM (0)
May 12, 5-6 PM (0)
May 12, 6-7 PM (0)
May 12, 7-8 PM (0)
May 12, 8-9 PM (0)
May 12, 9-10 PM (0)
May 12, 10-11 PM (0)
May 12, 11-12 AM (0)
May 13, 12-1 AM (0)
May 13, 1-2 AM (0)
May 13, 2-3 AM (0)
May 13, 3-4 AM (0)
May 13, 4-5 AM (0)
May 13, 5-6 AM (0)
May 13, 6-7 AM (0)
May 13, 7-8 AM (0)
May 13, 8-9 AM (2)
May 13, 9-10 AM (0)
May 13, 10-11 AM (0)
May 13, 11-12 PM (0)
May 13, 12-1 PM (0)
May 13, 1-2 PM (0)
May 13, 2-3 PM (0)
May 13, 3-4 PM (0)
May 13, 4-5 PM (0)
May 13, 5-6 PM (0)
May 13, 6-7 PM (0)
May 13, 7-8 PM (0)
May 13, 8-9 PM (0)
May 13, 9-10 PM (0)
May 13, 10-11 PM (0)
May 13, 11-12 AM (0)
May 14, 12-1 AM (3)
May 14, 1-2 AM (0)
May 14, 2-3 AM (0)
May 14, 3-4 AM (0)
May 14, 4-5 AM (0)
May 14, 5-6 AM (0)
May 14, 6-7 AM (0)
May 14, 7-8 AM (0)
May 14, 8-9 AM (0)
May 14, 9-10 AM (0)
May 14, 10-11 AM (0)
May 14, 11-12 PM (0)
May 14, 12-1 PM (0)
May 14, 1-2 PM (0)
May 14, 2-3 PM (0)
May 14, 3-4 PM (0)
May 14, 4-5 PM (0)
May 14, 5-6 PM (0)
May 14, 6-7 PM (0)
May 14, 7-8 PM (0)
May 14, 8-9 PM (0)
May 14, 9-10 PM (0)
May 14, 10-11 PM (0)
May 14, 11-12 AM (0)
May 15, 12-1 AM (0)
May 15, 1-2 AM (0)
May 15, 2-3 AM (0)
May 15, 3-4 AM (0)
May 15, 4-5 AM (0)
May 15, 5-6 AM (0)
May 15, 6-7 AM (0)
May 15, 7-8 AM (0)
May 15, 8-9 AM (0)
May 15, 9-10 AM (0)
May 15, 10-11 AM (24)
May 15, 11-12 PM (2)
May 15, 12-1 PM (5)
May 15, 1-2 PM (2)
May 15, 2-3 PM (1)
May 15, 3-4 PM (1)
May 15, 4-5 PM (0)
May 15, 5-6 PM (1)
May 15, 6-7 PM (0)
May 15, 7-8 PM (0)
May 15, 8-9 PM (1)
May 15, 9-10 PM (0)
May 15, 10-11 PM (0)
May 15, 11-12 AM (0)
May 16, 12-1 AM (0)
May 16, 1-2 AM (0)
May 16, 2-3 AM (0)
May 16, 3-4 AM (0)
May 16, 4-5 AM (0)
May 16, 5-6 AM (0)
86 commits this week May 09, 2026 - May 16, 2026
cardano-timeseries-io, cardano-tracer: fix bugs and style issues from code review
- Elab.hs: fix copy-paste error in binary arithmetic op elab (rhs hole was
  unified against lhsTy instead of rhsTy); rename evalBinaryArithmethicOpElabProblem
  to evalBinaryArithmeticOpElabProblem (typo)
- Elab.hs: elaborate `metrics` as List Text (was Text); add Str elab case
- Elab/Typing.hs, Resolve.hs, Unify.hs: add List Ty to support metrics type
- Interp.hs: guard avg/min/max against empty instant vector; fix rate to
  error on single-point timeseries instead of dividing by zero
- Interp/Value.hs: use showFFloat in Show instance for Scalar to avoid
  scientific notation in JSON output
- TimeseriesServer.hs: fix minimumRetentionMillis units (seconds → ms);
  remove unused RecordWildCards pragma; align sleep delay with Monitoring.hs
- Acceptors/Utils.hs: align new imports with surrounding import block
cardano-timeseries-io, cardano-tracer: fix bugs and style issues from code review
- Elab.hs: fix copy-paste error in binary arithmetic op elab (rhs hole was
  unified against lhsTy instead of rhsTy); rename evalBinaryArithmethicOpElabProblem
  to evalBinaryArithmeticOpElabProblem (typo)
- Elab.hs: elaborate `metrics` as List Text (was Text); add Str elab case
- Elab/Typing.hs, Resolve.hs, Unify.hs: add List Ty to support metrics type
- Interp.hs: guard avg/min/max against empty instant vector; fix rate to
  error on single-point timeseries instead of dividing by zero
- Interp/Value.hs: use showFFloat in Show instance for Scalar to avoid
  scientific notation in JSON output
- TimeseriesServer.hs: fix minimumRetentionMillis units (seconds → ms);
  remove unused RecordWildCards pragma; align sleep delay with Monitoring.hs
- Acceptors/Utils.hs: align new imports with surrounding import block
grafana-datasource: add node info/startup/state/uptime query types and dashboard panels
New query types in the datasource plugin:
  nodes       — lists all connected node IDs (used by $node_id variable)
  node-info   — name, protocol, version, commit, start time, uptime
  node-startup — era, slot length, epoch length, KES period
  node-state  — sync progress %

New panels in rtview.json (all repeat by $node_id variable):
  Connected Nodes table, Node Info table, Startup table,
  Sync % stat, Uptime stat

metricFindQuery populates the $node_id query variable automatically
from /timeseries/nodes.

$__from/$__to in timeseries queries are pre-processed to valid
timestamp expressions before template variable expansion.
cardano-tracer: add node info/startup/state HTTP endpoints to timeseries server
New routes on the timeseries server:
  GET /timeseries/nodes                        — list connected node IDs
  GET /timeseries/node/{id}/info               — NodeInfo + uptimeSeconds
  GET /timeseries/node/{id}/startup            — NodeStartupInfo
  GET /timeseries/node/{id}/state  (RTVIEW)    — sync progress %

The server now receives TracerEnv instead of individual fields so it can
access teDPRequestors, teCurrentDPLock, and teConnectedNodes.

The /state endpoint uses data point key "NodeAddBlock" (the namespace
cardano-node actually stores the NodeState data point under) rather than
"NodeState", which was always empty.
ci-bench-timeseries: fix insufficient genesis funds for tx-generator
The ci-bench-timeseries profile has ~900M transactions (100 000 epochs ×
~9k txs/epoch) but inherited fundsDefault (10 000 ADA) from base, which
covers only a handful of transactions before the generator exits with
"insufficient funds".

Add fundsTimeseries (25 000 000 ADA = 25 × 10^15 lovelace) to Vocabulary
and a baseTimeseries variant of base that uses it. Switch ciTimeseries02Value
to baseTimeseries so the ci-bench-timeseries profile has enough genesis funds
to sustain a long-running workload.
timeseries: align HTTP API and JSON wire format with Prometheus
- JSON.hs: rename tag/value to resultType/result; use Prometheus
  resultType names (scalar, vector, matrix); encode timestamps and
  durations as Unix seconds (Double); encode data-point values as
  strings; rename labels->metric and data->values in Instant/Timeseries
- TimeseriesServer: parse query endpoint body as
  application/x-www-form-urlencoded (Prometheus wire format); add GET
  support alongside POST, sharing a single handleQuery helper
- grafana-datasource: update types, toDataFrames, and datasource to
  match new wire format; switch fetch to x-www-form-urlencoded
grafana-datasource: wire up Grafana time picker to query range
Replace hardcoded [now - 1h; now] in all 25 dashboard panels with
[$__from; $__to] so the Grafana time picker controls the window.

Pre-process $__from/$__to in the datasource plugin before getTemplateSrv()
sees them — Grafana treats these as built-in variables and ignores
scopedVars overrides — converting them to epoch + Nms expressions that
the query language interprets as absolute timestamps.
cardano-profile: replace ci-bench-timeseries with 6-dense-timeseries-1h
Remove the 2-node ci-bench-timeseries profile along with its dedicated
baseTimeseries and fundsTimeseries combinators (now dead code). Add
6-dense-timeseries-1h as a copy of 6-dense-1h with tracerTimeseries
enabled: 6 nodes, 1-hour duration, dense topology. The tracerTimeseries
combinator in Primitives.hs is retained. Regenerate all-profiles-coay.json.
timeseries: add three unambiguous noncanonical arithmetic rules
All three rules fire only when the known type information uniquely
determines the outcome:

  ? - Duration : ?  ->  Timestamp - Duration : Timestamp
    Only Timestamp - Duration exists with Duration on the Sub rhs.
    Enables: \x -> x - 1s  (infer x : Timestamp)

  ? + ? : Duration  ->  Duration + Duration : Duration
    Only Duration + Duration produces Duration.
    Enables: \x -> \y -> m [now; now : x + y]  (infer both : Duration)

  ? - ? : Timestamp  ->  Timestamp - Duration : Timestamp
    Only Timestamp - Duration produces Timestamp via Sub.
    Enables: \x -> \y -> m [x - y; x]  (infer x : Timestamp, y : Duration)

Ordering: A (? - Duration) before C (? - ? : Timestamp) so the more
specific rhsTy=Duration match takes priority. B (? + ? : Duration)
after the existing Duration + Duration : ? rule so the known-both-sides
case is tried first.
ci-bench-timeseries: reduce to 2-hour generator run (12 epochs)
100 000 epochs needed ~23B ADA in the generator wallet (split grows
exponentially with tx_count via unfoldSplitSequence) but genesis could
only supply 22.5B, causing an immediate "insufficient funds" crash.

12 epochs at 15 tps / timescaleCompressed = ~108 000 transactions = 2 hours.
The required split is now ~2.3M ADA, well within the 22.5B available.
bench | grafana-datasource: align query API with Prometheus conventions
- POST /timeseries/query now accepts JSON body {"query": "...", "time": <optional Unix seconds>}
- Success response wrapped in {"status":"success","data":...} envelope
- Error responses use {"status":"error","errorType":"...","error":"..."} format
- errorType mirrors Prometheus: "parse", "bad_data", "execution"
- Plugin updated to send application/json body and unwrap response envelope
- Remove ConfigEditor.tsx (Grafana's built-in URL field suffices)