File: opentelemetry.py

package info (click to toggle)
python-clickhouse-driver 0.2.5-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,516 kB
  • sloc: python: 10,950; pascal: 42; makefile: 31; sh: 3
file content (43 lines) | stat: -rw-r--r-- 1,622 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

class OpenTelemetryTraceContext(object):
    traceparent_tpl = 'xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx-xx'
    translation = str.maketrans('1234567890abcdef', 'xxxxxxxxxxxxxxxx')

    def __init__(self, traceparent, tracestate):
        # xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx-xx
        # ^              ^                           ^         ^
        # version     trace_id                    span_id      flags

        self.trace_id = None  # UUID
        self.span_id = None  # UInt64
        self.tracestate = tracestate  # String
        self.trace_flags = None  # UInt8

        if traceparent is not None:
            self.parse_traceparent(traceparent)

        super(OpenTelemetryTraceContext, self).__init__()

    def parse_traceparent(self, traceparent):
        traceparent = traceparent.lower()

        if len(traceparent) != len(self.traceparent_tpl):
            raise ValueError('unexpected length {}, expected {}'.format(
                len(traceparent), len(self.traceparent_tpl)
            ))

        if traceparent.translate(self.translation) != self.traceparent_tpl:
            raise ValueError(
                'Malformed traceparant header: {}'.format(traceparent)
            )

        parts = traceparent.split('-')
        version = int(parts[0], 16)
        if version != 0:
            raise ValueError(
                'unexpected version {}, expected 00'.format(parts[0])
            )

        self.trace_id = (int(parts[1][16:], 16) << 64) + int(parts[1][:16], 16)
        self.span_id = int(parts[2], 16)
        self.trace_flags = int(parts[3], 16)