@@ -40,7 +40,8 @@ const int kOwnedAttributeValueSize = 15;
4040
4141void OtlpPopulateAttributeUtils::PopulateAnyValue (
4242 opentelemetry::proto::common::v1::AnyValue *proto_value,
43- const opentelemetry::common::AttributeValue &value) noexcept
43+ const opentelemetry::common::AttributeValue &value,
44+ bool allow_bytes) noexcept
4445{
4546 if (nullptr == proto_value)
4647 {
@@ -89,10 +90,19 @@ void OtlpPopulateAttributeUtils::PopulateAnyValue(
8990 }
9091 else if (nostd::holds_alternative<nostd::span<const uint8_t >>(value))
9192 {
92- auto array_value = proto_value->mutable_array_value ();
93- for (const auto &val : nostd::get<nostd::span<const uint8_t >>(value))
93+ if (allow_bytes)
9494 {
95- array_value->add_values ()->set_int_value (val);
95+ proto_value->set_bytes_value (
96+ reinterpret_cast <const void *>(nostd::get<nostd::span<const uint8_t >>(value).data ()),
97+ nostd::get<nostd::span<const uint8_t >>(value).size ());
98+ }
99+ else
100+ {
101+ auto array_value = proto_value->mutable_array_value ();
102+ for (const auto &val : nostd::get<nostd::span<const uint8_t >>(value))
103+ {
104+ array_value->add_values ()->set_int_value (val);
105+ }
96106 }
97107 }
98108 else if (nostd::holds_alternative<nostd::span<const bool >>(value))
@@ -156,7 +166,8 @@ void OtlpPopulateAttributeUtils::PopulateAnyValue(
156166
157167void OtlpPopulateAttributeUtils::PopulateAnyValue (
158168 opentelemetry::proto::common::v1::AnyValue *proto_value,
159- const opentelemetry::sdk::common::OwnedAttributeValue &value) noexcept
169+ const opentelemetry::sdk::common::OwnedAttributeValue &value,
170+ bool allow_bytes) noexcept
160171{
161172 if (nullptr == proto_value)
162173 {
@@ -194,6 +205,23 @@ void OtlpPopulateAttributeUtils::PopulateAnyValue(
194205 {
195206 proto_value->set_double_value (nostd::get<double >(value));
196207 }
208+ else if (nostd::holds_alternative<std::vector<uint8_t >>(value))
209+ {
210+ if (allow_bytes)
211+ {
212+ const std::vector<uint8_t > &byte_array = nostd::get<std::vector<uint8_t >>(value);
213+ proto_value->set_bytes_value (reinterpret_cast <const void *>(byte_array.data ()),
214+ byte_array.size ());
215+ }
216+ else
217+ {
218+ auto array_value = proto_value->mutable_array_value ();
219+ for (const auto &val : nostd::get<std::vector<uint8_t >>(value))
220+ {
221+ array_value->add_values ()->set_int_value (val);
222+ }
223+ }
224+ }
197225 else if (nostd::holds_alternative<std::string>(value))
198226 {
199227 proto_value->set_string_value (nostd::get<std::string>(value));
@@ -261,7 +289,8 @@ void OtlpPopulateAttributeUtils::PopulateAnyValue(
261289void OtlpPopulateAttributeUtils::PopulateAttribute (
262290 opentelemetry::proto::common::v1::KeyValue *attribute,
263291 nostd::string_view key,
264- const opentelemetry::common::AttributeValue &value) noexcept
292+ const opentelemetry::common::AttributeValue &value,
293+ bool allow_bytes) noexcept
265294{
266295 if (nullptr == attribute)
267296 {
@@ -275,14 +304,15 @@ void OtlpPopulateAttributeUtils::PopulateAttribute(
275304 " AttributeValue contains unknown type" );
276305
277306 attribute->set_key (key.data (), key.size ());
278- PopulateAnyValue (attribute->mutable_value (), value);
307+ PopulateAnyValue (attribute->mutable_value (), value, allow_bytes );
279308}
280309
281310/* * Maps from C++ attribute into OTLP proto attribute. */
282311void OtlpPopulateAttributeUtils::PopulateAttribute (
283312 opentelemetry::proto::common::v1::KeyValue *attribute,
284313 nostd::string_view key,
285- const opentelemetry::sdk::common::OwnedAttributeValue &value) noexcept
314+ const opentelemetry::sdk::common::OwnedAttributeValue &value,
315+ bool allow_bytes) noexcept
286316{
287317 if (nullptr == attribute)
288318 {
@@ -296,7 +326,7 @@ void OtlpPopulateAttributeUtils::PopulateAttribute(
296326 " OwnedAttributeValue contains unknown type" );
297327
298328 attribute->set_key (key.data (), key.size ());
299- PopulateAnyValue (attribute->mutable_value (), value);
329+ PopulateAnyValue (attribute->mutable_value (), value, allow_bytes );
300330}
301331
302332void OtlpPopulateAttributeUtils::PopulateAttribute (
@@ -310,7 +340,8 @@ void OtlpPopulateAttributeUtils::PopulateAttribute(
310340
311341 for (const auto &kv : resource.GetAttributes ())
312342 {
313- OtlpPopulateAttributeUtils::PopulateAttribute (proto->add_attributes (), kv.first , kv.second );
343+ OtlpPopulateAttributeUtils::PopulateAttribute (proto->add_attributes (), kv.first , kv.second ,
344+ false );
314345 }
315346}
316347
@@ -321,7 +352,8 @@ void OtlpPopulateAttributeUtils::PopulateAttribute(
321352{
322353 for (const auto &kv : instrumentation_scope.GetAttributes ())
323354 {
324- OtlpPopulateAttributeUtils::PopulateAttribute (proto->add_attributes (), kv.first , kv.second );
355+ OtlpPopulateAttributeUtils::PopulateAttribute (proto->add_attributes (), kv.first , kv.second ,
356+ false );
325357 }
326358}
327359
0 commit comments