OpenTelemetry-Exporter-OTLP
view release on metacpan or search on metacpan
lib/OpenTelemetry/Exporter/OTLP/Encoder/JSON.pm view on Meta::CPAN
use Object::Pad ':experimental(init_expr)';
# ABSTRACT: A JSON encoder for the OTLP exporter
package OpenTelemetry::Exporter::OTLP::Encoder::JSON;
our $VERSION = '0.021';
class OpenTelemetry::Exporter::OTLP::Encoder::JSON {
use JSON::MaybeXS;
use OpenTelemetry::Constants 'HEX_INVALID_SPAN_ID';
use Ref::Util qw( is_hashref is_arrayref );
use Scalar::Util 'refaddr';
use isa 'OpenTelemetry::SDK::Logs::LogRecord';
method content_type () { 'application/json' }
method serialise ($data) { encode_json $data }
method encode_arraylist ($v) {
[ map $self->encode_anyvalue($_), @$v ]
}
method encode_kvlist ($v) {
[
map {
{
key => $_,
value => $self->encode_anyvalue( $v->{$_} )
}
} keys %$v
]
}
method encode_anyvalue ( $v ) {
return { kvlistValue => { values => $self->encode_kvlist($v) } }
if is_hashref $v;
return { arrayValue => { values => $self->encode_arraylist($v) } }
if is_arrayref $v;
if ( my $ref = ref $v ) {
warn "Unsupported ref while encoding: $ref";
return;
}
# TODO: not strings
return { stringValue => "$v" };
}
method encode_resource ( $resource ) {
{
attributes => $self->encode_kvlist($resource->attributes),
droppedAttributesCount => $resource->dropped_attributes,
};
}
method encode_span_event ( $event ) {
{
attributes => $self->encode_kvlist($event->attributes),
droppedAttributesCount => $event->dropped_attributes,
name => $event->name,
timeUnixNano => int $event->timestamp * 1_000_000_000,
};
}
method encode_span_link ( $link ) {
{
attributes => $self->encode_kvlist($link->attributes),
droppedAttributesCount => $link->dropped_attributes,
spanId => $link->context->hex_span_id,
( run in 1.848 second using v1.01-cache-2.11-cpan-39bf76dae61 )