Skip to content

Commit 139295f

Browse files
ghubertpaloDamien LACHAUME / PALO-IT
authored andcommitted
add default data
1 parent ff7eb0c commit 139295f

File tree

2 files changed

+1368
-196
lines changed

2 files changed

+1368
-196
lines changed

mithril-fake-aggregator/src/main.rs

Lines changed: 80 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ type StdResult<T> = anyhow::Result<T>;
3232
#[command(version)]
3333
pub struct CliArguments {
3434
/// Directory where the response files are located.
35-
#[arg(short, long, default_value = "data")]
36-
data_directory: PathBuf,
35+
#[arg(short, long)]
36+
data_directory: Option<PathBuf>,
3737

3838
/// Verbose mode (-q, -v, -vv, -vvv, etc)
3939
#[arg(short, long, action = clap::ArgAction::Count)]
@@ -121,72 +121,8 @@ async fn main() -> StdResult<()> {
121121
tracing_subscriber::fmt()
122122
.with_max_level(params.get_verbosity_level())
123123
.init();
124-
info!(
125-
"starting Fake Aggregator version {}",
126-
env!("CARGO_PKG_VERSION")
127-
);
128-
129-
trace!("setting up signal hook…");
130-
// supported signals
131-
let signals = Signals::new(&[SIGTERM, SIGINT, SIGQUIT])?;
132-
133-
// launch signal detector
134-
let signal_handler = signals.handle();
135-
136-
trace!("setting up shared state…");
137-
let shared_state: SharedState = AppState::default().into();
138-
139-
trace!("configuring router…");
140-
let app = Router::new()
141-
.route("/aggregator/epoch-settings", get(handlers::epoch_settings))
142-
.route("/aggregator/artifact/snapshots", get(handlers::snapshots))
143-
.route(
144-
"/aggregator/artifact/mithril-stake-distributions",
145-
get(handlers::msds),
146-
)
147-
.route(
148-
"/aggregator/artifact/mithril-stake-distribution/:digest",
149-
get(handlers::msd),
150-
)
151-
.route(
152-
"/aggregator/artifact/snapshot/:digest",
153-
get(handlers::snapshot),
154-
)
155-
.route("/aggregator/certificates", get(handlers::certificates))
156-
.route("/aggregator/certificate/:hash", get(handlers::certificate))
157-
.with_state(shared_state.clone())
158-
.layer(middleware::from_fn(set_json_app_header))
159-
.layer(
160-
TraceLayer::new_for_http()
161-
.make_span_with(
162-
DefaultMakeSpan::new()
163-
.include_headers(true)
164-
.level(Level::DEBUG),
165-
)
166-
.on_request(DefaultOnRequest::new().level(Level::DEBUG))
167-
.on_response(
168-
DefaultOnResponse::new()
169-
.level(Level::INFO)
170-
.include_headers(true)
171-
.latency_unit(LatencyUnit::Micros),
172-
),
173-
);
174-
let listener = {
175-
let connection_string = format!("{}:{}", params.ip_address, params.tcp_port);
176-
debug!("binding on {connection_string}");
177-
tokio::net::TcpListener::bind(&connection_string)
178-
.await
179-
.with_context(|| format!("Could not listen on '{}'.", connection_string))?
180-
};
181124

182-
trace!("starting server…");
183-
let result = tokio::select!(
184-
res = axum::serve(listener, app).into_future() => res.map_err(|e| anyhow!(e)),
185-
_res = OsSignalHandler::handle_signal(signals) => Ok(()),
186-
);
187-
188-
trace!("closing signal handler…");
189-
signal_handler.close();
125+
let result = Application::run(params).await;
190126

191127
match &result {
192128
Err(e) => error!("{e}"),
@@ -195,6 +131,83 @@ async fn main() -> StdResult<()> {
195131

196132
result
197133
}
134+
struct Application;
135+
136+
impl Application {
137+
pub async fn run(params: CliArguments) -> StdResult<()> {
138+
info!(
139+
"starting Fake Aggregator version {}",
140+
env!("CARGO_PKG_VERSION")
141+
);
142+
143+
trace!("setting up signal hook…");
144+
// supported signals
145+
let signals = Signals::new(&[SIGTERM, SIGINT, SIGQUIT])?;
146+
147+
// launch signal detector
148+
let signal_handler = signals.handle();
149+
150+
trace!("setting up shared state…");
151+
let shared_state: SharedState = match params.data_directory {
152+
Some(directory) => AppState::from_directory(&directory)?.into(),
153+
None => AppState::default().into(),
154+
};
155+
156+
trace!("configuring router…");
157+
let app = Router::new()
158+
.route("/aggregator/epoch-settings", get(handlers::epoch_settings))
159+
.route("/aggregator/artifact/snapshots", get(handlers::snapshots))
160+
.route(
161+
"/aggregator/artifact/mithril-stake-distributions",
162+
get(handlers::msds),
163+
)
164+
.route(
165+
"/aggregator/artifact/mithril-stake-distribution/:digest",
166+
get(handlers::msd),
167+
)
168+
.route(
169+
"/aggregator/artifact/snapshot/:digest",
170+
get(handlers::snapshot),
171+
)
172+
.route("/aggregator/certificates", get(handlers::certificates))
173+
.route("/aggregator/certificate/:hash", get(handlers::certificate))
174+
.with_state(shared_state.clone())
175+
.layer(middleware::from_fn(set_json_app_header))
176+
.layer(
177+
TraceLayer::new_for_http()
178+
.make_span_with(
179+
DefaultMakeSpan::new()
180+
.include_headers(true)
181+
.level(Level::DEBUG),
182+
)
183+
.on_request(DefaultOnRequest::new().level(Level::DEBUG))
184+
.on_response(
185+
DefaultOnResponse::new()
186+
.level(Level::INFO)
187+
.include_headers(true)
188+
.latency_unit(LatencyUnit::Micros),
189+
),
190+
);
191+
let listener = {
192+
let connection_string = format!("{}:{}", params.ip_address, params.tcp_port);
193+
debug!("binding on {connection_string}");
194+
tokio::net::TcpListener::bind(&connection_string)
195+
.await
196+
.with_context(|| format!("Could not listen on '{}'.", connection_string))?
197+
};
198+
199+
trace!("starting server…");
200+
let result = tokio::select!(
201+
res = axum::serve(listener, app).into_future() => res.map_err(|e| anyhow!(e)),
202+
_res = OsSignalHandler::handle_signal(signals) => Ok(()),
203+
);
204+
205+
trace!("closing signal handler…");
206+
signal_handler.close();
207+
208+
result
209+
}
210+
}
198211

199212
async fn set_json_app_header(
200213
req: Request,

0 commit comments

Comments
 (0)