Skip to content

Commit ecad03d

Browse files
authored
Merge pull request #2865 from input-output-hk/djo/2855/aggregator/better-signer-signature-metrics
feat: add "total successful" metrics for signature and signer registrations
2 parents ac2db70 + 3b3440c commit ecad03d

File tree

6 files changed

+308
-70
lines changed

6 files changed

+308
-70
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mithril-aggregator/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mithril-aggregator"
3-
version = "0.8.1"
3+
version = "0.8.2"
44
description = "A Mithril Aggregator server"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-aggregator/src/http_server/routes/signatures_routes.rs

Lines changed: 83 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,18 @@ mod handlers {
112112
Ok(reply::server_error(err))
113113
}
114114
},
115-
Ok(SignatureRegistrationStatus::Registered) => Ok(reply::empty(StatusCode::CREATED)),
116-
Ok(SignatureRegistrationStatus::Buffered) => Ok(reply::empty(StatusCode::ACCEPTED)),
115+
Ok(registration_status) => {
116+
metrics_service
117+
.get_signature_registration_total_successful_since_startup()
118+
.increment(&[METRICS_HTTP_ORIGIN]);
119+
120+
match registration_status {
121+
SignatureRegistrationStatus::Registered => {
122+
Ok(reply::empty(StatusCode::CREATED))
123+
}
124+
SignatureRegistrationStatus::Buffered => Ok(reply::empty(StatusCode::ACCEPTED)),
125+
}
126+
}
117127
}
118128
}
119129
}
@@ -127,6 +137,7 @@ mod tests {
127137
use warp::test::request;
128138

129139
use mithril_api_spec::APISpec;
140+
use mithril_common::test::mock_extensions::MockBuilder;
130141
use mithril_common::{
131142
entities::SignedEntityType, messages::RegisterSignatureMessageHttp, test::double::Dummy,
132143
};
@@ -150,15 +161,28 @@ mod tests {
150161
}
151162

152163
#[tokio::test]
153-
async fn test_register_signatures_increments_signature_registration_total_received_since_startup_metric()
164+
async fn test_register_signatures_increments_signature_registration_total_received_and_successful_since_startup_metric_if_successful()
154165
{
155166
let method = Method::POST.as_str();
156167
let path = "/register-signatures";
157-
let dependency_manager = Arc::new(initialize_dependencies!().await);
158-
let initial_counter_value = dependency_manager
168+
let dependency_manager = {
169+
let mut deps = initialize_dependencies!().await;
170+
deps.certifier_service = MockBuilder::<MockCertifierService>::configure(|mock| {
171+
mock.expect_register_single_signature()
172+
.returning(|_, _| Ok(SignatureRegistrationStatus::Registered));
173+
});
174+
deps.single_signer_authenticator =
175+
Arc::new(SingleSignatureAuthenticator::new_that_authenticate_everything());
176+
Arc::new(deps)
177+
};
178+
let initial_received_counter_value = dependency_manager
159179
.metrics_service
160180
.get_signature_registration_total_received_since_startup()
161181
.get(&["HTTP"]);
182+
let initial_successful_counter_value = dependency_manager
183+
.metrics_service
184+
.get_signature_registration_total_successful_since_startup()
185+
.get(&["HTTP"]);
162186

163187
request()
164188
.method(method)
@@ -170,12 +194,65 @@ mod tests {
170194
.await;
171195

172196
assert_eq!(
173-
initial_counter_value + 1,
197+
initial_received_counter_value + 1,
174198
dependency_manager
175199
.metrics_service
176200
.get_signature_registration_total_received_since_startup()
177201
.get(&["HTTP"])
178202
);
203+
assert_eq!(
204+
initial_successful_counter_value + 1,
205+
dependency_manager
206+
.metrics_service
207+
.get_signature_registration_total_successful_since_startup()
208+
.get(&["HTTP"])
209+
);
210+
}
211+
212+
#[tokio::test]
213+
async fn test_register_signatures_only_increments_signature_registration_total_received_since_startup_metric_if_failure()
214+
{
215+
let method = Method::POST.as_str();
216+
let path = "/register-signatures";
217+
let dependency_manager = {
218+
let mut deps = initialize_dependencies!().await;
219+
deps.single_signer_authenticator =
220+
Arc::new(SingleSignatureAuthenticator::new_that_reject_everything());
221+
Arc::new(deps)
222+
};
223+
224+
let initial_received_counter_value = dependency_manager
225+
.metrics_service
226+
.get_signature_registration_total_received_since_startup()
227+
.get(&["HTTP"]);
228+
let initial_successful_counter_value = dependency_manager
229+
.metrics_service
230+
.get_signature_registration_total_successful_since_startup()
231+
.get(&["HTTP"]);
232+
233+
request()
234+
.method(method)
235+
.path(path)
236+
.json(&RegisterSignatureMessageHttp::dummy())
237+
.reply(&setup_router(RouterState::new_with_dummy_config(
238+
dependency_manager.clone(),
239+
)))
240+
.await;
241+
242+
assert_eq!(
243+
initial_received_counter_value + 1,
244+
dependency_manager
245+
.metrics_service
246+
.get_signature_registration_total_received_since_startup()
247+
.get(&["HTTP"])
248+
);
249+
assert_eq!(
250+
initial_successful_counter_value,
251+
dependency_manager
252+
.metrics_service
253+
.get_signature_registration_total_successful_since_startup()
254+
.get(&["HTTP"])
255+
);
179256
}
180257

181258
#[tokio::test]

mithril-aggregator/src/http_server/routes/signer_routes.rs

Lines changed: 78 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ mod handlers {
139139
epoch_str.as_str(),
140140
));
141141

142+
metrics_service
143+
.get_signer_registration_total_successful_since_startup()
144+
.increment(&[origin_tag.as_deref().unwrap_or_default()]);
145+
142146
Ok(reply::empty(StatusCode::CREATED))
143147
}
144148
Err(SignerRegistrationError::ExistingSigner(signer_with_stake)) => {
@@ -271,6 +275,7 @@ mod tests {
271275
test::{
272276
builder::MithrilFixtureBuilder,
273277
double::{Dummy, fake_data},
278+
mock_extensions::MockBuilder,
274279
},
275280
};
276281

@@ -334,15 +339,77 @@ mod tests {
334339
}
335340

336341
#[tokio::test]
337-
async fn test_register_signer_post_increments_signer_registration_total_received_since_startup_metric()
342+
async fn test_register_signer_increments_signer_registration_total_received_and_successful_since_startup_metric_if_successful()
343+
{
344+
let method = Method::POST.as_str();
345+
let path = "/register-signer";
346+
let dependency_manager = {
347+
let mut deps = initialize_dependencies!().await;
348+
deps.signer_registerer = MockBuilder::<MockSignerRegisterer>::configure(|mock| {
349+
mock.expect_register_signer()
350+
.returning(|_, _| Ok(fake_data::signers_with_stakes(1).pop().unwrap()));
351+
});
352+
Arc::new(deps)
353+
};
354+
355+
let initial_received_counter_value = dependency_manager
356+
.metrics_service
357+
.get_signer_registration_total_received_since_startup()
358+
.get(&["TEST"]);
359+
let initial_successful_counter_value = dependency_manager
360+
.metrics_service
361+
.get_signer_registration_total_successful_since_startup()
362+
.get(&["HTTP"]);
363+
364+
request()
365+
.method(method)
366+
.path(path)
367+
.json(&RegisterSignerMessage::dummy())
368+
.header(MITHRIL_ORIGIN_TAG_HEADER, "TEST")
369+
.reply(&setup_router(RouterState::new_with_origin_tag_white_list(
370+
dependency_manager.clone(),
371+
&["TEST"],
372+
)))
373+
.await;
374+
375+
assert_eq!(
376+
initial_received_counter_value + 1,
377+
dependency_manager
378+
.metrics_service
379+
.get_signer_registration_total_received_since_startup()
380+
.get(&["TEST"])
381+
);
382+
assert_eq!(
383+
initial_successful_counter_value + 1,
384+
dependency_manager
385+
.metrics_service
386+
.get_signer_registration_total_successful_since_startup()
387+
.get(&["TEST"])
388+
);
389+
}
390+
391+
#[tokio::test]
392+
async fn test_register_signer_only_increments_signer_registration_total_received_since_startup_metric_if_failure()
338393
{
339394
let method = Method::POST.as_str();
340395
let path = "/register-signer";
341-
let dependency_manager = Arc::new(initialize_dependencies!().await);
342-
let initial_counter_value = dependency_manager
396+
let dependency_manager = {
397+
let mut deps = initialize_dependencies!().await;
398+
deps.signer_registerer = MockBuilder::<MockSignerRegisterer>::configure(|mock| {
399+
mock.expect_register_signer()
400+
.returning(|_, _| Err(SignerRegistrationError::RegistrationRoundNotYetOpened));
401+
});
402+
Arc::new(deps)
403+
};
404+
405+
let initial_received_counter_value = dependency_manager
343406
.metrics_service
344407
.get_signer_registration_total_received_since_startup()
345408
.get(&["TEST"]);
409+
let initial_successful_counter_value = dependency_manager
410+
.metrics_service
411+
.get_signer_registration_total_successful_since_startup()
412+
.get(&["HTTP"]);
346413

347414
request()
348415
.method(method)
@@ -356,12 +423,19 @@ mod tests {
356423
.await;
357424

358425
assert_eq!(
359-
initial_counter_value + 1,
426+
initial_received_counter_value + 1,
360427
dependency_manager
361428
.metrics_service
362429
.get_signer_registration_total_received_since_startup()
363430
.get(&["TEST"])
364431
);
432+
assert_eq!(
433+
initial_successful_counter_value,
434+
dependency_manager
435+
.metrics_service
436+
.get_signer_registration_total_successful_since_startup()
437+
.get(&["TEST"])
438+
);
365439
}
366440

367441
#[tokio::test]

mithril-aggregator/src/metrics/service.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,21 @@ build_metrics_service!(
8484
"Number of signer registrations received since startup on a Mithril aggregator node",
8585
&[SIGNER_REGISTRATION_ORIGIN_TAG_LABEL]
8686
),
87+
signer_registration_total_successful_since_startup:MetricCounterWithLabels(
88+
"mithril_aggregator_signer_registration_total_successful_since_startup",
89+
"Number of successful signer registrations received since startup on a Mithril aggregator node",
90+
&[SIGNER_REGISTRATION_ORIGIN_TAG_LABEL]
91+
),
8792
signature_registration_total_received_since_startup:MetricCounterWithLabels(
8893
"mithril_aggregator_signature_registration_total_received_since_startup",
8994
"Number of signature registrations received since startup on a Mithril aggregator node",
9095
&[SIGNER_SIGNATURE_ORIGIN_TAG_LABEL]
9196
),
97+
signature_registration_total_successful_since_startup:MetricCounterWithLabels(
98+
"mithril_aggregator_signature_registration_total_successful_since_startup",
99+
"Number of successful signature registrations received since startup on a Mithril aggregator node",
100+
&[SIGNER_SIGNATURE_ORIGIN_TAG_LABEL]
101+
),
92102
certificate_total_produced_since_startup:MetricCounter(
93103
"mithril_aggregator_certificate_total_produced_since_startup",
94104
"Number of certificates produced since startup on a Mithril aggregator node"

0 commit comments

Comments
 (0)