def _encode_annotations( self, span_events: Optional[List[Event]]) -> Optional[List]: annotations = self._extract_annotations_from_events(span_events) if annotations is None: encoded_annotations = None else: encoded_annotations = [] for annotation in annotations: encoded_annotations.append( zipkin_pb2.Annotation( timestamp=annotation["timestamp"], value=annotation["value"], )) return encoded_annotations
def test_encode(self): local_endpoint = zipkin_pb2.Endpoint(service_name=TEST_SERVICE_NAME) span_kind = ProtobufEncoder.SPAN_KIND_MAP[SpanKind.INTERNAL] otel_spans = self.get_exhaustive_otel_span_list() trace_id = ProtobufEncoder._encode_trace_id( otel_spans[0].context.trace_id ) expected_output = zipkin_pb2.ListOfSpans( spans=[ zipkin_pb2.Span( trace_id=trace_id, id=ProtobufEncoder._encode_span_id( otel_spans[0].context.span_id ), name=otel_spans[0].name, timestamp=ProtobufEncoder._nsec_to_usec_round( otel_spans[0].start_time ), duration=( ProtobufEncoder._nsec_to_usec_round( otel_spans[0].end_time - otel_spans[0].start_time ) ), local_endpoint=local_endpoint, kind=span_kind, tags={ "key_bool": "false", "key_string": "hello_world", "key_float": "111.22", "otel.status_code": "OK", }, debug=True, parent_id=ProtobufEncoder._encode_span_id( otel_spans[0].parent.span_id ), annotations=[ zipkin_pb2.Annotation( timestamp=ProtobufEncoder._nsec_to_usec_round( otel_spans[0].events[0].timestamp ), value=json.dumps( { "event0": { "annotation_bool": True, "annotation_string": "annotation_test", "key_float": 0.3, } }, sort_keys=True, ), ), ], ), zipkin_pb2.Span( trace_id=trace_id, id=ProtobufEncoder._encode_span_id( otel_spans[1].context.span_id ), name=otel_spans[1].name, timestamp=ProtobufEncoder._nsec_to_usec_round( otel_spans[1].start_time ), duration=( ProtobufEncoder._nsec_to_usec_round( otel_spans[1].end_time - otel_spans[1].start_time ) ), local_endpoint=local_endpoint, kind=span_kind, tags={ "key_resource": "some_resource", "otel.status_code": "ERROR", "error": "Example description", }, debug=False, ), zipkin_pb2.Span( trace_id=trace_id, id=ProtobufEncoder._encode_span_id( otel_spans[2].context.span_id ), name=otel_spans[2].name, timestamp=ProtobufEncoder._nsec_to_usec_round( otel_spans[2].start_time ), duration=( ProtobufEncoder._nsec_to_usec_round( otel_spans[2].end_time - otel_spans[2].start_time ) ), local_endpoint=local_endpoint, kind=span_kind, tags={ "key_string": "hello_world", "key_resource": "some_resource", }, debug=False, ), zipkin_pb2.Span( trace_id=trace_id, id=ProtobufEncoder._encode_span_id( otel_spans[3].context.span_id ), name=otel_spans[3].name, timestamp=ProtobufEncoder._nsec_to_usec_round( otel_spans[3].start_time ), duration=( ProtobufEncoder._nsec_to_usec_round( otel_spans[3].end_time - otel_spans[3].start_time ) ), local_endpoint=local_endpoint, kind=span_kind, tags={NAME_KEY: "name", VERSION_KEY: "version"}, debug=False, ), ], ) actual_output = zipkin_pb2.ListOfSpans.FromString( ProtobufEncoder().serialize(otel_spans, NodeEndpoint()) ) self.assertEqual(actual_output, expected_output)