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)
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)
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)
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)