1
- use anyhow:: { Result , Error } ;
2
- use futures_util:: future:: { OptionFuture , Future } ;
1
+ use anyhow:: Result ;
2
+ use futures_util:: future:: { Future , OptionFuture } ;
3
3
use futures_util:: stream:: Stream ;
4
- use futures_util:: { FutureExt , StreamExt , TryStreamExt } ;
4
+ use futures_util:: { FutureExt , StreamExt } ;
5
5
use hyper:: server:: conn:: Http ;
6
6
use metrics:: { metrics, metrics_wrapper} ;
7
7
use sqlx:: PgPool ;
8
8
use std:: sync:: Arc ;
9
- use tokio:: io:: { AsyncRead , AsyncWrite , Result as IoResult } ;
9
+ use tokio:: io:: { AsyncRead , AsyncWrite } ;
10
10
use tokio:: net:: TcpListener ;
11
- use tracing:: { info , error , info_span, Instrument } ;
11
+ use tracing:: { error , info , info_span, Instrument } ;
12
12
use warp:: { Filter , Rejection , Reply } ;
13
- use std:: error:: Error as StdError ;
14
13
15
14
use crate :: config:: Listener ;
15
+ use std:: fmt:: Display ;
16
16
17
17
mod metrics;
18
18
mod proxy;
@@ -24,31 +24,40 @@ where
24
24
I : Stream < Item = Result < S , E > > + Unpin + Send ,
25
25
S : Future < Output = Result < T , E > > + Send + ' static ,
26
26
T : AsyncRead + AsyncWrite + Send + Unpin + ' static ,
27
- E : Into < Error > ,
27
+ E : Display ,
28
28
R : Filter < Error = Rejection > + Clone + Send + ' static ,
29
29
R :: Extract : Reply ,
30
30
{
31
31
let service = warp:: service ( routes) ;
32
32
let http = Arc :: new ( Http :: new ( ) ) ;
33
33
34
34
loop {
35
- let span = info_span ! ( "test " ) ;
35
+ let span = info_span ! ( "TCP " ) ;
36
36
let conn = match io. next ( ) . instrument ( span. clone ( ) ) . await {
37
37
Some ( Ok ( conn) ) => conn,
38
- Some ( Err ( e ) ) => {
39
- span. in_scope ( || error ! ( "{}" , e ) ) ;
38
+ Some ( Err ( err ) ) => {
39
+ span. in_scope ( || error ! ( "{}" , err ) ) ;
40
40
continue ;
41
- } ,
41
+ }
42
42
None => break ,
43
43
} ;
44
44
45
45
let http = http. clone ( ) ;
46
46
let service = service. clone ( ) ;
47
47
48
- tokio:: spawn ( async move {
49
- let conn = conn. await . unwrap ( ) ;
50
- http. serve_connection ( conn, service) . await
51
- } . instrument ( span) ) ;
48
+ tokio:: spawn (
49
+ async move {
50
+ let conn = match conn. await {
51
+ Ok ( conn) => conn,
52
+ Err ( err) => {
53
+ error ! ( "{}" , err) ;
54
+ return ;
55
+ }
56
+ } ;
57
+ http. serve_connection ( conn, service) . await ;
58
+ }
59
+ . instrument ( span) ,
60
+ ) ;
52
61
}
53
62
}
54
63
@@ -68,18 +77,18 @@ pub async fn new(
68
77
69
78
let http = http
70
79
. map ( move |http| proxy:: wrap ( http, http_proxy) )
71
- . map ( |http| serve ( http, routes. clone ( ) ) )
80
+ . map ( |http| serve ( http, routes. clone ( ) ) . instrument ( info_span ! ( "HTTP" ) ) )
72
81
. map ( tokio:: spawn) ;
73
82
74
83
let prom = prom
75
84
. map ( move |prom| proxy:: wrap ( prom, prom_proxy) )
76
- . map ( |prom| serve ( prom, metrics ( ) ) )
85
+ . map ( |prom| serve ( prom, metrics ( ) ) . instrument ( info_span ! ( "PROM" ) ) )
77
86
. map ( tokio:: spawn) ;
78
87
79
88
let https = https
80
89
. map ( move |https| proxy:: wrap ( https, https_proxy) )
81
90
. map ( |https| tls:: wrap ( https, pool) )
82
- . map ( |https| serve ( https, routes) )
91
+ . map ( |https| serve ( https, routes) . instrument ( info_span ! ( "HTTPS" ) ) )
83
92
. map ( tokio:: spawn) ;
84
93
85
94
info ! ( "Starting API" ) ;
0 commit comments