1
- use cb_common:: constants:: COMMIT_BOOST_VERSION ;
1
+ use std:: time:: Duration ;
2
+
3
+ use cb_common:: {
4
+ constants:: COMMIT_BOOST_VERSION ,
5
+ pbs:: { BUILDER_API_PATH , GET_STATUS_PATH } ,
6
+ } ;
2
7
use cb_metrics:: provider:: MetricsProvider ;
3
- use eyre:: { Context , Result } ;
8
+ use eyre:: { bail , Context , Result } ;
4
9
use prometheus:: core:: Collector ;
5
10
use tokio:: net:: TcpListener ;
6
11
use tracing:: info;
12
+ use url:: Url ;
7
13
8
14
use crate :: {
9
15
api:: BuilderApi ,
@@ -16,15 +22,30 @@ pub struct PbsService;
16
22
17
23
impl PbsService {
18
24
pub async fn run < S : BuilderApiState , A : BuilderApi < S > > ( state : PbsState < S > ) -> Result < ( ) > {
19
- let address = state. config . endpoint ;
25
+ let addr = state. config . endpoint ;
20
26
let events_subs =
21
27
state. config . event_publisher . as_ref ( ) . map ( |e| e. n_subscribers ( ) ) . unwrap_or_default ( ) ;
22
- info ! ( version = COMMIT_BOOST_VERSION , ?address , events_subs, chain =? state. config. chain, "starting PBS service" ) ;
28
+ info ! ( version = COMMIT_BOOST_VERSION , ?addr , events_subs, chain =? state. config. chain, "starting PBS service" ) ;
23
29
24
30
let app = create_app_router :: < S , A > ( state) ;
25
- let listener = TcpListener :: bind ( address) . await ?;
31
+ let listener = TcpListener :: bind ( addr) . await ?;
32
+
33
+ let task =
34
+ tokio:: spawn (
35
+ async move { axum:: serve ( listener, app) . await . wrap_err ( "PBS server exited" ) } ,
36
+ ) ;
37
+
38
+ // wait for the server to start
39
+ tokio:: time:: sleep ( Duration :: from_millis ( 250 ) ) . await ;
40
+ let local_url =
41
+ Url :: parse ( & format ! ( "http://{}{}{}" , addr, BUILDER_API_PATH , GET_STATUS_PATH ) ) ?;
42
+
43
+ let status = reqwest:: get ( local_url) . await ?;
44
+ if !status. status ( ) . is_success ( ) {
45
+ bail ! ( "PBS server failed to start. Are the relays properly configured?" ) ;
46
+ }
26
47
27
- axum :: serve ( listener , app ) . await . wrap_err ( "PBS server exited" )
48
+ task . await ?
28
49
}
29
50
30
51
pub fn register_metric ( c : Box < dyn Collector > ) {
0 commit comments