@@ -30,13 +30,18 @@ use client::user::UserCommand;
30
30
use client:: Client ;
31
31
use client:: Color ;
32
32
use client:: Commands ;
33
+ use client:: TelemetryConfig ;
33
34
use editoast_models:: DbConnectionPoolV2 ;
34
35
use models:: RollingStockModel ;
35
36
use opentelemetry:: trace:: TracerProvider as _;
37
+ use opentelemetry_sdk:: export:: trace:: SpanExporter ;
36
38
use opentelemetry_sdk:: propagation:: TraceContextPropagator ;
37
39
use opentelemetry_sdk:: resource:: EnvResourceDetector ;
38
40
use opentelemetry_sdk:: resource:: SdkProvidedResourceDetector ;
39
41
use opentelemetry_sdk:: resource:: TelemetryResourceDetector ;
42
+ use tracing_subscriber:: layer:: SubscriberExt ;
43
+ use tracing_subscriber:: util:: SubscriberInitExt ;
44
+ use tracing_subscriber:: Layer ;
40
45
pub use views:: AppState ;
41
46
42
47
use models:: prelude:: * ;
@@ -50,9 +55,6 @@ use std::sync::Arc;
50
55
use std:: time:: Duration ;
51
56
use thiserror:: Error ;
52
57
use tracing:: error;
53
- use tracing_subscriber:: layer:: SubscriberExt as _;
54
- use tracing_subscriber:: util:: SubscriberInitExt as _;
55
- use tracing_subscriber:: Layer as _;
56
58
pub use valkey_utils:: ValkeyClient ;
57
59
pub use valkey_utils:: ValkeyConnection ;
58
60
@@ -66,12 +68,23 @@ pub use valkey_utils::ValkeyConnection;
66
68
/// - we *expect* a webserver to output logging information, so since it's an expected
67
69
/// output (and not extra information), it should be on stdout
68
70
#[ derive( Debug , PartialEq ) ]
69
- enum EditoastMode {
71
+ pub enum EditoastMode {
70
72
Webservice ,
71
73
Cli ,
72
74
}
73
75
74
- fn init_tracing ( mode : EditoastMode , telemetry_config : & client:: TelemetryConfig ) {
76
+ #[ cfg( test) ]
77
+ impl From < views:: test_app:: WebserviceMode > for EditoastMode {
78
+ fn from ( _value : views:: test_app:: WebserviceMode ) -> Self {
79
+ Self :: Webservice
80
+ }
81
+ }
82
+
83
+ pub fn create_tracing_subscriber < T : SpanExporter + ' static > (
84
+ mode : EditoastMode ,
85
+ telemetry_config : TelemetryConfig ,
86
+ exporter : T ,
87
+ ) -> impl tracing:: Subscriber {
75
88
let env_filter_layer = tracing_subscriber:: EnvFilter :: builder ( )
76
89
// Set the default log level to 'info'
77
90
. with_default_directive ( tracing_subscriber:: filter:: LevelFilter :: INFO . into ( ) )
@@ -89,11 +102,6 @@ fn init_tracing(mode: EditoastMode, telemetry_config: &client::TelemetryConfig)
89
102
let telemetry_layer = match telemetry_config. telemetry_kind {
90
103
client:: TelemetryKind :: None => None ,
91
104
client:: TelemetryKind :: Opentelemetry => {
92
- let exporter = opentelemetry_otlp:: SpanExporter :: builder ( )
93
- . with_tonic ( )
94
- . with_endpoint ( telemetry_config. telemetry_endpoint . as_str ( ) )
95
- . build ( )
96
- . expect ( "failed to build a span exporter" ) ;
97
105
let resource = Resource :: new ( vec ! [ KeyValue :: new(
98
106
opentelemetry_semantic_conventions:: resource:: SERVICE_NAME ,
99
107
telemetry_config. service_name. clone( ) ,
@@ -116,11 +124,11 @@ fn init_tracing(mode: EditoastMode, telemetry_config: &client::TelemetryConfig)
116
124
Some ( layer)
117
125
}
118
126
} ;
127
+
119
128
tracing_subscriber:: registry ( )
120
129
. with ( telemetry_layer)
121
130
. with ( env_filter_layer)
122
131
. with ( fmt_layer)
123
- . init ( ) ;
124
132
}
125
133
126
134
impl EditoastMode {
@@ -151,7 +159,17 @@ async fn main() {
151
159
152
160
async fn run ( ) -> Result < ( ) , Box < dyn Error + Send + Sync > > {
153
161
let client = Client :: parse ( ) ;
154
- init_tracing ( EditoastMode :: from_client ( & client) , & client. telemetry_config ) ;
162
+ let exporter = opentelemetry_otlp:: SpanExporter :: builder ( )
163
+ . with_tonic ( )
164
+ . with_endpoint ( client. telemetry_config . telemetry_endpoint . as_str ( ) )
165
+ . build ( )
166
+ . expect ( "failed to build a span exporter" ) ;
167
+ create_tracing_subscriber (
168
+ EditoastMode :: from_client ( & client) ,
169
+ client. telemetry_config ,
170
+ exporter,
171
+ )
172
+ . init ( ) ;
155
173
156
174
let pg_config = client. postgres_config ;
157
175
let db_pool =
0 commit comments