예제 #1
0
    def test_constructor_zipkin(self):
        service_name = 'test_service'
        host_name = 'test_hostname'
        port = 2333

        response = Response()

        def dummy_handler(request):
            return response

        exporter = zipkin_exporter.ZipkinExporter(service_name=service_name,
                                                  host_name=host_name,
                                                  port=port,
                                                  transport=sync.SyncTransport)

        mock_registry = mock.Mock(spec=Registry)
        mock_registry.settings = {}
        mock_registry.settings['OPENCENSUS_TRACE'] = {
            'EXPORTER': exporter,
        }

        middleware = pyramid_middleware.OpenCensusTweenFactory(
            dummy_handler,
            mock_registry,
        )

        assert isinstance(middleware.sampler, always_on.AlwaysOnSampler)
        assert isinstance(middleware.exporter, zipkin_exporter.ZipkinExporter)
        assert isinstance(middleware.propagator,
                          google_cloud_format.GoogleCloudFormatPropagator)

        self.assertEqual(middleware.exporter.service_name, service_name)
        self.assertEqual(middleware.exporter.host_name, host_name)
        self.assertEqual(middleware.exporter.port, port)
예제 #2
0
    def test_emit_failed(self, translate_mock, requests_mock):
        import json

        trace = {'test': 'this_is_for_test'}

        exporter = zipkin_exporter.ZipkinExporter(service_name='my_service')
        response = mock.Mock()
        response.status_code = 400
        requests_mock.return_value = response
        translate_mock.return_value = trace
        exporter.emit([])

        requests_mock.assert_called_once_with(
            url=exporter.url,
            data=json.dumps(trace),
            headers=zipkin_exporter.ZIPKIN_HEADERS)
    def test_constructor(self):
        service_name = 'my_service'
        host_name = '0.0.0.0'
        port = 2333
        endpoint = '/api/v2/test'

        exporter = zipkin_exporter.ZipkinExporter(service_name=service_name,
                                                  host_name=host_name,
                                                  port=port,
                                                  endpoint=endpoint)

        expected_url = 'http://0.0.0.0:2333/api/v2/test'

        self.assertEqual(exporter.service_name, service_name)
        self.assertEqual(exporter.host_name, host_name)
        self.assertEqual(exporter.port, port)
        self.assertEqual(exporter.endpoint, endpoint)
        self.assertEqual(exporter.url, expected_url)
