From 6d8f830723f85b9cc657e9c24e15408da40c1531 Mon Sep 17 00:00:00 2001 From: Ramajeyam Gopalraj Date: Sun, 26 May 2024 23:51:30 -0400 Subject: [PATCH 1/9] fix event attribute --- opentelemetry-otlp/examples/basic-otlp-http/Cargo.toml | 2 +- opentelemetry-otlp/examples/basic-otlp-http/src/main.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/opentelemetry-otlp/examples/basic-otlp-http/Cargo.toml b/opentelemetry-otlp/examples/basic-otlp-http/Cargo.toml index 2c5e2d69cf..89c1e2d62f 100644 --- a/opentelemetry-otlp/examples/basic-otlp-http/Cargo.toml +++ b/opentelemetry-otlp/examples/basic-otlp-http/Cargo.toml @@ -9,7 +9,7 @@ publish = false once_cell = { workspace = true } opentelemetry = { path = "../../../opentelemetry" } opentelemetry_sdk = { path = "../../../opentelemetry-sdk", features = ["rt-tokio", "metrics", "logs"] } -opentelemetry-otlp = { path = "../..", features = ["http-proto", "reqwest-client", "logs"] } +opentelemetry-otlp = { path = "../..", features = ["http-proto", "http-json", "reqwest-client", "logs"] } opentelemetry-appender-tracing = { path = "../../../opentelemetry-appender-tracing", default-features = false} opentelemetry-semantic-conventions = { path = "../../../opentelemetry-semantic-conventions" } diff --git a/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs b/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs index c237c484e0..8e913dac0a 100644 --- a/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs +++ b/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs @@ -139,7 +139,7 @@ async fn main() -> Result<(), Box> { let span = cx.span(); span.add_event( "Nice operation!".to_string(), - vec![Key::new("bogons").i64(100)], + vec![KeyValue::new("bogons", "100")], ); span.set_attribute(KeyValue::new("another.key", "yes")); From abaeaaf52903565acb646c79c03a55c0d9c279ea Mon Sep 17 00:00:00 2001 From: Ramajeyam Gopalraj Date: Sun, 26 May 2024 23:59:51 -0400 Subject: [PATCH 2/9] cleanup --- opentelemetry-otlp/examples/basic-otlp-http/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs b/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs index 8e913dac0a..a91f3564a9 100644 --- a/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs +++ b/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs @@ -3,7 +3,7 @@ use opentelemetry::{ global, metrics::MetricsError, trace::{TraceContextExt, TraceError, Tracer, TracerProvider as _}, - Key, KeyValue, + KeyValue, }; use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge; use opentelemetry_otlp::WithExportConfig; From 640b8862276f885a7ca15ec4181b349de520f637 Mon Sep 17 00:00:00 2001 From: Ramajeyam Gopalraj Date: Mon, 27 May 2024 11:33:16 -0400 Subject: [PATCH 3/9] fix serializing value --- .../examples/basic-otlp-http/src/main.rs | 4 +- opentelemetry-proto/src/proto.rs | 129 +++++++++--------- 2 files changed, 67 insertions(+), 66 deletions(-) diff --git a/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs b/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs index a91f3564a9..c237c484e0 100644 --- a/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs +++ b/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs @@ -3,7 +3,7 @@ use opentelemetry::{ global, metrics::MetricsError, trace::{TraceContextExt, TraceError, Tracer, TracerProvider as _}, - KeyValue, + Key, KeyValue, }; use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge; use opentelemetry_otlp::WithExportConfig; @@ -139,7 +139,7 @@ async fn main() -> Result<(), Box> { let span = cx.span(); span.add_event( "Nice operation!".to_string(), - vec![KeyValue::new("bogons", "100")], + vec![Key::new("bogons").i64(100)], ); span.set_attribute(KeyValue::new("another.key", "yes")); diff --git a/opentelemetry-proto/src/proto.rs b/opentelemetry-proto/src/proto.rs index fd7ddd7652..372bc35800 100644 --- a/opentelemetry-proto/src/proto.rs +++ b/opentelemetry-proto/src/proto.rs @@ -46,14 +46,14 @@ pub(crate) mod serializers { // AnyValue <-> KeyValue conversion pub fn serialize_to_value(value: &Option, serializer: S) -> Result - where - S: Serializer, + where + S: Serializer, { // Serialize any_value::Value using its own implementation // If value is None, it will be serialized as such match value { Some(any_value) => match &any_value.value { - Some(Value::IntValue(i)) => serialize_i64_to_string(i, serializer), + //Some(Value::IntValue(i)) => serialize_i64_to_string(i, serializer), Some(value) => value.serialize(serializer), None => serializer.serialize_none(), }, @@ -62,76 +62,77 @@ pub(crate) mod serializers { } pub fn deserialize_from_value<'de, D>(deserializer: D) -> Result, D::Error> -where - D: Deserializer<'de>, -{ - struct ValueVisitor; + where + D: Deserializer<'de>, + { + struct ValueVisitor; - impl<'de> de::Visitor<'de> for ValueVisitor { - type Value = AnyValue; + impl<'de> de::Visitor<'de> for ValueVisitor { + type Value = AnyValue; - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("a JSON object for AnyValue") - } + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("a JSON object for AnyValue") + } - fn visit_map(self, mut map: V) -> Result - where - V: de::MapAccess<'de>, - { - let mut value: Option = None; - - while let Some(key) = map.next_key::()? { - let key_str = key.as_str(); - match key_str { - "stringValue" => { - let s = map.next_value()?; - value = Some(any_value::Value::StringValue(s)); - }, - "boolValue" => { - let b = map.next_value()?; - value = Some(any_value::Value::BoolValue(b)); - }, - "intValue" => { - let value_str = map.next_value::()?; - let int_value = value_str.parse::() - .map_err(de::Error::custom)?; - value = Some(any_value::Value::IntValue(int_value)); - }, - "doubleValue" => { - let d = map.next_value()?; - value = Some(any_value::Value::DoubleValue(d)); - }, - "arrayValue" => { - let a = map.next_value()?; - value = Some(any_value::Value::ArrayValue(a)); - }, - "kvlistValue" => { - let kv = map.next_value()?; - value = Some(any_value::Value::KvlistValue(kv)); - }, - "bytesValue" => { - let bytes = map.next_value()?; - value = Some(any_value::Value::BytesValue(bytes)); - }, - _ => { - //skip unknown keys, and handle error later. - continue + fn visit_map(self, mut map: V) -> Result + where + V: de::MapAccess<'de>, + { + let mut value: Option = None; + + while let Some(key) = map.next_key::()? { + let key_str = key.as_str(); + match key_str { + "stringValue" => { + let s = map.next_value()?; + value = Some(any_value::Value::StringValue(s)); + } + "boolValue" => { + let b = map.next_value()?; + value = Some(any_value::Value::BoolValue(b)); + } + "intValue" => { + let value_str = map.next_value::()?; + let int_value = value_str.parse::().map_err(de::Error::custom)?; + value = Some(any_value::Value::IntValue(int_value)); + } + "doubleValue" => { + let d = map.next_value()?; + value = Some(any_value::Value::DoubleValue(d)); + } + "arrayValue" => { + let a = map.next_value()?; + value = Some(any_value::Value::ArrayValue(a)); + } + "kvlistValue" => { + let kv = map.next_value()?; + value = Some(any_value::Value::KvlistValue(kv)); + } + "bytesValue" => { + let bytes = map.next_value()?; + value = Some(any_value::Value::BytesValue(bytes)); + } + _ => { + //skip unknown keys, and handle error later. + continue; + } } } - } - if let Some(v) = value { - Ok(AnyValue { value: Some(v) }) - } else { - Err(de::Error::custom("Invalid data for AnyValue, no known keys found")) + if let Some(v) = value { + Ok(AnyValue { value: Some(v) }) + } else { + Err(de::Error::custom( + "Invalid data for AnyValue, no known keys found", + )) + } } } + + let value = deserializer.deserialize_map(ValueVisitor)?; + Ok(Some(value)) } - let value = deserializer.deserialize_map(ValueVisitor)?; - Ok(Some(value)) -} - pub fn serialize_u64_to_string(value: &u64, serializer: S) -> Result where S: Serializer, @@ -155,7 +156,7 @@ where let s = value.to_string(); serializer.serialize_str(&s) } - + pub fn deserialize_string_to_i64<'de, D>(deserializer: D) -> Result where D: Deserializer<'de>, From b7d182be1b79f907e8bd7ce56ff8a535a828f9f9 Mon Sep 17 00:00:00 2001 From: Ramajeyam Gopalraj Date: Tue, 4 Jun 2024 09:49:44 -0400 Subject: [PATCH 4/9] remove commented code --- opentelemetry-otlp/Cargo.toml | 1 - opentelemetry-proto/src/proto.rs | 1 - 2 files changed, 2 deletions(-) diff --git a/opentelemetry-otlp/Cargo.toml b/opentelemetry-otlp/Cargo.toml index f031791aa6..2a04fa9956 100644 --- a/opentelemetry-otlp/Cargo.toml +++ b/opentelemetry-otlp/Cargo.toml @@ -71,7 +71,6 @@ tls-webpki-roots = ["tls", "tonic/tls-webpki-roots"] # http binary http-proto = ["prost", "opentelemetry-http", "opentelemetry-proto/gen-tonic-messages", "http", "trace", "metrics"] -# http json This does not work today due to known issue. See https://github.com/open-telemetry/opentelemetry-rust/issues/1763. http-json = ["serde_json", "prost", "opentelemetry-http", "opentelemetry-proto/gen-tonic-messages", "opentelemetry-proto/with-serde", "http", "trace", "metrics"] reqwest-blocking-client = ["reqwest/blocking", "opentelemetry-http/reqwest"] reqwest-client = ["reqwest", "opentelemetry-http/reqwest"] diff --git a/opentelemetry-proto/src/proto.rs b/opentelemetry-proto/src/proto.rs index 372bc35800..19ac829011 100644 --- a/opentelemetry-proto/src/proto.rs +++ b/opentelemetry-proto/src/proto.rs @@ -53,7 +53,6 @@ pub(crate) mod serializers { // If value is None, it will be serialized as such match value { Some(any_value) => match &any_value.value { - //Some(Value::IntValue(i)) => serialize_i64_to_string(i, serializer), Some(value) => value.serialize(serializer), None => serializer.serialize_none(), }, From f3e4fa4f3cc3fedccd77cf2e8af39fd3d1d32209 Mon Sep 17 00:00:00 2001 From: Ramajeyam Gopalraj Date: Tue, 18 Jun 2024 23:27:23 -0400 Subject: [PATCH 5/9] revert proto.rs --- opentelemetry-proto/src/proto.rs | 121 +++++++++++++++---------------- 1 file changed, 60 insertions(+), 61 deletions(-) diff --git a/opentelemetry-proto/src/proto.rs b/opentelemetry-proto/src/proto.rs index 256c6a6bc8..8bc372b889 100644 --- a/opentelemetry-proto/src/proto.rs +++ b/opentelemetry-proto/src/proto.rs @@ -74,77 +74,76 @@ pub(crate) mod serializers { } pub fn deserialize_from_value<'de, D>(deserializer: D) -> Result, D::Error> - where - D: Deserializer<'de>, - { - struct ValueVisitor; +where + D: Deserializer<'de>, +{ + struct ValueVisitor; - impl<'de> de::Visitor<'de> for ValueVisitor { - type Value = AnyValue; + impl<'de> de::Visitor<'de> for ValueVisitor { + type Value = AnyValue; - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("a JSON object for AnyValue") - } + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("a JSON object for AnyValue") + } - fn visit_map(self, mut map: V) -> Result - where - V: de::MapAccess<'de>, - { - let mut value: Option = None; + fn visit_map(self, mut map: V) -> Result + where + V: de::MapAccess<'de>, + { + let mut value: Option = None; - while let Some(key) = map.next_key::()? { - let key_str = key.as_str(); - match key_str { - "stringValue" => { - let s = map.next_value()?; - value = Some(any_value::Value::StringValue(s)); - } - "boolValue" => { - let b = map.next_value()?; - value = Some(any_value::Value::BoolValue(b)); - } - "intValue" => { - let value_str = map.next_value::()?; - let int_value = value_str.parse::().map_err(de::Error::custom)?; - value = Some(any_value::Value::IntValue(int_value)); - } - "doubleValue" => { - let d = map.next_value()?; - value = Some(any_value::Value::DoubleValue(d)); - } - "arrayValue" => { - let a = map.next_value()?; - value = Some(any_value::Value::ArrayValue(a)); - } - "kvlistValue" => { - let kv = map.next_value()?; - value = Some(any_value::Value::KvlistValue(kv)); - } - "bytesValue" => { - let bytes = map.next_value()?; - value = Some(any_value::Value::BytesValue(bytes)); - } - _ => { - //skip unknown keys, and handle error later. - continue; - } + while let Some(key) = map.next_key::()? { + let key_str = key.as_str(); + match key_str { + "stringValue" => { + let s = map.next_value()?; + value = Some(any_value::Value::StringValue(s)); + }, + "boolValue" => { + let b = map.next_value()?; + value = Some(any_value::Value::BoolValue(b)); + }, + "intValue" => { + let value_str = map.next_value::()?; + let int_value = value_str.parse::() + .map_err(de::Error::custom)?; + value = Some(any_value::Value::IntValue(int_value)); + }, + "doubleValue" => { + let d = map.next_value()?; + value = Some(any_value::Value::DoubleValue(d)); + }, + "arrayValue" => { + let a = map.next_value()?; + value = Some(any_value::Value::ArrayValue(a)); + }, + "kvlistValue" => { + let kv = map.next_value()?; + value = Some(any_value::Value::KvlistValue(kv)); + }, + "bytesValue" => { + let bytes = map.next_value()?; + value = Some(any_value::Value::BytesValue(bytes)); + }, + _ => { + //skip unknown keys, and handle error later. + continue } } + } - if let Some(v) = value { - Ok(AnyValue { value: Some(v) }) - } else { - Err(de::Error::custom( - "Invalid data for AnyValue, no known keys found", - )) - } + if let Some(v) = value { + Ok(AnyValue { value: Some(v) }) + } else { + Err(de::Error::custom("Invalid data for AnyValue, no known keys found")) } } - - let value = deserializer.deserialize_map(ValueVisitor)?; - Ok(Some(value)) } + let value = deserializer.deserialize_map(ValueVisitor)?; + Ok(Some(value)) +} + pub fn serialize_u64_to_string(value: &u64, serializer: S) -> Result where S: Serializer, @@ -168,7 +167,7 @@ pub(crate) mod serializers { let s = value.to_string(); serializer.serialize_str(&s) } - + pub fn deserialize_string_to_i64<'de, D>(deserializer: D) -> Result where D: Deserializer<'de>, From e63bb17433b91669d1b23eff5b517885b0612387 Mon Sep 17 00:00:00 2001 From: Ramajeyam Gopalraj Date: Thu, 20 Jun 2024 22:04:48 -0400 Subject: [PATCH 6/9] specify protocol --- opentelemetry-otlp/examples/basic-otlp-http/README.md | 4 ++-- opentelemetry-otlp/examples/basic-otlp-http/src/main.rs | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/opentelemetry-otlp/examples/basic-otlp-http/README.md b/opentelemetry-otlp/examples/basic-otlp-http/README.md index 2608deafce..ac2c4f26c0 100644 --- a/opentelemetry-otlp/examples/basic-otlp-http/README.md +++ b/opentelemetry-otlp/examples/basic-otlp-http/README.md @@ -1,9 +1,9 @@ # Basic OTLP exporter Example This example shows how to setup OpenTelemetry OTLP exporter for logs, metrics -and traces to exports them to the [OpenTelemetry +and traces to export them to the [OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-collector) via OTLP -over HTTP/protobuf. The Collector then sends the data to the appropriate +using different protocols such as HTTP/json and HTTP/protobuf. The Collector then sends the data to the appropriate backend, in this case, the logging Exporter, which displays data to console. ## Usage diff --git a/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs b/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs index 4e73537ce8..ab3924c065 100644 --- a/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs +++ b/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs @@ -32,7 +32,8 @@ fn init_logs() -> Result .with_exporter( opentelemetry_otlp::new_exporter() .http() - .with_endpoint("http://localhost:4318/v1/logs"), + .with_protocol(opentelemetry_otlp::Protocol::HttpJson) + .with_endpoint("http://dp-ramji-work.fyre.ibm.com:4318/v1/logs"), ) .install_batch(opentelemetry_sdk::runtime::Tokio) } @@ -43,7 +44,8 @@ fn init_tracer_provider() -> Result { .with_exporter( opentelemetry_otlp::new_exporter() .http() - .with_endpoint("http://localhost:4318/v1/traces"), + .with_protocol(opentelemetry_otlp::Protocol::HttpBinary) + .with_endpoint("http://dp-ramji-work.fyre.ibm.com:4318/v1/traces"), ) .with_trace_config(Config::default().with_resource(RESOURCE.clone())) .install_batch(opentelemetry_sdk::runtime::Tokio) @@ -55,7 +57,8 @@ fn init_metrics() -> Result Date: Wed, 26 Jun 2024 22:17:38 -0700 Subject: [PATCH 7/9] Update opentelemetry-otlp/examples/basic-otlp-http/src/main.rs --- opentelemetry-otlp/examples/basic-otlp-http/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs b/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs index ab3924c065..0c8ff66ee1 100644 --- a/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs +++ b/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs @@ -32,7 +32,7 @@ fn init_logs() -> Result .with_exporter( opentelemetry_otlp::new_exporter() .http() - .with_protocol(opentelemetry_otlp::Protocol::HttpJson) + .with_protocol(opentelemetry_otlp::Protocol::HttpBinary) .with_endpoint("http://dp-ramji-work.fyre.ibm.com:4318/v1/logs"), ) .install_batch(opentelemetry_sdk::runtime::Tokio) From a8b8cb0844f997b085cfbb5edd00810855f45952 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Tue, 18 Jun 2024 13:53:41 -0700 Subject: [PATCH 8/9] fix otlp/json exporter (#1882) --- opentelemetry-otlp/CHANGELOG.md | 2 + opentelemetry-proto/src/proto.rs | 127 ++++++++++++++++--------------- 2 files changed, 66 insertions(+), 63 deletions(-) diff --git a/opentelemetry-otlp/CHANGELOG.md b/opentelemetry-otlp/CHANGELOG.md index 5295ae9ee0..c5540cc0eb 100644 --- a/opentelemetry-otlp/CHANGELOG.md +++ b/opentelemetry-otlp/CHANGELOG.md @@ -21,6 +21,8 @@ now use `.with_resource(RESOURCE::default())` to configure Resource when using - **Breaking** [1869](https://github.com/open-telemetry/opentelemetry-rust/pull/1869) The OTLP logs exporter now overrides the [InstrumentationScope::name](https://github.com/open-telemetry/opentelemetry-proto/blob/b3060d2104df364136d75a35779e6bd48bac449a/opentelemetry/proto/common/v1/common.proto#L73) field with the `target` from `LogRecord`, if target is populated. - Groups batch of `LogRecord` and `Span` by their resource and instrumentation scope before exporting, for better efficiency [#1873](https://github.com/open-telemetry/opentelemetry-rust/pull/1873). +- Fixing the OTLP HTTP/JSON exporter. [#1882](https://github.com/open-telemetry/opentelemetry-rust/pull/1882) - The exporter was broken in the + previous release. ## v0.16.0 diff --git a/opentelemetry-proto/src/proto.rs b/opentelemetry-proto/src/proto.rs index 8bc372b889..6360f93679 100644 --- a/opentelemetry-proto/src/proto.rs +++ b/opentelemetry-proto/src/proto.rs @@ -57,15 +57,15 @@ pub(crate) mod serializers { Ok(s) => s, Err(e) => return Err(e), // Handle the error or return it }; - + // Attempt to serialize the intValue field if let Err(e) = state.serialize_field("intValue", &i.to_string()) { return Err(e); // Handle the error or return it } - + // Finalize the struct serialization state.end() - }, + } Some(value) => value.serialize(serializer), None => serializer.serialize_none(), }, @@ -74,76 +74,77 @@ pub(crate) mod serializers { } pub fn deserialize_from_value<'de, D>(deserializer: D) -> Result, D::Error> -where - D: Deserializer<'de>, -{ - struct ValueVisitor; + where + D: Deserializer<'de>, + { + struct ValueVisitor; - impl<'de> de::Visitor<'de> for ValueVisitor { - type Value = AnyValue; + impl<'de> de::Visitor<'de> for ValueVisitor { + type Value = AnyValue; - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("a JSON object for AnyValue") - } + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("a JSON object for AnyValue") + } - fn visit_map(self, mut map: V) -> Result - where - V: de::MapAccess<'de>, - { - let mut value: Option = None; + fn visit_map(self, mut map: V) -> Result + where + V: de::MapAccess<'de>, + { + let mut value: Option = None; - while let Some(key) = map.next_key::()? { - let key_str = key.as_str(); - match key_str { - "stringValue" => { - let s = map.next_value()?; - value = Some(any_value::Value::StringValue(s)); - }, - "boolValue" => { - let b = map.next_value()?; - value = Some(any_value::Value::BoolValue(b)); - }, - "intValue" => { - let value_str = map.next_value::()?; - let int_value = value_str.parse::() - .map_err(de::Error::custom)?; - value = Some(any_value::Value::IntValue(int_value)); - }, - "doubleValue" => { - let d = map.next_value()?; - value = Some(any_value::Value::DoubleValue(d)); - }, - "arrayValue" => { - let a = map.next_value()?; - value = Some(any_value::Value::ArrayValue(a)); - }, - "kvlistValue" => { - let kv = map.next_value()?; - value = Some(any_value::Value::KvlistValue(kv)); - }, - "bytesValue" => { - let bytes = map.next_value()?; - value = Some(any_value::Value::BytesValue(bytes)); - }, - _ => { - //skip unknown keys, and handle error later. - continue + while let Some(key) = map.next_key::()? { + let key_str = key.as_str(); + match key_str { + "stringValue" => { + let s = map.next_value()?; + value = Some(any_value::Value::StringValue(s)); + } + "boolValue" => { + let b = map.next_value()?; + value = Some(any_value::Value::BoolValue(b)); + } + "intValue" => { + let value_str = map.next_value::()?; + let int_value = value_str.parse::().map_err(de::Error::custom)?; + value = Some(any_value::Value::IntValue(int_value)); + } + "doubleValue" => { + let d = map.next_value()?; + value = Some(any_value::Value::DoubleValue(d)); + } + "arrayValue" => { + let a = map.next_value()?; + value = Some(any_value::Value::ArrayValue(a)); + } + "kvlistValue" => { + let kv = map.next_value()?; + value = Some(any_value::Value::KvlistValue(kv)); + } + "bytesValue" => { + let bytes = map.next_value()?; + value = Some(any_value::Value::BytesValue(bytes)); + } + _ => { + //skip unknown keys, and handle error later. + continue; + } } } - } - if let Some(v) = value { - Ok(AnyValue { value: Some(v) }) - } else { - Err(de::Error::custom("Invalid data for AnyValue, no known keys found")) + if let Some(v) = value { + Ok(AnyValue { value: Some(v) }) + } else { + Err(de::Error::custom( + "Invalid data for AnyValue, no known keys found", + )) + } } } + + let value = deserializer.deserialize_map(ValueVisitor)?; + Ok(Some(value)) } - let value = deserializer.deserialize_map(ValueVisitor)?; - Ok(Some(value)) -} - pub fn serialize_u64_to_string(value: &u64, serializer: S) -> Result where S: Serializer, @@ -167,7 +168,7 @@ where let s = value.to_string(); serializer.serialize_str(&s) } - + pub fn deserialize_string_to_i64<'de, D>(deserializer: D) -> Result where D: Deserializer<'de>, From 028ad0eeb5c686b226e1c28a7c3b887b9d8cd491 Mon Sep 17 00:00:00 2001 From: Ramajeyam Gopalraj Date: Tue, 2 Jul 2024 12:16:10 -0400 Subject: [PATCH 9/9] fix host --- opentelemetry-otlp/examples/basic-otlp-http/src/main.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs b/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs index 0c8ff66ee1..fae8aaa9e1 100644 --- a/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs +++ b/opentelemetry-otlp/examples/basic-otlp-http/src/main.rs @@ -33,7 +33,7 @@ fn init_logs() -> Result opentelemetry_otlp::new_exporter() .http() .with_protocol(opentelemetry_otlp::Protocol::HttpBinary) - .with_endpoint("http://dp-ramji-work.fyre.ibm.com:4318/v1/logs"), + .with_endpoint("http://localhost:4318/v1/logs"), ) .install_batch(opentelemetry_sdk::runtime::Tokio) } @@ -45,7 +45,7 @@ fn init_tracer_provider() -> Result { opentelemetry_otlp::new_exporter() .http() .with_protocol(opentelemetry_otlp::Protocol::HttpBinary) - .with_endpoint("http://dp-ramji-work.fyre.ibm.com:4318/v1/traces"), + .with_endpoint("http://localhost:4318/v1/traces"), ) .with_trace_config(Config::default().with_resource(RESOURCE.clone())) .install_batch(opentelemetry_sdk::runtime::Tokio) @@ -58,7 +58,7 @@ fn init_metrics() -> Result