@@ -25,6 +25,8 @@ use tokio::runtime::Handle;
25
25
#[ derive( Default ) ]
26
26
pub struct TelemetryClientBuilder {
27
27
service_name : Option < String > ,
28
+ service_version : Option < String > ,
29
+ env : Option < String > ,
28
30
language : Option < String > ,
29
31
language_version : Option < String > ,
30
32
tracer_version : Option < String > ,
@@ -39,6 +41,18 @@ impl TelemetryClientBuilder {
39
41
self
40
42
}
41
43
44
+ /// Sets the service version for the telemetry client
45
+ pub fn set_service_version ( mut self , version : & str ) -> Self {
46
+ self . service_version = Some ( version. to_string ( ) ) ;
47
+ self
48
+ }
49
+
50
+ /// Sets the env name for the telemetry client
51
+ pub fn set_env ( mut self , name : & str ) -> Self {
52
+ self . env = Some ( name. to_string ( ) ) ;
53
+ self
54
+ }
55
+
42
56
/// Sets the language name for the telemetry client
43
57
pub fn set_language ( mut self , lang : & str ) -> Self {
44
58
self . language = Some ( lang. to_string ( ) ) ;
@@ -97,6 +111,8 @@ impl TelemetryClientBuilder {
97
111
builder. config = self . config ;
98
112
// Send only metrics and logs and drop lifecycle events
99
113
builder. flavor = TelemetryWorkerFlavor :: MetricsLogs ;
114
+ builder. application . env = self . env ;
115
+ builder. application . service_version = self . service_version ;
100
116
101
117
if let Some ( id) = self . runtime_id {
102
118
builder. runtime_id = Some ( id) ;
@@ -273,6 +289,8 @@ mod tests {
273
289
async fn get_test_client ( url : & str ) -> TelemetryClient {
274
290
let ( client, mut worker) = TelemetryClientBuilder :: default ( )
275
291
. set_service_name ( "test_service" )
292
+ . set_service_version ( "test_version" )
293
+ . set_env ( "test_env" )
276
294
. set_language ( "test_language" )
277
295
. set_language_version ( "test_language_version" )
278
296
. set_tracer_version ( "test_tracer_version" )
@@ -288,6 +306,8 @@ mod tests {
288
306
fn builder_test ( ) {
289
307
let builder = TelemetryClientBuilder :: default ( )
290
308
. set_service_name ( "test_service" )
309
+ . set_service_version ( "test_version" )
310
+ . set_env ( "test_env" )
291
311
. set_language ( "test_language" )
292
312
. set_language_version ( "test_language_version" )
293
313
. set_tracer_version ( "test_tracer_version" )
@@ -296,6 +316,8 @@ mod tests {
296
316
. set_heartbeat ( 30 ) ;
297
317
298
318
assert_eq ! ( & builder. service_name. unwrap( ) , "test_service" ) ;
319
+ assert_eq ! ( & builder. service_version. unwrap( ) , "test_version" ) ;
320
+ assert_eq ! ( & builder. env. unwrap( ) , "test_env" ) ;
299
321
assert_eq ! ( & builder. language. unwrap( ) , "test_language" ) ;
300
322
assert_eq ! ( & builder. language_version. unwrap( ) , "test_language_version" ) ;
301
323
assert_eq ! ( & builder. tracer_version. unwrap( ) , "test_tracer_version" ) ;
@@ -315,6 +337,8 @@ mod tests {
315
337
async fn spawn_test ( ) {
316
338
let _ = TelemetryClientBuilder :: default ( )
317
339
. set_service_name ( "test_service" )
340
+ . set_service_version ( "test_version" )
341
+ . set_env ( "test_env" )
318
342
. set_language ( "test_language" )
319
343
. set_language_version ( "test_language_version" )
320
344
. set_tracer_version ( "test_tracer_version" )
@@ -681,6 +705,49 @@ mod tests {
681
705
682
706
let ( client, mut worker) = TelemetryClientBuilder :: default ( )
683
707
. set_service_name ( "test_service" )
708
+ . set_service_version ( "test_version" )
709
+ . set_env ( "test_env" )
710
+ . set_language ( "test_language" )
711
+ . set_language_version ( "test_language_version" )
712
+ . set_tracer_version ( "test_tracer_version" )
713
+ . set_url ( & server. url ( "/" ) )
714
+ . set_heartbeat ( 100 )
715
+ . set_runtime_id ( "foo" )
716
+ . build ( Handle :: current ( ) ) ;
717
+ tokio:: spawn ( async move { worker. run ( ) . await } ) ;
718
+
719
+ client. start ( ) . await ;
720
+ client
721
+ . send ( & SendPayloadTelemetry {
722
+ requests_count : 1 ,
723
+ ..Default :: default ( )
724
+ } )
725
+ . unwrap ( ) ;
726
+ client. shutdown ( ) . await ;
727
+ while telemetry_srv. hits_async ( ) . await == 0 {
728
+ sleep ( Duration :: from_millis ( 10 ) ) . await ;
729
+ }
730
+ // One payload generate-metrics
731
+ telemetry_srv. assert_hits_async ( 1 ) . await ;
732
+ }
733
+
734
+ #[ cfg_attr( miri, ignore) ]
735
+ #[ tokio:: test]
736
+ async fn application_metadata_test ( ) {
737
+ let server = MockServer :: start_async ( ) . await ;
738
+
739
+ let telemetry_srv = server
740
+ . mock_async ( |when, then| {
741
+ when. method ( POST )
742
+ . body_contains ( r#""application":{"service_name":"test_service","service_version":"test_version","env":"test_env","language_name":"test_language","language_version":"test_language_version","tracer_version":"test_tracer_version"}"# ) ;
743
+ then. status ( 200 ) . body ( "" ) ;
744
+ } )
745
+ . await ;
746
+
747
+ let ( client, mut worker) = TelemetryClientBuilder :: default ( )
748
+ . set_service_name ( "test_service" )
749
+ . set_service_version ( "test_version" )
750
+ . set_env ( "test_env" )
684
751
. set_language ( "test_language" )
685
752
. set_language_version ( "test_language_version" )
686
753
. set_tracer_version ( "test_tracer_version" )
0 commit comments