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