예제 #4
0
    def test_translate_to_zipkin_span_kind_none(self):
        trace_id = '6e0c63257de34c92bf9efcd03927272e'
        spans_ipv4 = [
            span_data_module.SpanData(
                name='child_span',
                context=span_context.SpanContext(trace_id=trace_id),
                span_id='6e0c63257de34c92',
                parent_span_id='6e0c63257de34c93',
                attributes={'test_key': 'test_value'},
                start_time='2017-08-15T18:02:26.071158Z',
                end_time='2017-08-15T18:02:36.071158Z',
                child_span_count=None,
                stack_trace=None,
                time_events=None,
                links=None,
                status=None,
                same_process_as_parent_span=None,
                span_kind=0,
            ),
            span_data_module.SpanData(
                name='child_span',
                context=span_context.SpanContext(trace_id=trace_id),
                span_id='6e0c63257de34c92',
                parent_span_id='6e0c63257de34c93',
                attributes={'test_key': 1},
                start_time='2017-08-15T18:02:26.071158Z',
                end_time='2017-08-15T18:02:36.071158Z',
                child_span_count=None,
                stack_trace=None,
                time_events=None,
                links=None,
                status=None,
                same_process_as_parent_span=None,
                span_kind=None,
            ),
        ]

        trace_id = '6e0c63257de34c92bf9efcd03927272e'
        spans_ipv6 = [
            span_data_module.SpanData(
                name='child_span',
                context=span_context.SpanContext(trace_id=trace_id),
                span_id='6e0c63257de34c92',
                parent_span_id=None,
                attributes={
                    'test_key': False,
                    'test_key2': 'raw_value',
                    # these tags are malformed and should be omitted
                    'test_key3': 0.1,
                },
                start_time='2017-08-15T18:02:26.071158Z',
                end_time='2017-08-15T18:02:36.071158Z',
                child_span_count=None,
                stack_trace=None,
                time_events=None,
                links=None,
                status=None,
                same_process_as_parent_span=None,
                span_kind=1,
            ),
        ]

        ipv4 = '127.0.0.1'
        ipv6 = '2001:0db8:85a3:0000:0000:8a2e:0370:7334'

        local_endpoint_ipv4 = {
            'serviceName': 'my_service',
            'ipv4': ipv4,
            'port': 9411,
        }

        local_endpoint_ipv6 = {
            'serviceName': 'my_service',
            'ipv6': ipv6,
            'port': 9411,
        }

        expected_zipkin_spans_ipv4 = [
            {
                'traceId': '6e0c63257de34c92bf9efcd03927272e',
                'id': '6e0c63257de34c92',
                'parentId': '6e0c63257de34c93',
                'name': 'child_span',
                'timestamp': 1502820146071158,
                'duration': 10000000,
                'localEndpoint': local_endpoint_ipv4,
                'tags': {
                    'test_key': 'test_value'
                },
            },
            {
                'traceId': '6e0c63257de34c92bf9efcd03927272e',
                'id': '6e0c63257de34c92',
                'parentId': '6e0c63257de34c93',
                'name': 'child_span',
                'timestamp': 1502820146071158,
                'duration': 10000000,
                'localEndpoint': local_endpoint_ipv4,
                'tags': {
                    'test_key': '1'
                },
            },
        ]

        expected_zipkin_spans_ipv6 = [
            {
                'traceId': '6e0c63257de34c92bf9efcd03927272e',
                'id': '6e0c63257de34c92',
                'name': 'child_span',
                'timestamp': 1502820146071158,
                'duration': 10000000,
                'localEndpoint': local_endpoint_ipv6,
                'tags': {
                    'test_key': 'False',
                    'test_key2': 'raw_value'
                },
                'kind': 'SERVER',
            },
        ]

        # Test ipv4 local endpoint
        exporter_ipv4 = zipkin_exporter.ZipkinExporter(
            service_name='my_service', ipv4=ipv4)
        ipv4_trace = span_data_module.format_legacy_trace_json(spans_ipv4)
        zipkin_spans_ipv4 = exporter_ipv4.translate_to_zipkin(
            trace_id=trace_id, spans=ipv4_trace.get('spans'))

        self.assertEqual(zipkin_spans_ipv4, expected_zipkin_spans_ipv4)

        # Test ipv6 local endpoint
        exporter_ipv6 = zipkin_exporter.ZipkinExporter(
            service_name='my_service', ipv6=ipv6)
        ipv6_trace = span_data_module.format_legacy_trace_json(spans_ipv6)
        zipkin_spans_ipv6 = exporter_ipv6.translate_to_zipkin(
            trace_id=trace_id, spans=ipv6_trace.get('spans'))

        self.assertEqual(zipkin_spans_ipv6, expected_zipkin_spans_ipv6)
