cat_gateway/metrics/chain_follower/
mod.rs1use cardano_chain_follower::{Network, Statistics};
4
5use crate::settings::Settings;
6
7mod reporter;
8
9pub(crate) fn update() {
11 let api_host_names = Settings::api_host_names().join(",");
12 let service_id = Settings::service_id();
13 let network = Settings::cardano_network();
14
15 let follower_stats = Statistics::new(network);
16
17 report_mithril(&follower_stats, &api_host_names, service_id, network);
18 report_live(&follower_stats, &api_host_names, service_id, network);
19}
20
21#[allow(clippy::indexing_slicing)]
23fn report_mithril(
24 stats: &Statistics,
25 api_host_names: &str,
26 service_id: &str,
27 network: Network,
28) {
29 let stats = &stats.mithril;
30 let network = network.to_string();
31
32 reporter::MITHRIL_UPDATES
33 .with_label_values(&[api_host_names, service_id, &network])
34 .set(i64::try_from(stats.updates).unwrap_or(-1));
35 reporter::MITHRIL_TIP
36 .with_label_values(&[api_host_names, service_id, &network])
37 .set(i64::try_from(u64::from(stats.tip)).unwrap_or(-1));
38 reporter::MITHRIL_DL_START
39 .with_label_values(&[api_host_names, service_id, &network])
40 .set(stats.dl_start.timestamp());
41 reporter::MITHRIL_DL_END
42 .with_label_values(&[api_host_names, service_id, &network])
43 .set(stats.dl_end.timestamp());
44 reporter::MITHRIL_DL_FAILURES
45 .with_label_values(&[api_host_names, service_id, &network])
46 .set(i64::try_from(stats.dl_failures).unwrap_or(-1));
47 reporter::MITHRIL_LAST_DL_DURATION
48 .with_label_values(&[api_host_names, service_id, &network])
49 .set(i64::try_from(stats.last_dl_duration).unwrap_or(-1));
50 reporter::MITHRIL_DL_SIZE
51 .with_label_values(&[api_host_names, service_id, &network])
52 .set(i64::try_from(stats.dl_size).unwrap_or(-1));
53 reporter::MITHRIL_EXTRACT_START
54 .with_label_values(&[api_host_names, service_id, &network])
55 .set(stats.extract_start.timestamp());
56 reporter::MITHRIL_EXTRACT_END
57 .with_label_values(&[api_host_names, service_id, &network])
58 .set(stats.extract_end.timestamp());
59 reporter::MITHRIL_EXTRACT_FAILURES
60 .with_label_values(&[api_host_names, service_id, &network])
61 .set(i64::try_from(stats.extract_failures).unwrap_or(-1));
62 reporter::MITHRIL_EXTRACT_SIZE
63 .with_label_values(&[api_host_names, service_id, &network])
64 .set(i64::try_from(stats.extract_size).unwrap_or(-1));
65 reporter::MITHRIL_DEDUPLICATED_SIZE
66 .with_label_values(&[api_host_names, service_id, &network])
67 .set(i64::try_from(stats.deduplicated_size).unwrap_or(-1));
68 reporter::MITHRIL_DEDUPLICATED
69 .with_label_values(&[api_host_names, service_id, &network])
70 .set(i64::try_from(stats.deduplicated).unwrap_or(-1));
71 reporter::MITHRIL_CHANGED
72 .with_label_values(&[api_host_names, service_id, &network])
73 .set(i64::try_from(stats.changed).unwrap_or(-1));
74 reporter::MITHRIL_NEW
75 .with_label_values(&[api_host_names, service_id, &network])
76 .set(i64::try_from(stats.new).unwrap_or(-1));
77 reporter::MITHRIL_VALIDATE_START
78 .with_label_values(&[api_host_names, service_id, &network])
79 .set(stats.validate_start.timestamp());
80 reporter::MITHRIL_VALIDATE_END
81 .with_label_values(&[api_host_names, service_id, &network])
82 .set(stats.validate_end.timestamp());
83 reporter::MITHRIL_VALIDATE_FAILURES
84 .with_label_values(&[api_host_names, service_id, &network])
85 .set(i64::try_from(stats.validate_failures).unwrap_or(-1));
86 reporter::MITHRIL_INVALID_BLOCKS
87 .with_label_values(&[api_host_names, service_id, &network])
88 .set(i64::try_from(stats.invalid_blocks).unwrap_or(-1));
89 reporter::MITHRIL_DOWNLOAD_OR_VALIDATION_FAILED
90 .with_label_values(&[api_host_names, service_id, &network])
91 .set(i64::try_from(stats.download_or_validation_failed).unwrap_or(-1));
92 reporter::MITHRIL_FAILED_TO_GET_TIP
93 .with_label_values(&[api_host_names, service_id, &network])
94 .set(i64::try_from(stats.failed_to_get_tip).unwrap_or(-1));
95 reporter::MITHRIL_TIP_DID_NOT_ADVANCE
96 .with_label_values(&[api_host_names, service_id, &network])
97 .set(i64::try_from(stats.tip_did_not_advance).unwrap_or(-1));
98 reporter::MITHRIL_TIP_FAILED_TO_SEND_TO_UPDATER
99 .with_label_values(&[api_host_names, service_id, &network])
100 .set(i64::try_from(stats.tip_failed_to_send_to_updater).unwrap_or(-1));
101 reporter::MITHRIL_FAILED_TO_ACTIVATE_NEW_SNAPSHOT
102 .with_label_values(&[api_host_names, service_id, &network])
103 .set(i64::try_from(stats.failed_to_activate_new_snapshot).unwrap_or(-1));
104}
105
106#[allow(clippy::indexing_slicing)]
108fn report_live(
109 stats: &Statistics,
110 api_host_names: &str,
111 service_id: &str,
112 network: Network,
113) {
114 let stats = &stats.live;
115 let network = network.to_string();
116
117 reporter::LIVE_SYNC_START
118 .with_label_values(&[api_host_names, service_id, &network])
119 .set(stats.sync_start.timestamp());
120 reporter::LIVE_SYNC_END
121 .with_label_values(&[api_host_names, service_id, &network])
122 .set(stats.sync_end.map_or(0, |s| s.timestamp()));
123 reporter::LIVE_BACKFILL_START
124 .with_label_values(&[api_host_names, service_id, &network])
125 .set(stats.backfill_start.map_or(0, |s| s.timestamp()));
126 reporter::LIVE_BACKFILL_SIZE
127 .with_label_values(&[api_host_names, service_id, &network])
128 .set(i64::try_from(stats.backfill_size).unwrap_or(-1));
129 reporter::LIVE_BACKFILL_END
130 .with_label_values(&[api_host_names, service_id, &network])
131 .set(stats.backfill_end.map_or(0, |s| s.timestamp()));
132 reporter::LIVE_BACKFILL_FAILURES
133 .with_label_values(&[api_host_names, service_id, &network])
134 .set(i64::try_from(stats.backfill_failures).unwrap_or(-1));
135 reporter::LIVE_BACKFILL_FAILURE_TIME
136 .with_label_values(&[api_host_names, service_id, &network])
137 .set(stats.backfill_failure_time.map_or(0, |s| s.timestamp()));
138 reporter::LIVE_BLOCKS
139 .with_label_values(&[api_host_names, service_id, &network])
140 .set(i64::try_from(stats.blocks).unwrap_or(-1));
141 reporter::LIVE_HEAD_SLOT
142 .with_label_values(&[api_host_names, service_id, &network])
143 .set(i64::try_from(u64::from(stats.head_slot)).unwrap_or(-1));
144 reporter::LIVE_TIP
145 .with_label_values(&[api_host_names, service_id, &network])
146 .set(i64::try_from(u64::from(stats.tip)).unwrap_or(-1));
147 reporter::LIVE_RECONNECTS
148 .with_label_values(&[api_host_names, service_id, &network])
149 .set(i64::try_from(stats.reconnects).unwrap_or(-1));
150 reporter::LIVE_LAST_CONNECT
151 .with_label_values(&[api_host_names, service_id, &network])
152 .set(stats.last_connect.timestamp());
153 reporter::LIVE_LAST_DISCONNECT
154 .with_label_values(&[api_host_names, service_id, &network])
155 .set(stats.last_disconnect.timestamp());
156 reporter::LIVE_CONNECTED
157 .with_label_values(&[api_host_names, service_id, &network])
158 .set(i64::from(stats.connected));
159 reporter::LIVE_ROLLBACKS_LIVE_COUNT
160 .with_label_values(&[api_host_names, service_id, &network])
161 .set(i64::try_from(stats.rollbacks.live.len()).unwrap_or(-1));
162 reporter::LIVE_ROLLBACKS_PEER_COUNT
163 .with_label_values(&[api_host_names, service_id, &network])
164 .set(i64::try_from(stats.rollbacks.peer.len()).unwrap_or(-1));
165 reporter::LIVE_ROLLBACKS_FOLLOWER_COUNT
166 .with_label_values(&[api_host_names, service_id, &network])
167 .set(i64::try_from(stats.rollbacks.follower.len()).unwrap_or(-1));
168 reporter::LIVE_NEW_BLOCKS
169 .with_label_values(&[api_host_names, service_id, &network])
170 .set(i64::try_from(stats.new_blocks).unwrap_or(-1));
171 reporter::LIVE_INVALID_BLOCKS
172 .with_label_values(&[api_host_names, service_id, &network])
173 .set(i64::try_from(stats.invalid_blocks).unwrap_or(-1));
174 reporter::LIVE_FOLLOWER_COUNT
175 .with_label_values(&[api_host_names, service_id, &network])
176 .set(i64::try_from(stats.follower.len()).unwrap_or(-1));
177}