-
Notifications
You must be signed in to change notification settings - Fork 0
/
child.py
71 lines (57 loc) · 2.03 KB
/
child.py
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
"""
Child process to test Span propagation with OpenTelemetry
and Jaeger.
"""
from opentelemetry import trace, context
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.context import Context
import logging
import time
import json
# Enable OpenTelemetry
app_name: str = "Batch Job"
trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(instrumenting_module_name=app_name)
# Logger
logger_format: str = (
"[%(asctime)4s : %(levelname)4s][%(filename)4s : %(name)4s : %(lineno)4s : %(funcName)4s] "
"%(message)4s"
)
logging.basicConfig(format=logger_format)
logger: logging.Logger = logging.getLogger()
logger.setLevel(logging.INFO)
def get_span_context(filename: str) -> Context:
with open(file=filename, mode="r", encoding="utf-8") as cf:
carrier_dict = json.load(fp=cf)
print(f"Carrier dictionary: {carrier_dict}")
# Retrieve parent span context information
ctx = TraceContextTextMapPropagator().extract(carrier=carrier_dict)
print("Context from TraceContext: ", ctx)
return ctx
@tracer.start_as_current_span(name="subprocess_1")
def subprocess_1():
print("Executing Subprocess 1")
time.sleep(2)
return "Subprocess 1"
@tracer.start_as_current_span(name="subprocess_2")
def subprocess_2():
print("Executing Subprocess 2")
time.sleep(2)
return "Subprocess 2"
@tracer.start_as_current_span(name="child_process")
def child():
s = trace.get_current_span()
print(f"Span type: {type(s)}")
s.set_attribute("child", "Executing Child Processes")
s.add_event(name="test", attributes={"msg": "Test event from child parent execution"})
logger.info("Executing Child Wrapper")
subprocess_1()
subprocess_2()
if __name__ == '__main__':
# Retrieve the context using the trace parent from file
ctx: Context = get_span_context(filename="test.json")
logger.info("Context data: ", ctx)
# Set the context globally
context.attach(context=ctx)
child()