This service is responsible to get a list of recommended products for the user based on existing product ids the user is browsing.
This Python based service, makes use of the OpenTelemetry auto-instrumentor
for Python, accomplished by leveraging the opentelemetry-instrument
Python
wrapper to run the scripts. This can be done in the ENTRYPOINT
command for the
service's Dockerfile
.
ENTRYPOINT [ "opentelemetry-instrument", "python", "recommendation_server.py" ]
The OpenTelemetry SDK is initialized in the __main__
code block. This code
will create a tracer provider, and establish a Span Processor to use. Export
endpoints, resource attributes, and service name are automatically set by the
OpenTelemetry auto instrumentor based on environment variables.
tracer_provider = TracerProvider()
trace.set_tracer_provider(tracer_provider)
tracer_provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter()))
tracer = trace.get_tracer("recommendationservice")
Within the execution of auto-instrumented code you can get current span from context.
span = trace.get_current_span()
Adding attributes to a span is accomplished using set_attribute
on the span
object. In the ListRecommendations
function an attribute is added to the span.
span.set_attribute("app.products_recommended.count", len(prod_list))
New spans can be created and placed into active context using
start_as_current_span
from an OpenTelemetry Tracer object. When used in
conjunction with a with
block, the span will automatically be ended when the
block ends execution. This is done in the get_product_list
function.
with tracer.start_as_current_span("get_product_list") as span:
TBD
TBD