Skip to content

Commit 1c3e746

Browse files
Add env to telemetry payload (#1225)
* add env to telemetry payload * add service version * Add test for telemetry application metadata
1 parent 52bd9a9 commit 1c3e746

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

data-pipeline/src/telemetry/mod.rs

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ use tokio::runtime::Handle;
2525
#[derive(Default)]
2626
pub struct TelemetryClientBuilder {
2727
service_name: Option<String>,
28+
service_version: Option<String>,
29+
env: Option<String>,
2830
language: Option<String>,
2931
language_version: Option<String>,
3032
tracer_version: Option<String>,
@@ -39,6 +41,18 @@ impl TelemetryClientBuilder {
3941
self
4042
}
4143

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+
4256
/// Sets the language name for the telemetry client
4357
pub fn set_language(mut self, lang: &str) -> Self {
4458
self.language = Some(lang.to_string());
@@ -97,6 +111,8 @@ impl TelemetryClientBuilder {
97111
builder.config = self.config;
98112
// Send only metrics and logs and drop lifecycle events
99113
builder.flavor = TelemetryWorkerFlavor::MetricsLogs;
114+
builder.application.env = self.env;
115+
builder.application.service_version = self.service_version;
100116

101117
if let Some(id) = self.runtime_id {
102118
builder.runtime_id = Some(id);
@@ -273,6 +289,8 @@ mod tests {
273289
async fn get_test_client(url: &str) -> TelemetryClient {
274290
let (client, mut worker) = TelemetryClientBuilder::default()
275291
.set_service_name("test_service")
292+
.set_service_version("test_version")
293+
.set_env("test_env")
276294
.set_language("test_language")
277295
.set_language_version("test_language_version")
278296
.set_tracer_version("test_tracer_version")
@@ -288,6 +306,8 @@ mod tests {
288306
fn builder_test() {
289307
let builder = TelemetryClientBuilder::default()
290308
.set_service_name("test_service")
309+
.set_service_version("test_version")
310+
.set_env("test_env")
291311
.set_language("test_language")
292312
.set_language_version("test_language_version")
293313
.set_tracer_version("test_tracer_version")
@@ -296,6 +316,8 @@ mod tests {
296316
.set_heartbeat(30);
297317

298318
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");
299321
assert_eq!(&builder.language.unwrap(), "test_language");
300322
assert_eq!(&builder.language_version.unwrap(), "test_language_version");
301323
assert_eq!(&builder.tracer_version.unwrap(), "test_tracer_version");
@@ -315,6 +337,8 @@ mod tests {
315337
async fn spawn_test() {
316338
let _ = TelemetryClientBuilder::default()
317339
.set_service_name("test_service")
340+
.set_service_version("test_version")
341+
.set_env("test_env")
318342
.set_language("test_language")
319343
.set_language_version("test_language_version")
320344
.set_tracer_version("test_tracer_version")
@@ -681,6 +705,49 @@ mod tests {
681705

682706
let (client, mut worker) = TelemetryClientBuilder::default()
683707
.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")
684751
.set_language("test_language")
685752
.set_language_version("test_language_version")
686753
.set_tracer_version("test_tracer_version")

data-pipeline/src/trace_exporter/builder.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,8 @@ impl TraceExporterBuilder {
273273
.set_language(&self.language)
274274
.set_language_version(&self.language_version)
275275
.set_service_name(&self.service)
276+
.set_service_version(&self.app_version)
277+
.set_env(&self.env)
276278
.set_tracer_version(&self.tracer_version)
277279
.set_heartbeat(telemetry_config.heartbeat)
278280
.set_url(base_url)

0 commit comments

Comments
 (0)