@@ -32,8 +32,8 @@ type StdResult<T> = anyhow::Result<T>;
32
32
#[ command( version) ]
33
33
pub struct CliArguments {
34
34
/// 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 > ,
37
37
38
38
/// Verbose mode (-q, -v, -vv, -vvv, etc)
39
39
#[ arg( short, long, action = clap:: ArgAction :: Count ) ]
@@ -121,72 +121,8 @@ async fn main() -> StdResult<()> {
121
121
tracing_subscriber:: fmt ( )
122
122
. with_max_level ( params. get_verbosity_level ( ) )
123
123
. 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
- } ;
181
124
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 ;
190
126
191
127
match & result {
192
128
Err ( e) => error ! ( "{e}" ) ,
@@ -195,6 +131,83 @@ async fn main() -> StdResult<()> {
195
131
196
132
result
197
133
}
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
+ }
198
211
199
212
async fn set_json_app_header (
200
213
req : Request ,
0 commit comments