From d1ceef91c7945879c30958b942d58405ef7baf5e Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Fri, 11 Sep 2026 15:07:58 +0200 Subject: [PATCH 1/3] bench 261: read exec latency from ocb: recording rules (always-fresh, survives sparse runs) --- benchmarks/bridge-execution-latency.yml | 44 ++++++++++++------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/benchmarks/bridge-execution-latency.yml b/benchmarks/bridge-execution-latency.yml index 8fe4fc440..c51e77e9b 100644 --- a/benchmarks/bridge-execution-latency.yml +++ b/benchmarks/bridge-execution-latency.yml @@ -88,14 +88,14 @@ source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/bridge- metric_panels: - id: slippage label: Slippage vs quote - metric: avg by (bridge) (bridge_quote_slippage_usd{region="eu-west"}) + metric: avg by (bridge) (ocb:bridge_quote_slippage_usd:mean_24h{region="eu-west"}) label_key: bridge unit: usd higher_is_better: false description: "Realized fee minus quote-projected fee, in USD. The gap between what the quote promised and what actually settled." - id: gas label: All-in gas we paid - metric: avg by (bridge) (bridge_exec_gas_usd{region="eu-west"}) + metric: avg by (bridge) (ocb:bridge_exec_gas_usd:avg_24h{region="eu-west"}) label_key: bridge unit: usd higher_is_better: false @@ -111,49 +111,49 @@ providers: tag: Aggregator + intent layer formula: "p50 over 24h of on-chain execution latency (broadcast to funds received, ms) for real USDC-triangle transfers executed through Mobula from EU-West, at the selected ticket size and corridor." queries: - p50: avg(quantile_over_time(0.50, bridge_exec_latency_ms{bridge="mobula", region="eu-west"}[24h])) - p90: avg(quantile_over_time(0.90, bridge_exec_latency_ms{bridge="mobula", region="eu-west"}[24h])) - p99: avg(quantile_over_time(0.99, bridge_exec_latency_ms{bridge="mobula", region="eu-west"}[24h])) - mean: avg(avg_over_time(bridge_exec_latency_ms{bridge="mobula", region="eu-west"}[24h])) + p50: avg(ocb:bridge_exec_latency_ms:p50_24h{bridge="mobula", region="eu-west"}) + p90: avg(ocb:bridge_exec_latency_ms:p90_24h{bridge="mobula", region="eu-west"}) + p99: avg(ocb:bridge_exec_latency_ms:p99_24h{bridge="mobula", region="eu-west"}) + mean: avg(ocb:bridge_exec_latency_ms:mean_24h{bridge="mobula", region="eu-west"}) success: sum(increase(bridge_success_total{bridge="mobula", region="eu-west"}[24h])) / clamp_min(sum(increase(bridge_success_total{bridge="mobula", region="eu-west"}[24h])) + sum(increase(bridge_reverts_total{bridge="mobula", region="eu-west"}[24h])), 1) sample_size: sum(increase(bridge_success_total{bridge="mobula", region="eu-west"}[24h])) + sum(increase(bridge_reverts_total{bridge="mobula", region="eu-west"}[24h])) - series: avg_over_time(bridge_exec_latency_ms{bridge="mobula", region="eu-west"}[1h]) + series: ocb:bridge_exec_latency_ms:p50_24h{bridge="mobula", region="eu-west"} - slug: relay name: Relay tag: Cross-chain relay formula: "p50 over 24h of on-chain execution latency (broadcast to funds received, ms) for real USDC-triangle transfers executed through Relay from EU-West, at the selected ticket size and corridor." queries: - p50: avg(quantile_over_time(0.50, bridge_exec_latency_ms{bridge="relay", region="eu-west"}[24h])) - p90: avg(quantile_over_time(0.90, bridge_exec_latency_ms{bridge="relay", region="eu-west"}[24h])) - p99: avg(quantile_over_time(0.99, bridge_exec_latency_ms{bridge="relay", region="eu-west"}[24h])) - mean: avg(avg_over_time(bridge_exec_latency_ms{bridge="relay", region="eu-west"}[24h])) + p50: avg(ocb:bridge_exec_latency_ms:p50_24h{bridge="relay", region="eu-west"}) + p90: avg(ocb:bridge_exec_latency_ms:p90_24h{bridge="relay", region="eu-west"}) + p99: avg(ocb:bridge_exec_latency_ms:p99_24h{bridge="relay", region="eu-west"}) + mean: avg(ocb:bridge_exec_latency_ms:mean_24h{bridge="relay", region="eu-west"}) success: sum(increase(bridge_success_total{bridge="relay", region="eu-west"}[24h])) / clamp_min(sum(increase(bridge_success_total{bridge="relay", region="eu-west"}[24h])) + sum(increase(bridge_reverts_total{bridge="relay", region="eu-west"}[24h])), 1) sample_size: sum(increase(bridge_success_total{bridge="relay", region="eu-west"}[24h])) + sum(increase(bridge_reverts_total{bridge="relay", region="eu-west"}[24h])) - series: avg_over_time(bridge_exec_latency_ms{bridge="relay", region="eu-west"}[1h]) + series: ocb:bridge_exec_latency_ms:p50_24h{bridge="relay", region="eu-west"} - slug: lifi name: LI.FI tag: Aggregator formula: "p50 over 24h of on-chain execution latency (broadcast to funds received, ms) for real USDC-triangle transfers executed through LI.FI from EU-West, at the selected ticket size and corridor." queries: - p50: avg(quantile_over_time(0.50, bridge_exec_latency_ms{bridge="lifi", region="eu-west"}[24h])) - p90: avg(quantile_over_time(0.90, bridge_exec_latency_ms{bridge="lifi", region="eu-west"}[24h])) - p99: avg(quantile_over_time(0.99, bridge_exec_latency_ms{bridge="lifi", region="eu-west"}[24h])) - mean: avg(avg_over_time(bridge_exec_latency_ms{bridge="lifi", region="eu-west"}[24h])) + p50: avg(ocb:bridge_exec_latency_ms:p50_24h{bridge="lifi", region="eu-west"}) + p90: avg(ocb:bridge_exec_latency_ms:p90_24h{bridge="lifi", region="eu-west"}) + p99: avg(ocb:bridge_exec_latency_ms:p99_24h{bridge="lifi", region="eu-west"}) + mean: avg(ocb:bridge_exec_latency_ms:mean_24h{bridge="lifi", region="eu-west"}) success: sum(increase(bridge_success_total{bridge="lifi", region="eu-west"}[24h])) / clamp_min(sum(increase(bridge_success_total{bridge="lifi", region="eu-west"}[24h])) + sum(increase(bridge_reverts_total{bridge="lifi", region="eu-west"}[24h])), 1) sample_size: sum(increase(bridge_success_total{bridge="lifi", region="eu-west"}[24h])) + sum(increase(bridge_reverts_total{bridge="lifi", region="eu-west"}[24h])) - series: avg_over_time(bridge_exec_latency_ms{bridge="lifi", region="eu-west"}[1h]) + series: ocb:bridge_exec_latency_ms:p50_24h{bridge="lifi", region="eu-west"} - slug: near-intents name: Near Intents tag: Intent layer (NEAR) formula: "p50 over 24h of exact on-chain execution latency (broadcast to funds received, ms) for real USDC-triangle transfers executed through the Near Intents 1Click flow from EU-West, at the selected ticket size and corridor." queries: - p50: avg(quantile_over_time(0.50, bridge_exec_latency_ms{bridge="near-intents", region="eu-west"}[24h])) - p90: avg(quantile_over_time(0.90, bridge_exec_latency_ms{bridge="near-intents", region="eu-west"}[24h])) - p99: avg(quantile_over_time(0.99, bridge_exec_latency_ms{bridge="near-intents", region="eu-west"}[24h])) - mean: avg(avg_over_time(bridge_exec_latency_ms{bridge="near-intents", region="eu-west"}[24h])) + p50: avg(ocb:bridge_exec_latency_ms:p50_24h{bridge="near-intents", region="eu-west"}) + p90: avg(ocb:bridge_exec_latency_ms:p90_24h{bridge="near-intents", region="eu-west"}) + p99: avg(ocb:bridge_exec_latency_ms:p99_24h{bridge="near-intents", region="eu-west"}) + mean: avg(ocb:bridge_exec_latency_ms:mean_24h{bridge="near-intents", region="eu-west"}) success: sum(increase(bridge_success_total{bridge="near-intents", region="eu-west"}[24h])) / clamp_min(sum(increase(bridge_success_total{bridge="near-intents", region="eu-west"}[24h])) + sum(increase(bridge_reverts_total{bridge="near-intents", region="eu-west"}[24h])), 1) sample_size: sum(increase(bridge_success_total{bridge="near-intents", region="eu-west"}[24h])) + sum(increase(bridge_reverts_total{bridge="near-intents", region="eu-west"}[24h])) - series: avg_over_time(bridge_exec_latency_ms{bridge="near-intents", region="eu-west"}[1h]) + series: ocb:bridge_exec_latency_ms:p50_24h{bridge="near-intents", region="eu-west"} From d136fc6ff5c86374959cdee8b3ed96b82682360a Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Fri, 11 Sep 2026 15:07:58 +0200 Subject: [PATCH 2/3] bench 263: read slippage/gas/realized from ocb: recording rules --- benchmarks/bridge-realized-cost.yml | 44 ++++++++++++++--------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/benchmarks/bridge-realized-cost.yml b/benchmarks/bridge-realized-cost.yml index 85314d885..98baa909a 100644 --- a/benchmarks/bridge-realized-cost.yml +++ b/benchmarks/bridge-realized-cost.yml @@ -75,14 +75,14 @@ source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/bridge- metric_panels: - id: gas label: All-in gas we paid - metric: avg by (bridge) (bridge_exec_gas_usd{region="eu-west"}) + metric: avg by (bridge) (ocb:bridge_exec_gas_usd:avg_24h{region="eu-west"}) label_key: bridge unit: usd higher_is_better: false description: "Our own on-chain gas (approve plus deposit), measured as the source-chain native balance delta. The cost the user bears on top of the bridge fee." - id: realized label: Realized output on-chain - metric: avg by (bridge) (bridge_realized_output_usd{region="eu-west"}) + metric: avg by (bridge) (ocb:bridge_realized_output_usd:avg_24h{region="eu-west"}) label_key: bridge unit: usd higher_is_better: true @@ -99,12 +99,12 @@ providers: type: intent formula: "24h median of execution slippage vs quote (realized fee minus quote-projected fee, USD) on real executed USDC-triangle transfers through Mobula from EU-West, at the selected corridor and ticket size." queries: - p50: avg(quantile_over_time(0.50, bridge_quote_slippage_usd{bridge="mobula", region="eu-west"}[24h])) - p90: avg(quantile_over_time(0.90, bridge_quote_slippage_usd{bridge="mobula", region="eu-west"}[24h])) - p99: avg(quantile_over_time(0.99, bridge_quote_slippage_usd{bridge="mobula", region="eu-west"}[24h])) - mean: avg(avg_over_time(bridge_quote_slippage_usd{bridge="mobula", region="eu-west"}[24h])) + p50: avg(ocb:bridge_quote_slippage_usd:p50_24h{bridge="mobula", region="eu-west"}) + p90: avg(ocb:bridge_quote_slippage_usd:p90_24h{bridge="mobula", region="eu-west"}) + p99: avg(ocb:bridge_quote_slippage_usd:p99_24h{bridge="mobula", region="eu-west"}) + mean: avg(ocb:bridge_quote_slippage_usd:mean_24h{bridge="mobula", region="eu-west"}) sample_size: sum(count_over_time(bridge_quote_slippage_usd{bridge="mobula", region="eu-west"}[24h])) - series: avg_over_time(bridge_quote_slippage_usd{bridge="mobula", region="eu-west"}[1h]) + series: ocb:bridge_quote_slippage_usd:p50_24h{bridge="mobula", region="eu-west"} - slug: relay name: Relay @@ -112,12 +112,12 @@ providers: type: relay formula: "24h median of execution slippage vs quote (realized fee minus quote-projected fee, USD) on real executed USDC-triangle transfers through Relay from EU-West, at the selected corridor and ticket size." queries: - p50: avg(quantile_over_time(0.50, bridge_quote_slippage_usd{bridge="relay", region="eu-west"}[24h])) - p90: avg(quantile_over_time(0.90, bridge_quote_slippage_usd{bridge="relay", region="eu-west"}[24h])) - p99: avg(quantile_over_time(0.99, bridge_quote_slippage_usd{bridge="relay", region="eu-west"}[24h])) - mean: avg(avg_over_time(bridge_quote_slippage_usd{bridge="relay", region="eu-west"}[24h])) + p50: avg(ocb:bridge_quote_slippage_usd:p50_24h{bridge="relay", region="eu-west"}) + p90: avg(ocb:bridge_quote_slippage_usd:p90_24h{bridge="relay", region="eu-west"}) + p99: avg(ocb:bridge_quote_slippage_usd:p99_24h{bridge="relay", region="eu-west"}) + mean: avg(ocb:bridge_quote_slippage_usd:mean_24h{bridge="relay", region="eu-west"}) sample_size: sum(count_over_time(bridge_quote_slippage_usd{bridge="relay", region="eu-west"}[24h])) - series: avg_over_time(bridge_quote_slippage_usd{bridge="relay", region="eu-west"}[1h]) + series: ocb:bridge_quote_slippage_usd:p50_24h{bridge="relay", region="eu-west"} - slug: lifi name: LI.FI @@ -125,12 +125,12 @@ providers: type: aggregator formula: "24h median of execution slippage vs quote (realized fee minus quote-projected fee, USD) on real executed USDC-triangle transfers through LI.FI from EU-West, at the selected corridor and ticket size." queries: - p50: avg(quantile_over_time(0.50, bridge_quote_slippage_usd{bridge="lifi", region="eu-west"}[24h])) - p90: avg(quantile_over_time(0.90, bridge_quote_slippage_usd{bridge="lifi", region="eu-west"}[24h])) - p99: avg(quantile_over_time(0.99, bridge_quote_slippage_usd{bridge="lifi", region="eu-west"}[24h])) - mean: avg(avg_over_time(bridge_quote_slippage_usd{bridge="lifi", region="eu-west"}[24h])) + p50: avg(ocb:bridge_quote_slippage_usd:p50_24h{bridge="lifi", region="eu-west"}) + p90: avg(ocb:bridge_quote_slippage_usd:p90_24h{bridge="lifi", region="eu-west"}) + p99: avg(ocb:bridge_quote_slippage_usd:p99_24h{bridge="lifi", region="eu-west"}) + mean: avg(ocb:bridge_quote_slippage_usd:mean_24h{bridge="lifi", region="eu-west"}) sample_size: sum(count_over_time(bridge_quote_slippage_usd{bridge="lifi", region="eu-west"}[24h])) - series: avg_over_time(bridge_quote_slippage_usd{bridge="lifi", region="eu-west"}[1h]) + series: ocb:bridge_quote_slippage_usd:p50_24h{bridge="lifi", region="eu-west"} - slug: near-intents name: Near Intents @@ -138,9 +138,9 @@ providers: type: intent formula: "24h median of execution slippage vs quote (realized fee minus quote-projected fee, USD) on real executed USDC-triangle transfers through the Near Intents 1Click flow from EU-West, at the selected corridor and ticket size." queries: - p50: avg(quantile_over_time(0.50, bridge_quote_slippage_usd{bridge="near-intents", region="eu-west"}[24h])) - p90: avg(quantile_over_time(0.90, bridge_quote_slippage_usd{bridge="near-intents", region="eu-west"}[24h])) - p99: avg(quantile_over_time(0.99, bridge_quote_slippage_usd{bridge="near-intents", region="eu-west"}[24h])) - mean: avg(avg_over_time(bridge_quote_slippage_usd{bridge="near-intents", region="eu-west"}[24h])) + p50: avg(ocb:bridge_quote_slippage_usd:p50_24h{bridge="near-intents", region="eu-west"}) + p90: avg(ocb:bridge_quote_slippage_usd:p90_24h{bridge="near-intents", region="eu-west"}) + p99: avg(ocb:bridge_quote_slippage_usd:p99_24h{bridge="near-intents", region="eu-west"}) + mean: avg(ocb:bridge_quote_slippage_usd:mean_24h{bridge="near-intents", region="eu-west"}) sample_size: sum(count_over_time(bridge_quote_slippage_usd{bridge="near-intents", region="eu-west"}[24h])) - series: avg_over_time(bridge_quote_slippage_usd{bridge="near-intents", region="eu-west"}[1h]) + series: ocb:bridge_quote_slippage_usd:p50_24h{bridge="near-intents", region="eu-west"} From c96be144418f77f05a06a7eb78b1c5a7fa42921d Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Fri, 11 Sep 2026 15:08:20 +0200 Subject: [PATCH 3/3] infra: track bridge-execution recording rules (deployed to ocb-prom /opt/ocb/prom-rules) --- .../prometheus/ocb_bridge_execution.yml | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 infrastructure/monitoring/prometheus/ocb_bridge_execution.yml diff --git a/infrastructure/monitoring/prometheus/ocb_bridge_execution.yml b/infrastructure/monitoring/prometheus/ocb_bridge_execution.yml new file mode 100644 index 000000000..e4d000609 --- /dev/null +++ b/infrastructure/monitoring/prometheus/ocb_bridge_execution.yml @@ -0,0 +1,30 @@ +# Recording rules for the bridge EXECUTION benches (261 latency, 263 realized +# cost). These metrics come from real executions that run ~once/day, so the +# raw gauges go Prom-stale between runs and instant queries see nothing. Each +# rule re-evaluates the 24h window every 30s and emits a FRESH ocb: series, +# so the site always has a current value to render (standard OCB pattern; the +# labels are preserved so the chain / amount_usd / region tabs still filter). +groups: + - name: ocb_bridge_execution + interval: 30s + rules: + - record: ocb:bridge_exec_latency_ms:p50_24h + expr: quantile_over_time(0.50, bridge_exec_latency_ms[24h]) + - record: ocb:bridge_exec_latency_ms:p90_24h + expr: quantile_over_time(0.90, bridge_exec_latency_ms[24h]) + - record: ocb:bridge_exec_latency_ms:p99_24h + expr: quantile_over_time(0.99, bridge_exec_latency_ms[24h]) + - record: ocb:bridge_exec_latency_ms:mean_24h + expr: avg_over_time(bridge_exec_latency_ms[24h]) + - record: ocb:bridge_quote_slippage_usd:p50_24h + expr: quantile_over_time(0.50, bridge_quote_slippage_usd[24h]) + - record: ocb:bridge_quote_slippage_usd:p90_24h + expr: quantile_over_time(0.90, bridge_quote_slippage_usd[24h]) + - record: ocb:bridge_quote_slippage_usd:p99_24h + expr: quantile_over_time(0.99, bridge_quote_slippage_usd[24h]) + - record: ocb:bridge_quote_slippage_usd:mean_24h + expr: avg_over_time(bridge_quote_slippage_usd[24h]) + - record: ocb:bridge_exec_gas_usd:avg_24h + expr: avg_over_time(bridge_exec_gas_usd[24h]) + - record: ocb:bridge_realized_output_usd:avg_24h + expr: avg_over_time(bridge_realized_output_usd[24h])