Skip to content

Commit 4dc938b

Browse files
committed
Make OTEL support optional so that app can successfully load without opentelemetry packages installed
1 parent b4961df commit 4dc938b

1 file changed

Lines changed: 41 additions & 36 deletions

File tree

cohd/app.py

Lines changed: 41 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,18 @@
44
from flask_cors import CORS
55
from flask_caching import Cache
66

7-
from opentelemetry.instrumentation.flask import FlaskInstrumentor
8-
from opentelemetry import trace
9-
from opentelemetry.sdk.resources import SERVICE_NAME as telemetery_service_name_key, Resource
10-
from opentelemetry.sdk.trace import TracerProvider
11-
from opentelemetry.sdk.trace.export import BatchSpanProcessor
12-
from opentelemetry.exporter.jaeger.thrift import JaegerExporter
13-
from opentelemetry.instrumentation.requests import RequestsInstrumentor
14-
from opentelemetry.instrumentation.pymysql import PyMySQLInstrumentor
7+
try:
8+
from opentelemetry.instrumentation.flask import FlaskInstrumentor
9+
from opentelemetry import trace
10+
from opentelemetry.sdk.resources import SERVICE_NAME as telemetery_service_name_key, Resource
11+
from opentelemetry.sdk.trace import TracerProvider
12+
from opentelemetry.sdk.trace.export import BatchSpanProcessor
13+
from opentelemetry.exporter.jaeger.thrift import JaegerExporter
14+
from opentelemetry.instrumentation.requests import RequestsInstrumentor
15+
from opentelemetry.instrumentation.pymysql import PyMySQLInstrumentor
16+
OTEL_ENABLED = True
17+
except ImportError:
18+
OTEL_ENABLED = False
1519

1620
#########
1721
# INITS #
@@ -48,32 +52,33 @@
4852
}
4953
})
5054

51-
logging.info('About to instrument app for OTEL')
52-
# set the service name for our trace provider
53-
# this will tag every trace with the service name given
54-
otel_service_name = app.config.get('OTEL_SERVICE_NAME', 'COHD')
55-
tp = TracerProvider(
56-
resource=Resource.create({telemetery_service_name_key: otel_service_name})
57-
)
58-
# create an exporter to jaeger
59-
jaeger_host = app.config.get('JAEGER_HOST', 'jaeger-otel-agent.sri')
60-
jaeger_port = app.config.get('JAEGER_PORT', 6831)
61-
deployment_env = app.config.get('DEPLOYMENT_ENV', 'dev')
62-
jaeger_exporter = JaegerExporter(
63-
agent_host_name=jaeger_host,
64-
agent_port=jaeger_port,
55+
if OTEL_ENABLED:
56+
logging.info('About to instrument app for OTEL')
57+
# set the service name for our trace provider
58+
# this will tag every trace with the service name given
59+
otel_service_name = app.config.get('OTEL_SERVICE_NAME', 'COHD')
60+
tp = TracerProvider(
61+
resource=Resource.create({telemetery_service_name_key: otel_service_name})
6562
)
66-
# here we use the exporter to export each span in a trace
67-
tp.add_span_processor(
68-
BatchSpanProcessor(jaeger_exporter)
69-
)
70-
trace.set_tracer_provider(
71-
tp
72-
)
73-
otel_excluded_urls = 'health,api/health,api/dev/.*'
74-
tracer = trace.get_tracer(__name__)
75-
FlaskInstrumentor().instrument_app(app,
76-
excluded_urls=otel_excluded_urls)
77-
RequestsInstrumentor().instrument()
78-
PyMySQLInstrumentor().instrument()
79-
logging.info('Finished instrumenting app for OTEL')
63+
# create an exporter to jaeger
64+
jaeger_host = app.config.get('JAEGER_HOST', 'jaeger-otel-agent.sri')
65+
jaeger_port = app.config.get('JAEGER_PORT', 6831)
66+
deployment_env = app.config.get('DEPLOYMENT_ENV', 'dev')
67+
jaeger_exporter = JaegerExporter(
68+
agent_host_name=jaeger_host,
69+
agent_port=jaeger_port,
70+
)
71+
# here we use the exporter to export each span in a trace
72+
tp.add_span_processor(
73+
BatchSpanProcessor(jaeger_exporter)
74+
)
75+
trace.set_tracer_provider(
76+
tp
77+
)
78+
otel_excluded_urls = 'health,api/health,api/dev/.*'
79+
tracer = trace.get_tracer(__name__)
80+
FlaskInstrumentor().instrument_app(app,
81+
excluded_urls=otel_excluded_urls)
82+
RequestsInstrumentor().instrument()
83+
PyMySQLInstrumentor().instrument()
84+
logging.info('Finished instrumenting app for OTEL')

0 commit comments

Comments
 (0)