def status_from_http_code(http_code): """Returns equivalent status from http status code based on OpenCensus specs. :type http_code: int :param http_code: HTTP request status code. :rtype: int :returns: A instance of :class: `~opencensus.trace.status.Status`. """ if http_code <= 199: return Status(code_pb2.UNKNOWN) if http_code <= 399: return Status(code_pb2.OK) grpc_code = { 400: code_pb2.INVALID_ARGUMENT, 401: code_pb2.UNAUTHENTICATED, 403: code_pb2.PERMISSION_DENIED, 404: code_pb2.NOT_FOUND, 429: code_pb2.RESOURCE_EXHAUSTED, 501: code_pb2.UNIMPLEMENTED, 503: code_pb2.UNAVAILABLE, 504: code_pb2.DEADLINE_EXCEEDED, }.get(http_code, code_pb2.UNKNOWN) return Status(grpc_code)
def exception(self, exception: Exception): """ Sends the exception to App Insights :param exception: Actual exception to be sent :return: """ self.logger.exception(exception, extra=self.custom_dimensions) # Mark current span/operation with internal error if self.current_span() is not None: self.current_span().status = Status(2, exception) self.current_span().attributes['http.status_code'] = 500
def find_food(): tracer = get_opencensus_tracer() with tracer.span(name="finding_food") as finding_food_span: start = time.time() mmap = stats_recorder.new_measurement_map() target_food = request.args['target_food'] finding_food_span.add_annotation( "Looking for food {}".format(target_food)) food_options = [] with tracer.span(name="querying_supplier") as _: vendors_with_target = _query_supplier(target_food) no_vendor_fails = True for vendor in vendors_with_target: with tracer.span( name="querying_vendor_{}".format(vendor)) as vendor_span: vendor_request = vendor + "/get_food?target_food={}".format( target_food) try: option = json.loads(requests.get(vendor_request).content) food_options.append( FoodOption(vendor, option['stock'], option['price'])) except Exception as e: vendor_span.status = Status( 500, 'Vendor request {} failed with error {}'.format( vendor_request, e)) no_vendor_fails = False finding_food_span.add_annotation( "{} vendor responses".format(len(food_options)), no_vendor_found=(len(food_options) == 0)) if len(food_options) == 0: return_string = 'No options found :(' else: return_string = 'You have {} options<br/>'.format( len(food_options)) for food_option in food_options: return_string += '{} has {} left at {} price<br/>' \ .format(food_option.vendor_url, food_option.stock, food_option.price) tmap = tag_map_module.TagMap() tmap.insert(key_method, tag_value_module.TagValue("find_food")) if no_vendor_fails: tmap.insert(key_status, tag_value_module.TagValue("OK")) else: tmap.insert(key_status, tag_value_module.TagValue("Vendor request failed")) end_ms = (time.time() - start) * 1000.0 # Seconds to milliseconds mmap.measure_float_put(m_latency_ms, end_ms) mmap.measure_int_put(m_num_requests, 1) mmap.record(tmap) return return_string
def test_do_not_crash(self): span_id = 'test_span_id' span_name = 'test_span_name' patch = mock.patch('opencensus.trace.blank_span.generate_span_id', return_value=span_id) with patch: span = self._make_one(span_name) self.assertEqual(span.name, span_name) self.assertEqual(span.span_id, span_id) self.assertIsNotNone(span.parent_span) self.assertIsNotNone(span.parent_span.span()) self.assertEqual(span.attributes, {}) self.assertIsNone(span.start_time) self.assertIsNone(span.end_time) self.assertEqual(span.children, []) self.assertIsNone(span.context_tracer) span.add_attribute('attribute_key', 'attribute_value') span.add_annotation('This is a test', name='blank-span') link = Link(span_id='1234', trace_id='4567') span.add_link(link) status = Status(0, 'Ok', {'details': 'ok'}) span.set_status(status) message_event = mock.Mock() message_event = MessageEvent(datetime.datetime.utcnow(), mock.Mock()) span.add_message_event(message_event) span_iter_list = list(iter(span)) self.assertEqual(span_iter_list, [span]) expected_span_json = { 'spanId': 'test_span_id', 'startTime': None, 'endTime': None, 'displayName': { 'truncated_byte_count': 0, 'value': 'test_span_name' }, 'childSpanCount': 0, } span_json = format_span_json(span) self.assertEqual(span_json, expected_span_json) span.start() span.finish()
def home(): locations = [] # Setup custom tracer # Get the Tracer object tracer = execution_context.get_opencensus_tracer() # Name should be descriptive with tracer.span(name="datastore.query()") as span: kind = "Hive" locations = [] for latlng in datastore_client.query(kind=kind).fetch(): locations.append({ 'loc': { "lat": latlng["LatLng"]['latitude'], "lon": latlng["LatLng"]['longitude'], }, "description": gettext("Authored by %(Firstname)s %(Familyname)s", Firstname=latlng['Firstname'], Familyname=latlng['Familyname']) }) location_count = len(locations) logger.debug("Found %d HiveLocation entries for map." % location_count) # Add info into our trace # Annotation: https://opencensus.io/tracing/span/time_events/annotation/ # Status: https://opencensus.io/tracing/span/status/ # For annotation first param is description, additional are freeform attributes span.add_annotation("Query all hive locations from datastore", kind=kind, count=location_count) if location_count > 0: span.status = Status(0, "Found %d hive locations." % location_count) else: # Not found span.status = Status(5, "Zero locations found.") return render_template("mymap.html", hive_locations=locations)
def doWork(): # 5. Start another span. Because this is within the scope of the "main" span, # this will automatically be a child span. with tracer.span(name="doWork") as span: msg = "doing busy work" print(msg) # - warning should show as a trace in app insights logger.warning(msg) try: time.sleep(0.1) except: # 6. Set status upon error span.status = Status(5, "Error occurred") # 7. Annotate our span to capture metadata about our operation span.add_annotation("invoking doWork")
def test_set_status(self): span_name = 'test_span_name' span = self._make_one(span_name) status = mock.Mock() with self.assertRaises(TypeError): span.set_status(status) code = 1 message = 'ok' details = {'object': 'ok'} status = Status(code=code, message=message, details=details) span.set_status(status) self.assertEqual(span.status.canonical_code, code) self.assertEqual(span.status.description, message) self.assertEqual(span.status.details, details)
def doExtraWork(counter): with tracer.span(name="doExtraWork") as span: msg = "doing other busy work" print(msg) # - info won't show in app insights logger.info(msg) try: time.sleep(0.1) print(1 / 0) except: # 6. Set status upon error print("Error!") logger.error("error should be a trace in app insights") logger.exception('Captured an exception') span.status = Status(5, "Error occurred") # 7. Annotate our span to capture metadata about our operation span.add_annotation(f"invoking doWork for:{counter}")
def test_format_span_json_with_parent_span(self, time_event_mock, status_mock, stack_trace_mock): import datetime from opencensus.trace.link import Link from opencensus.trace.span import format_span_json name = 'test span' span_id = 1234 trace_id = '3456' attributes = { '/http/status_code': '200', '/component': 'HTTP load balancer', 'none_key': None } links = { 'link': [ { 'trace_id': trace_id, 'span_id': span_id, 'type': 0 }, ], } start_time = '2017-06-25' end_time = '2017-06-26' parent_span = mock.Mock() parent_span_id = 5678 parent_span.span_id = parent_span_id span = mock.Mock() span.parent_span = parent_span span.name = name span.attributes = attributes span.span_id = span_id span.start_time = start_time span.end_time = end_time span._child_spans = [] span.time_events = [TimeEvent(datetime.datetime.now())] span.stack_trace = StackTrace() span.status = Status(code='200', message='test') span.links = [Link(trace_id, span_id)] span.same_process_as_parent_span = True mock_stack_trace = 'stack trace' mock_status = 'status' mock_time_event = 'time event' stack_trace_mock.return_value = mock_stack_trace status_mock.return_value = mock_status time_event_mock.return_value = mock_time_event expected_span_json = { 'spanId': span_id, 'parentSpanId': parent_span_id, 'startTime': start_time, 'endTime': end_time, 'attributes': { 'attributeMap': { '/component': { 'string_value': { 'truncated_byte_count': 0, 'value': 'HTTP load balancer' } }, '/http/status_code': { 'string_value': { 'truncated_byte_count': 0, 'value': '200' } } } }, 'links': links, 'stackTrace': mock_stack_trace, 'status': mock_status, 'timeEvents': { 'timeEvent': [mock_time_event] }, 'displayName': { 'truncated_byte_count': 0, 'value': 'test span' }, 'childSpanCount': 0, 'sameProcessAsParentSpan': True } span_json = format_span_json(span) print(span_json) print(expected_span_json) self.assertEqual(span_json, expected_span_json)
def test_span_data_to_envelope(self): from opencensus.trace.span import SpanKind from opencensus.trace.span_context import SpanContext from opencensus.trace.span_data import SpanData from opencensus.trace.status import Status from opencensus.trace.trace_options import TraceOptions from opencensus.trace.tracestate import Tracestate exporter = trace_exporter.AzureExporter( instrumentation_key='12345678-1234-5678-abcd-12345678abcd', storage_path=os.path.join(TEST_FOLDER, self.id()), ) # SpanKind.CLIENT HTTP envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'component': 'HTTP', 'http.method': 'GET', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 200, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=[ Link('6e0c63257de34c90bf9efcd03927272e', '6e0c63257de34c91') ], status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.CLIENT, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.RemoteDependency') self.assertEqual( envelope.tags['ai.operation.parentId'], '6e0c63257de34c93') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.name, 'GET /wiki/Rabbit') self.assertEqual( envelope.data.baseData.data, 'https://www.wikipedia.org/wiki/Rabbit') self.assertEqual( envelope.data.baseData.target, 'www.wikipedia.org') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.resultCode, '200') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.type, 'HTTP') self.assertEqual( envelope.data.baseType, 'RemoteDependencyData') json_dict = json.loads( envelope.data.baseData.properties["_MS.links"] )[0] self.assertEqual( json_dict["id"], "6e0c63257de34c91", ) self.assertEqual( json_dict["operation_Id"], "6e0c63257de34c90bf9efcd03927272e", ) # SpanKind.CLIENT unknown type envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={}, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.CLIENT, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.RemoteDependency') self.assertEqual( envelope.tags['ai.operation.parentId'], '6e0c63257de34c93') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.name, 'test') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.type, None) self.assertEqual( envelope.data.baseType, 'RemoteDependencyData') # SpanKind.CLIENT missing method envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'component': 'HTTP', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 200, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.CLIENT, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.RemoteDependency') self.assertEqual( envelope.tags['ai.operation.parentId'], '6e0c63257de34c93') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.name, 'test') self.assertEqual( envelope.data.baseData.data, 'https://www.wikipedia.org/wiki/Rabbit') self.assertEqual( envelope.data.baseData.target, 'www.wikipedia.org') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.resultCode, '200') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.type, 'HTTP') self.assertEqual( envelope.data.baseType, 'RemoteDependencyData') # SpanKind.SERVER HTTP - 200 request envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'component': 'HTTP', 'http.method': 'GET', 'http.path': '/wiki/Rabbit', 'http.route': '/wiki/Rabbit', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 200, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.Request') self.assertEqual( envelope.tags['ai.operation.parentId'], '6e0c63257de34c93') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.tags['ai.operation.name'], 'GET /wiki/Rabbit') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.responseCode, '200') self.assertEqual( envelope.data.baseData.name, 'GET /wiki/Rabbit') self.assertEqual( envelope.data.baseData.properties['request.name'], 'GET /wiki/Rabbit') self.assertEqual( envelope.data.baseData.success, True) self.assertEqual( envelope.data.baseData.url, 'https://www.wikipedia.org/wiki/Rabbit') self.assertEqual( envelope.data.baseData.properties['request.url'], 'https://www.wikipedia.org/wiki/Rabbit') self.assertEqual( envelope.data.baseType, 'RequestData') # SpanKind.SERVER HTTP - Failed request envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'component': 'HTTP', 'http.method': 'GET', 'http.path': '/wiki/Rabbit', 'http.route': '/wiki/Rabbit', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 400, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.Request') self.assertEqual( envelope.tags['ai.operation.parentId'], '6e0c63257de34c93') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.tags['ai.operation.name'], 'GET /wiki/Rabbit') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.responseCode, '400') self.assertEqual( envelope.data.baseData.name, 'GET /wiki/Rabbit') self.assertEqual( envelope.data.baseData.success, False) self.assertEqual( envelope.data.baseData.url, 'https://www.wikipedia.org/wiki/Rabbit') self.assertEqual( envelope.data.baseType, 'RequestData') # SpanKind.SERVER unknown type envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={}, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.Request') self.assertEqual( envelope.tags['ai.operation.parentId'], '6e0c63257de34c93') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseType, 'RequestData') # SpanKind.UNSPECIFIED envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id=None, attributes={'key1': 'value1'}, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.UNSPECIFIED, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.RemoteDependency') self.assertRaises( KeyError, lambda: envelope.tags['ai.operation.parentId']) self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.name, 'test') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.type, 'INPROC') self.assertEqual( envelope.data.baseData.success, True ) self.assertEqual( envelope.data.baseType, 'RemoteDependencyData') # Status server status code attribute envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'http.status_code': 201 }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertEqual(envelope.data.baseData.responseCode, "201") self.assertTrue(envelope.data.baseData.success) # Status server status code attribute missing envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={}, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(1), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertFalse(envelope.data.baseData.success) # Server route attribute missing envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'component': 'HTTP', 'http.method': 'GET', 'http.path': '/wiki/Rabbitz', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 400, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(1), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertEqual(envelope.data.baseData.properties['request.name'], 'GET /wiki/Rabbitz') # Server route and path attribute missing envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'component': 'HTTP', 'http.method': 'GET', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 400, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(1), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertIsNone( envelope.data.baseData.properties.get('request.name')) # Status client status code attribute envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'http.status_code': 201 }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.CLIENT, )) self.assertEqual(envelope.data.baseData.resultCode, "201") self.assertTrue(envelope.data.baseData.success) # Status client status code attributes missing envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={}, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(1), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.CLIENT, )) self.assertFalse(envelope.data.baseData.success) exporter._stop()
# Copyright 2017, OpenCensus Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from google.rpc import code_pb2 from opencensus.trace.status import Status CANCELLED = Status(code_pb2.CANCELLED) INVALID_URL = Status(code_pb2.INVALID_ARGUMENT, message='invalid URL') TIMEOUT = Status(code_pb2.DEADLINE_EXCEEDED, message='request timed out') def unknown(exception): return Status.from_exception(exception)