예제 #5
0
    def test_export(self):
        exporter = zipkin_exporter.ZipkinExporter(service_name='my_service',
                                                  transport=MockTransport)
        exporter.export({})

        self.assertTrue(exporter.transport.export_called)
    def test_translate_to_zipkin_with_annotations(self):
        trace_id = '6e0c63257de34c92bf9efcd03927272e'

        annotation_attributes = {
            'annotation_bool': True,
            'annotation_string': 'annotation_test',
            'key_float': .3
        }

        s = '2017-08-15T18:02:26.071158'
        time = datetime.strptime(s, '%Y-%m-%dT%H:%M:%S.%f')
        time_events = [
            time_event.TimeEvent(timestamp=time,
                                 annotation=time_event.Annotation(
                                     description='First Annotation',
                                     attributes=annotation_attributes)),
            time_event.TimeEvent(timestamp=time,
                                 message_event=time_event.MessageEvent(
                                     id='message-event-id',
                                     uncompressed_size_bytes=0,
                                 )),
        ]

        spans_ipv4 = [
            span_data_module.SpanData(
                name='child_span',
                context=span_context.SpanContext(trace_id=trace_id),
                span_id='6e0c63257de34c92',
                parent_span_id='6e0c63257de34c93',
                attributes={'test_key': 'test_value'},
                start_time='2017-08-15T18:02:26.071158Z',
                end_time='2017-08-15T18:02:36.071158Z',
                child_span_count=None,
                stack_trace=None,
                time_events=time_events,
                links=None,
                status=None,
                same_process_as_parent_span=None,
                span_kind=0,
            ),
            span_data_module.SpanData(
                name='child_span',
                context=span_context.SpanContext(trace_id=trace_id),
                span_id='6e0c63257de34c92',
                parent_span_id='6e0c63257de34c93',
                attributes={'test_key': 1},
                start_time='2017-08-15T18:02:26.071158Z',
                end_time='2017-08-15T18:02:36.071158Z',
                child_span_count=None,
                stack_trace=None,
                time_events=time_events,
                links=None,
                status=None,
                same_process_as_parent_span=None,
                span_kind=None,
            ),
        ]

        spans_ipv6 = [
            span_data_module.SpanData(
                name='child_span',
                context=span_context.SpanContext(trace_id=trace_id),
                span_id='6e0c63257de34c92',
                parent_span_id=None,
                attributes={
                    'test_key': False,
                    'test_key2': 'raw_value',
                    'test_key3': 0.1,
                },
                start_time='2017-08-15T18:02:26.071158Z',
                end_time='2017-08-15T18:02:36.071158Z',
                child_span_count=None,
                stack_trace=None,
                time_events=time_events,
                links=None,
                status=None,
                same_process_as_parent_span=None,
                span_kind=1,
            ),
        ]

        ipv4 = '127.0.0.1'
        ipv6 = '2001:0db8:85a3:0000:0000:8a2e:0370:7334'

        local_endpoint_ipv4 = {
            'serviceName': 'my_service',
            'ipv4': ipv4,
            'port': 9411,
        }

        local_endpoint_ipv6 = {
            'serviceName': 'my_service',
            'ipv6': ipv6,
            'port': 9411,
        }

        expected_zipkin_spans_ipv4 = [
            {
                'traceId':
                '6e0c63257de34c92bf9efcd03927272e',
                'id':
                '6e0c63257de34c92',
                'parentId':
                '6e0c63257de34c93',
                'name':
                'child_span',
                'timestamp':
                1502820146071158,
                'duration':
                10000000,
                'localEndpoint':
                local_endpoint_ipv4,
                'tags': {
                    'test_key': 'test_value'
                },
                'annotations': [{
                    'timestamp': 1502820146071158,
                    'value': 'First Annotation'
                }]
            },
            {
                'traceId':
                '6e0c63257de34c92bf9efcd03927272e',
                'id':
                '6e0c63257de34c92',
                'parentId':
                '6e0c63257de34c93',
                'name':
                'child_span',
                'timestamp':
                1502820146071158,
                'duration':
                10000000,
                'localEndpoint':
                local_endpoint_ipv4,
                'tags': {
                    'test_key': '1'
                },
                'annotations': [{
                    'timestamp': 1502820146071158,
                    'value': 'First Annotation'
                }]
            },
        ]

        expected_zipkin_spans_ipv6 = [
            {
                'traceId':
                '6e0c63257de34c92bf9efcd03927272e',
                'id':
                '6e0c63257de34c92',
                'name':
                'child_span',
                'timestamp':
                1502820146071158,
                'duration':
                10000000,
                'localEndpoint':
                local_endpoint_ipv6,
                'tags': {
                    'test_key': 'False',
                    'test_key2': 'raw_value',
                    'test_key3': 0.1
                },
                'kind':
                'SERVER',
                'annotations': [{
                    'timestamp': 1502820146071158,
                    'value': 'First Annotation'
                }]
            },
        ]

        # Test ipv4 local endpoint
        exporter_ipv4 = zipkin_exporter.ZipkinExporter(
            service_name='my_service', ipv4=ipv4)
        zipkin_spans_ipv4 = exporter_ipv4.translate_to_zipkin(
            span_datas=spans_ipv4)

        self.assertEqual(zipkin_spans_ipv4, expected_zipkin_spans_ipv4)

        # Test ipv6 local endpoint
        exporter_ipv6 = zipkin_exporter.ZipkinExporter(
            service_name='my_service', ipv6=ipv6)
        zipkin_spans_ipv6 = exporter_ipv6.translate_to_zipkin(
            span_datas=spans_ipv6)

        self.assertEqual(zipkin_spans_ipv6, expected_zipkin_spans_ipv6)
    def test_translate_to_zipkin_span_kind_none(self):
        span1 = {
            'displayName': {
                'value': 'child_span'
            },
            'parentSpanId': 1111111111,
            'spanId': 1234567890,
            'startTime': '2017-08-15T18:02:26.071158Z',
            'endTime': '2017-08-15T18:02:36.071158Z',
            'attributes': {
                'attributeMap': {
                    'test_key': {
                        'string_value': {
                            'value': 'test_value'
                        }
                    }
                }
            },
        }

        span2 = {
            'displayName': {
                'value': 'child_span'
            },
            'kind': 0,
            'parentSpanId': 1111111111,
            'spanId': 1234567890,
            'startTime': '2017-08-15T18:02:26.071158Z',
            'endTime': '2017-08-15T18:02:36.071158Z',
            'attributes': {
                'attributeMap': {
                    'test_key': {
                        'int_value': 1
                    }
                }
            },
        }

        span3 = {
            'displayName': {
                'value': 'child_span'
            },
            'kind': 1,
            'spanId': 1234567890,
            'startTime': '2017-08-15T18:02:26.071158Z',
            'endTime': '2017-08-15T18:02:36.071158Z',
            'attributes': {
                'attributeMap': {
                    'test_key': {
                        'bool_value': False
                    },
                    # these tags are malformed and should be omitted
                    'test_key2': 'raw_value',
                    'test_key3': {
                        'float_value': 0.1
                    },
                }
            },
        }

        trace_id = '6e0c63257de34c92bf9efcd03927272e'
        spans_ipv4 = [span1, span2]
        spans_ipv6 = [span3]

        ipv4 = '127.0.0.1'
        ipv6 = '2001:0db8:85a3:0000:0000:8a2e:0370:7334'

        local_endpoint_ipv4 = {
            'serviceName': 'my_service',
            'ipv4': ipv4,
            'port': 9411,
        }

        local_endpoint_ipv6 = {
            'serviceName': 'my_service',
            'ipv6': ipv6,
            'port': 9411,
        }

        expected_zipkin_spans_ipv4 = [
            {
                'traceId': '6e0c63257de34c92bf9efcd03927272e',
                'id': '1234567890',
                'parentId': '1111111111',
                'name': 'child_span',
                'timestamp': 1502820146000000,
                'duration': 10000000,
                'localEndpoint': local_endpoint_ipv4,
                'tags': {
                    'test_key': 'test_value'
                },
            },
            {
                'traceId': '6e0c63257de34c92bf9efcd03927272e',
                'id': '1234567890',
                'parentId': '1111111111',
                'name': 'child_span',
                'timestamp': 1502820146000000,
                'duration': 10000000,
                'localEndpoint': local_endpoint_ipv4,
                'tags': {
                    'test_key': '1'
                },
            },
        ]

        expected_zipkin_spans_ipv6 = [
            {
                'traceId': '6e0c63257de34c92bf9efcd03927272e',
                'id': '1234567890',
                'name': 'child_span',
                'timestamp': 1502820146000000,
                'duration': 10000000,
                'localEndpoint': local_endpoint_ipv6,
                'tags': {
                    'test_key': 'False'
                },
                'kind': 'SERVER',
            },
        ]

        # Test ipv4 local endpoint
        exporter_ipv4 = zipkin_exporter.ZipkinExporter(
            service_name='my_service', ipv4=ipv4)
        zipkin_spans_ipv4 = exporter_ipv4.translate_to_zipkin(
            trace_id=trace_id, spans=spans_ipv4)

        self.assertEqual(zipkin_spans_ipv4, expected_zipkin_spans_ipv4)

        # Test ipv6 local endpoint
        exporter_ipv6 = zipkin_exporter.ZipkinExporter(
            service_name='my_service', ipv6=ipv6)
        zipkin_spans_ipv6 = exporter_ipv6.translate_to_zipkin(
            trace_id=trace_id, spans=spans_ipv6)

        self.assertEqual(zipkin_spans_ipv6, expected_zipkin_spans_ipv6)
