Skip to content

Commit a8b8cb0

Browse files
lalitbramgdev
authored andcommitted
fix otlp/json exporter (open-telemetry#1882)
1 parent fb950df commit a8b8cb0

File tree

2 files changed

+66
-63
lines changed

2 files changed

+66
-63
lines changed

opentelemetry-otlp/CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ now use `.with_resource(RESOURCE::default())` to configure Resource when using
2121
- **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.
2222
- 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).
2323

24+
- Fixing the OTLP HTTP/JSON exporter. [#1882](https://github.com/open-telemetry/opentelemetry-rust/pull/1882) - The exporter was broken in the
25+
previous release.
2426

2527
## v0.16.0
2628

opentelemetry-proto/src/proto.rs

+64-63
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,15 @@ pub(crate) mod serializers {
5757
Ok(s) => s,
5858
Err(e) => return Err(e), // Handle the error or return it
5959
};
60-
60+
6161
// Attempt to serialize the intValue field
6262
if let Err(e) = state.serialize_field("intValue", &i.to_string()) {
6363
return Err(e); // Handle the error or return it
6464
}
65-
65+
6666
// Finalize the struct serialization
6767
state.end()
68-
},
68+
}
6969
Some(value) => value.serialize(serializer),
7070
None => serializer.serialize_none(),
7171
},
@@ -74,76 +74,77 @@ pub(crate) mod serializers {
7474
}
7575

7676
pub fn deserialize_from_value<'de, D>(deserializer: D) -> Result<Option<AnyValue>, D::Error>
77-
where
78-
D: Deserializer<'de>,
79-
{
80-
struct ValueVisitor;
77+
where
78+
D: Deserializer<'de>,
79+
{
80+
struct ValueVisitor;
8181

82-
impl<'de> de::Visitor<'de> for ValueVisitor {
83-
type Value = AnyValue;
82+
impl<'de> de::Visitor<'de> for ValueVisitor {
83+
type Value = AnyValue;
8484

85-
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
86-
formatter.write_str("a JSON object for AnyValue")
87-
}
85+
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
86+
formatter.write_str("a JSON object for AnyValue")
87+
}
8888

89-
fn visit_map<V>(self, mut map: V) -> Result<AnyValue, V::Error>
90-
where
91-
V: de::MapAccess<'de>,
92-
{
93-
let mut value: Option<any_value::Value> = None;
89+
fn visit_map<V>(self, mut map: V) -> Result<AnyValue, V::Error>
90+
where
91+
V: de::MapAccess<'de>,
92+
{
93+
let mut value: Option<any_value::Value> = None;
9494

95-
while let Some(key) = map.next_key::<String>()? {
96-
let key_str = key.as_str();
97-
match key_str {
98-
"stringValue" => {
99-
let s = map.next_value()?;
100-
value = Some(any_value::Value::StringValue(s));
101-
},
102-
"boolValue" => {
103-
let b = map.next_value()?;
104-
value = Some(any_value::Value::BoolValue(b));
105-
},
106-
"intValue" => {
107-
let value_str = map.next_value::<String>()?;
108-
let int_value = value_str.parse::<i64>()
109-
.map_err(de::Error::custom)?;
110-
value = Some(any_value::Value::IntValue(int_value));
111-
},
112-
"doubleValue" => {
113-
let d = map.next_value()?;
114-
value = Some(any_value::Value::DoubleValue(d));
115-
},
116-
"arrayValue" => {
117-
let a = map.next_value()?;
118-
value = Some(any_value::Value::ArrayValue(a));
119-
},
120-
"kvlistValue" => {
121-
let kv = map.next_value()?;
122-
value = Some(any_value::Value::KvlistValue(kv));
123-
},
124-
"bytesValue" => {
125-
let bytes = map.next_value()?;
126-
value = Some(any_value::Value::BytesValue(bytes));
127-
},
128-
_ => {
129-
//skip unknown keys, and handle error later.
130-
continue
95+
while let Some(key) = map.next_key::<String>()? {
96+
let key_str = key.as_str();
97+
match key_str {
98+
"stringValue" => {
99+
let s = map.next_value()?;
100+
value = Some(any_value::Value::StringValue(s));
101+
}
102+
"boolValue" => {
103+
let b = map.next_value()?;
104+
value = Some(any_value::Value::BoolValue(b));
105+
}
106+
"intValue" => {
107+
let value_str = map.next_value::<String>()?;
108+
let int_value = value_str.parse::<i64>().map_err(de::Error::custom)?;
109+
value = Some(any_value::Value::IntValue(int_value));
110+
}
111+
"doubleValue" => {
112+
let d = map.next_value()?;
113+
value = Some(any_value::Value::DoubleValue(d));
114+
}
115+
"arrayValue" => {
116+
let a = map.next_value()?;
117+
value = Some(any_value::Value::ArrayValue(a));
118+
}
119+
"kvlistValue" => {
120+
let kv = map.next_value()?;
121+
value = Some(any_value::Value::KvlistValue(kv));
122+
}
123+
"bytesValue" => {
124+
let bytes = map.next_value()?;
125+
value = Some(any_value::Value::BytesValue(bytes));
126+
}
127+
_ => {
128+
//skip unknown keys, and handle error later.
129+
continue;
130+
}
131131
}
132132
}
133-
}
134133

135-
if let Some(v) = value {
136-
Ok(AnyValue { value: Some(v) })
137-
} else {
138-
Err(de::Error::custom("Invalid data for AnyValue, no known keys found"))
134+
if let Some(v) = value {
135+
Ok(AnyValue { value: Some(v) })
136+
} else {
137+
Err(de::Error::custom(
138+
"Invalid data for AnyValue, no known keys found",
139+
))
140+
}
139141
}
140142
}
143+
144+
let value = deserializer.deserialize_map(ValueVisitor)?;
145+
Ok(Some(value))
141146
}
142147

143-
let value = deserializer.deserialize_map(ValueVisitor)?;
144-
Ok(Some(value))
145-
}
146-
147148
pub fn serialize_u64_to_string<S>(value: &u64, serializer: S) -> Result<S::Ok, S::Error>
148149
where
149150
S: Serializer,
@@ -167,7 +168,7 @@ where
167168
let s = value.to_string();
168169
serializer.serialize_str(&s)
169170
}
170-
171+
171172
pub fn deserialize_string_to_i64<'de, D>(deserializer: D) -> Result<i64, D::Error>
172173
where
173174
D: Deserializer<'de>,

0 commit comments

Comments
 (0)