Skip to content

Commit d2083c0

Browse files
ghubertpaloDamien LACHAUME / PALO-IT
authored andcommitted
nest aggregator routes
1 parent c82bfa8 commit d2083c0

File tree

3 files changed

+45
-53
lines changed

3 files changed

+45
-53
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ members = [
77
"examples/client-mithril-stake-distribution",
88
"examples/client-snapshot",
99
"mithril-aggregator",
10+
"mithril-aggregator-fake",
1011
"mithril-client",
1112
"mithril-client-cli",
1213
"mithril-client-wasm",
1314
"mithril-common",
14-
"mithril-aggregator-fake",
1515
"mithril-relay",
1616
"mithril-signer",
1717
"mithril-stm",

mithril-aggregator-fake/src/application.rs

Lines changed: 6 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,11 @@
11
use std::future::IntoFuture;
22

33
use anyhow::{anyhow, Context};
4-
use axum::{
5-
middleware::{self},
6-
routing::{get, post},
7-
Router,
8-
};
4+
use axum::Router;
95
use futures::stream::StreamExt;
106
use signal_hook::consts::*;
117
use signal_hook_tokio::Signals;
12-
use tower_http::{
13-
cors::CorsLayer,
14-
trace::{DefaultMakeSpan, DefaultOnRequest, DefaultOnResponse, TraceLayer},
15-
LatencyUnit,
16-
};
17-
use tracing::{debug, info, trace, warn, Level};
8+
use tracing::{debug, info, trace, warn};
189

1910
use crate::shared_state::{AppState, SharedState};
2011
use crate::{handlers, CliArguments, StdResult};
@@ -72,45 +63,9 @@ impl Application {
7263
};
7364

7465
trace!("configuring router…");
75-
let app = Router::new()
76-
.route("/aggregator/epoch-settings", get(handlers::epoch_settings))
77-
.route("/aggregator/artifact/snapshots", get(handlers::snapshots))
78-
.route(
79-
"/aggregator/artifact/mithril-stake-distributions",
80-
get(handlers::msds),
81-
)
82-
.route(
83-
"/aggregator/artifact/mithril-stake-distribution/:digest",
84-
get(handlers::msd),
85-
)
86-
.route(
87-
"/aggregator/artifact/snapshot/:digest",
88-
get(handlers::snapshot),
89-
)
90-
.route("/aggregator/certificates", get(handlers::certificates))
91-
.route("/aggregator/certificate/:hash", get(handlers::certificate))
92-
.route(
93-
"/aggregator/statistics/snapshot",
94-
post(handlers::statistics),
95-
)
96-
.with_state(shared_state)
97-
.layer(CorsLayer::permissive())
98-
.layer(middleware::from_fn(handlers::set_json_app_header))
99-
.layer(
100-
TraceLayer::new_for_http()
101-
.make_span_with(
102-
DefaultMakeSpan::new()
103-
.include_headers(false)
104-
.level(Level::DEBUG),
105-
)
106-
.on_request(DefaultOnRequest::new().level(Level::DEBUG))
107-
.on_response(
108-
DefaultOnResponse::new()
109-
.level(Level::INFO)
110-
.include_headers(true)
111-
.latency_unit(LatencyUnit::Micros),
112-
),
113-
);
66+
let router = Router::new()
67+
.nest("/aggregator", handlers::aggregator_router().await)
68+
.with_state(shared_state);
11469
let listener = {
11570
let connection_string = format!("{}:{}", params.ip_address, params.tcp_port);
11671
debug!("binding on {connection_string}");
@@ -121,7 +76,7 @@ impl Application {
12176

12277
trace!("starting server…");
12378
let result = tokio::select!(
124-
res = axum::serve(listener, app).into_future() => res.map_err(|e| anyhow!(e)),
79+
res = axum::serve(listener, router).into_future() => res.map_err(|e| anyhow!(e)),
12580
_res = OsSignalHandler::handle_signal(signals) => Ok(()),
12681
);
12782

mithril-aggregator-fake/src/handlers.rs

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,50 @@ use axum::{
55
body::Body,
66
extract::{Path, Request, State},
77
http::{HeaderValue, Response, StatusCode},
8-
middleware::Next,
8+
middleware::{from_fn, Next},
99
response::IntoResponse,
10+
routing::{get, post},
11+
Router,
1012
};
13+
use tower_http::{
14+
cors::CorsLayer,
15+
trace::{DefaultMakeSpan, DefaultOnRequest, DefaultOnResponse, TraceLayer},
16+
LatencyUnit,
17+
};
18+
use tracing::Level;
1119

1220
use crate::shared_state::SharedState;
1321
use crate::AppError;
1422

23+
pub async fn aggregator_router() -> Router<SharedState> {
24+
Router::new()
25+
.route("/epoch-settings", get(epoch_settings))
26+
.route("/artifact/snapshots", get(snapshots))
27+
.route("/artifact/mithril-stake-distributions", get(msds))
28+
.route("/artifact/mithril-stake-distribution/:digest", get(msd))
29+
.route("/artifact/snapshot/:digest", get(snapshot))
30+
.route("/certificates", get(certificates))
31+
.route("/certificate/:hash", get(certificate))
32+
.route("/statistics/snapshot", post(statistics))
33+
.layer(CorsLayer::permissive())
34+
.layer(from_fn(set_json_app_header))
35+
.layer(
36+
TraceLayer::new_for_http()
37+
.make_span_with(
38+
DefaultMakeSpan::new()
39+
.include_headers(false)
40+
.level(Level::DEBUG),
41+
)
42+
.on_request(DefaultOnRequest::new().level(Level::DEBUG))
43+
.on_response(
44+
DefaultOnResponse::new()
45+
.level(Level::INFO)
46+
.include_headers(true)
47+
.latency_unit(LatencyUnit::Micros),
48+
),
49+
)
50+
}
51+
1552
/// HTTP: Return the Epoch Settings.
1653
pub async fn epoch_settings(State(state): State<SharedState>) -> Result<String, AppError> {
1754
let app_state = state.read().await;

0 commit comments

Comments
 (0)