from prometheus_client import Summary

import echo_pb2
import echo_pb2_grpc

_ONE_DAY_IN_SECONDS = 60 * 60 * 24

# Create a metric to track time spent and requests made.
ECHO_REQUEST_TIME = Summary('echo_request_processing_seconds',
                            'Time spent processing Echo request')
STREAMING_ECHO_REQUEST_TIME = Summary(
    'streaming_echo_request_processing_seconds',
    'Time spent processing StreamingEcho request')

sampler = always_on.AlwaysOnSampler()
exporter = zipkin_exporter.ZipkinExporter(service_name="server:50051",
                                          host_name="zipkin")


def GetTracingMetadata(context):
    metadata_tuples = context.invocation_metadata()
    metadata_dict = {}
    metadata_list = []
    for i in range(len(metadata_tuples)):
        metadatum = metadata_tuples[i]
        logging.debug("Checking metadatum: " + metadatum.key)
        if metadatum.key in [
                'x-request-id', 'x-b3-traceid', 'x-b3-spanid',
                'x-b3-parentspanid', 'x-b3-sampled', 'x-b3-flags',
                'x-ot-span-context'
        ]:
            metadata_dict[metadatum.key] = metadatum.value
    def test_translate_to_zipkin_span_kind_none(self):
        span1 = {
            'name': 'child_span',
            'parentSpanId': 1111111111,
            'spanId': 1234567890,
            'startTime': '2017-08-15T18:02:26.071158Z',
            'endTime': '2017-08-15T18:02:36.071158Z',
            'attributes': {
                'key': 'test_key',
                'value': 'test_value',
            },
        }

        span2 = {
            'name': 'child_span',
            'kind': 0,
            'parentSpanId': 1111111111,
            'spanId': 1234567890,
            'startTime': '2017-08-15T18:02:26.071158Z',
            'endTime': '2017-08-15T18:02:36.071158Z',
            'attributes': {
                'key': 'test_key',
                'value': 'test_value',
            },
        }

        span3 = {
            'name': 'child_span',
            'kind': 1,
            'spanId': 1234567890,
            'startTime': '2017-08-15T18:02:26.071158Z',
            'endTime': '2017-08-15T18:02:36.071158Z',
            'attributes': {
                'key': 'test_key',
                'value': 'test_value',
            },
        }

        trace_id = '6e0c63257de34c92bf9efcd03927272e'
        spans = [span1, span2, span3]

        local_endpoint = {
            'serviceName': 'my_service',
            'ipv4': 'localhost',
            'port': 9411,
        }

        expected_zipkin_spans = [{
            'traceId': '6e0c63257de34c92bf9efcd03927272e',
            'id': '1234567890',
            'parentId': '1111111111',
            'name': 'child_span',
            'timestamp': 1502820146000000,
            'duration': 10000000,
            'localEndpoint': local_endpoint,
            'tags': {
                'key': 'test_key',
                'value': 'test_value',
            },
        }, {
            'traceId': '6e0c63257de34c92bf9efcd03927272e',
            'id': '1234567890',
            'parentId': '1111111111',
            'name': 'child_span',
            'timestamp': 1502820146000000,
            'duration': 10000000,
            'localEndpoint': local_endpoint,
            'tags': {
                'key': 'test_key',
                'value': 'test_value',
            },
        }, {
            'traceId': '6e0c63257de34c92bf9efcd03927272e',
            'id': '1234567890',
            'name': 'child_span',
            'timestamp': 1502820146000000,
            'duration': 10000000,
            'localEndpoint': local_endpoint,
            'tags': {
                'key': 'test_key',
                'value': 'test_value',
            },
            'kind': 'SERVER',
        }]

        exporter = zipkin_exporter.ZipkinExporter(service_name='my_service')
        zipkin_spans = exporter.translate_to_zipkin(trace_id=trace_id,
                                                    spans=spans)

        self.assertEqual(zipkin_spans, expected_zipkin_spans)
    def test_translate_to_zipkin_span_kind_none(self):
        span1 = {
            'displayName': {
                'value': 'child_span'
            },
            'parentSpanId': 1111111111,
            'spanId': 1234567890,
            'startTime': '2017-08-15T18:02:26.071158Z',
            'endTime': '2017-08-15T18:02:36.071158Z',
            'attributes': {
                'attributeMap': {
                    'test_key': {
                        'string_value': {
                            'value': 'test_value'
                        }
                    }
                }
            },
        }

        span2 = {
            'displayName': {
                'value': 'child_span'
            },
            'kind': 0,
            'parentSpanId': 1111111111,
            'spanId': 1234567890,
            'startTime': '2017-08-15T18:02:26.071158Z',
            'endTime': '2017-08-15T18:02:36.071158Z',
            'attributes': {
                'attributeMap': {
                    'test_key': {
                        'int_value': 1
                    }
                }
            },
        }

        span3 = {
            'displayName': {
                'value': 'child_span'
            },
            'kind': 1,
            'spanId': 1234567890,
            'startTime': '2017-08-15T18:02:26.071158Z',
            'endTime': '2017-08-15T18:02:36.071158Z',
            'attributes': {
                'attributeMap': {
                    'test_key': {
                        'bool_value': False
                    },
                    # these tags are malformed and should be omitted
                    'test_key2': 'raw_value',
                    'test_key3': {
                        'float_value': 0.1
                    },
                }
            },
        }

        trace_id = '6e0c63257de34c92bf9efcd03927272e'
        spans = [span1, span2, span3]

        local_endpoint = {
            'serviceName': 'my_service',
            'ipv4': 'localhost',
            'port': 9411,
        }

        expected_zipkin_spans = [{
            'traceId': '6e0c63257de34c92bf9efcd03927272e',
            'id': '1234567890',
            'parentId': '1111111111',
            'name': 'child_span',
            'timestamp': 1502820146000000,
            'duration': 10000000,
            'localEndpoint': local_endpoint,
            'tags': {
                'test_key': 'test_value'
            },
        }, {
            'traceId': '6e0c63257de34c92bf9efcd03927272e',
            'id': '1234567890',
            'parentId': '1111111111',
            'name': 'child_span',
            'timestamp': 1502820146000000,
            'duration': 10000000,
            'localEndpoint': local_endpoint,
            'tags': {
                'test_key': '1'
            },
        }, {
            'traceId': '6e0c63257de34c92bf9efcd03927272e',
            'id': '1234567890',
            'name': 'child_span',
            'timestamp': 1502820146000000,
            'duration': 10000000,
            'localEndpoint': local_endpoint,
            'tags': {
                'test_key': 'False'
            },
            'kind': 'SERVER',
        }]

        exporter = zipkin_exporter.ZipkinExporter(service_name='my_service')
        zipkin_spans = exporter.translate_to_zipkin(trace_id=trace_id,
                                                    spans=spans)

        self.assertEqual(zipkin_spans, expected_zipkin_spans)