@@ -40,7 +40,8 @@ const int kOwnedAttributeValueSize = 15;
40
40
41
41
void OtlpPopulateAttributeUtils::PopulateAnyValue (
42
42
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
44
45
{
45
46
if (nullptr == proto_value)
46
47
{
@@ -89,10 +90,19 @@ void OtlpPopulateAttributeUtils::PopulateAnyValue(
89
90
}
90
91
else if (nostd::holds_alternative<nostd::span<const uint8_t >>(value))
91
92
{
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)
94
94
{
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
+ }
96
106
}
97
107
}
98
108
else if (nostd::holds_alternative<nostd::span<const bool >>(value))
@@ -156,7 +166,8 @@ void OtlpPopulateAttributeUtils::PopulateAnyValue(
156
166
157
167
void OtlpPopulateAttributeUtils::PopulateAnyValue (
158
168
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
160
171
{
161
172
if (nullptr == proto_value)
162
173
{
@@ -194,6 +205,23 @@ void OtlpPopulateAttributeUtils::PopulateAnyValue(
194
205
{
195
206
proto_value->set_double_value (nostd::get<double >(value));
196
207
}
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
+ }
197
225
else if (nostd::holds_alternative<std::string>(value))
198
226
{
199
227
proto_value->set_string_value (nostd::get<std::string>(value));
@@ -261,7 +289,8 @@ void OtlpPopulateAttributeUtils::PopulateAnyValue(
261
289
void OtlpPopulateAttributeUtils::PopulateAttribute (
262
290
opentelemetry::proto::common::v1::KeyValue *attribute,
263
291
nostd::string_view key,
264
- const opentelemetry::common::AttributeValue &value) noexcept
292
+ const opentelemetry::common::AttributeValue &value,
293
+ bool allow_bytes) noexcept
265
294
{
266
295
if (nullptr == attribute)
267
296
{
@@ -275,14 +304,15 @@ void OtlpPopulateAttributeUtils::PopulateAttribute(
275
304
" AttributeValue contains unknown type" );
276
305
277
306
attribute->set_key (key.data (), key.size ());
278
- PopulateAnyValue (attribute->mutable_value (), value);
307
+ PopulateAnyValue (attribute->mutable_value (), value, allow_bytes );
279
308
}
280
309
281
310
/* * Maps from C++ attribute into OTLP proto attribute. */
282
311
void OtlpPopulateAttributeUtils::PopulateAttribute (
283
312
opentelemetry::proto::common::v1::KeyValue *attribute,
284
313
nostd::string_view key,
285
- const opentelemetry::sdk::common::OwnedAttributeValue &value) noexcept
314
+ const opentelemetry::sdk::common::OwnedAttributeValue &value,
315
+ bool allow_bytes) noexcept
286
316
{
287
317
if (nullptr == attribute)
288
318
{
@@ -296,7 +326,7 @@ void OtlpPopulateAttributeUtils::PopulateAttribute(
296
326
" OwnedAttributeValue contains unknown type" );
297
327
298
328
attribute->set_key (key.data (), key.size ());
299
- PopulateAnyValue (attribute->mutable_value (), value);
329
+ PopulateAnyValue (attribute->mutable_value (), value, allow_bytes );
300
330
}
301
331
302
332
void OtlpPopulateAttributeUtils::PopulateAttribute (
@@ -310,7 +340,8 @@ void OtlpPopulateAttributeUtils::PopulateAttribute(
310
340
311
341
for (const auto &kv : resource.GetAttributes ())
312
342
{
313
- OtlpPopulateAttributeUtils::PopulateAttribute (proto->add_attributes (), kv.first , kv.second );
343
+ OtlpPopulateAttributeUtils::PopulateAttribute (proto->add_attributes (), kv.first , kv.second ,
344
+ false );
314
345
}
315
346
}
316
347
@@ -321,7 +352,8 @@ void OtlpPopulateAttributeUtils::PopulateAttribute(
321
352
{
322
353
for (const auto &kv : instrumentation_scope.GetAttributes ())
323
354
{
324
- OtlpPopulateAttributeUtils::PopulateAttribute (proto->add_attributes (), kv.first , kv.second );
355
+ OtlpPopulateAttributeUtils::PopulateAttribute (proto->add_attributes (), kv.first , kv.second ,
356
+ false );
325
357
}
326
358
}
327
359
0 commit comments