|
| 1 | +from lightstep.collector_pb2 import Auth, ReportRequest, Span, Reporter, KeyValue, Reference, SpanContext |
| 2 | +from lightstep.converter import Converter |
| 3 | +from . import util |
| 4 | +from . import version as tracer_version |
| 5 | +import sys |
| 6 | +from google.protobuf.timestamp_pb2 import Timestamp |
| 7 | + |
| 8 | + |
| 9 | +class HttpConverter(Converter): |
| 10 | + |
| 11 | + def create_auth(self, access_token): |
| 12 | + auth = Auth() |
| 13 | + auth.access_token = access_token |
| 14 | + return auth |
| 15 | + |
| 16 | + def create_runtime(self, component_name, tags, guid): |
| 17 | + if component_name is None: |
| 18 | + component_name = sys.argv[0] |
| 19 | + |
| 20 | + python_version = '.'.join(map(str, sys.version_info[0:3])) |
| 21 | + |
| 22 | + if tags is None: |
| 23 | + tags = {} |
| 24 | + tracer_tags = tags.copy() |
| 25 | + |
| 26 | + tracer_tags.update({ |
| 27 | + 'lightstep.tracer_platform': 'python', |
| 28 | + 'lightstep.tracer_platform_version': python_version, |
| 29 | + 'lightstep.tracer_version': tracer_version.LIGHTSTEP_PYTHON_TRACER_VERSION, |
| 30 | + 'lightstep.component_name': component_name, |
| 31 | + 'lightstep.guid': util._id_to_hex(guid), |
| 32 | + }) |
| 33 | + |
| 34 | + # Convert tracer_tags to a list of KeyValue pairs. |
| 35 | + runtime_attrs = [KeyValue(key=k, string_value=util._coerce_str(v)) for (k, v) in tracer_tags.items()] |
| 36 | + |
| 37 | + return Reporter(reporter_id=guid, tags=runtime_attrs) |
| 38 | + |
| 39 | + def create_span_record(self, span, guid): |
| 40 | + span_context = SpanContext(trace_id=span.context.trace_id, |
| 41 | + span_id=span.context.span_id) |
| 42 | + span_record = Span(span_context=span_context, |
| 43 | + operation_name=util._coerce_str(span.operation_name), |
| 44 | + start_timestamp=Timestamp(seconds=int(span.start_time)), |
| 45 | + duration_micros=int(util._time_to_micros(span.duration))) |
| 46 | + if span.parent_id is not None: |
| 47 | + reference = span_record.references.add() |
| 48 | + reference.relationship=Reference.CHILD_OF |
| 49 | + reference.span_context.span_id=span.parent_id |
| 50 | + |
| 51 | + return span_record |
| 52 | + |
| 53 | + def append_attribute(self, span_record, key, value): |
| 54 | + kv = span_record.tags.add() |
| 55 | + kv.key = key |
| 56 | + kv.string_value = value |
| 57 | + |
| 58 | + def append_join_id(self, span_record, key, value): |
| 59 | + self.append_attribute(span_record, key, value) |
| 60 | + |
| 61 | + def append_log(self, span_record, log): |
| 62 | + if log.key_values is not None and len(log.key_values) > 0: |
| 63 | + proto_log = span_record.logs.add() |
| 64 | + proto_log.timestamp.seconds=int(log.timestamp) |
| 65 | + for k, v in log.key_values.items(): |
| 66 | + field = proto_log.fields.add() |
| 67 | + field.key = k |
| 68 | + field.string_value = util._coerce_str(v) |
| 69 | + |
| 70 | + def create_report(self, runtime, span_records): |
| 71 | + return ReportRequest(reporter=runtime, spans=span_records) |
| 72 | + |
| 73 | + def combine_span_records(self, report_request, span_records): |
| 74 | + report_request.spans.extend(span_records) |
| 75 | + return report_request.spans |
| 76 | + |
| 77 | + def num_span_records(self, report_request): |
| 78 | + return len(report_request.spans) |
| 79 | + |
| 80 | + def get_span_records(self, report_request): |
| 81 | + return report_request.spans |
| 82 | + |
| 83 | + def get_span_name(self, span_record): |
| 84 | + return span_record.operation_name |
0 commit comments