From 294bc618eb86743dce499fe0dc08c0d155fb1a39 Mon Sep 17 00:00:00 2001 From: Alberto Vara Date: Fri, 13 Dec 2019 17:04:40 +0100 Subject: [PATCH 1/3] fix tracers and logging Working outside of application context --- examples/microservice_requests/main.py | 1 + pyms/flask/services/tracer.py | 28 ++++++++++++++------------ pyms/logger/logger.py | 2 +- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/examples/microservice_requests/main.py b/examples/microservice_requests/main.py index 12c1874..3d11381 100644 --- a/examples/microservice_requests/main.py +++ b/examples/microservice_requests/main.py @@ -1,4 +1,5 @@ from examples.microservice_requests import ms + app = ms.create_app() if __name__ == '__main__': diff --git a/pyms/flask/services/tracer.py b/pyms/flask/services/tracer.py index eda96e1..a540444 100644 --- a/pyms/flask/services/tracer.py +++ b/pyms/flask/services/tracer.py @@ -1,7 +1,7 @@ import logging import opentracing -from flask import current_app, request +from flask import current_app, request, has_request_context from jaeger_client.metrics.prometheus import PrometheusMetricsFactory from opentracing_instrumentation import get_current_span @@ -19,18 +19,20 @@ def inject_span_in_headers(headers): - # FLASK https://github.com/opentracing-contrib/python-flask - tracer = current_app.tracer - # Add traces - span = None - if tracer: - span = tracer.get_span(request=request) - if not span: # pragma: no cover - span = get_current_span() - if not span: - span = tracer.tracer.start_span() - context = span.context if span else None - tracer.tracer.inject(context, opentracing.Format.HTTP_HEADERS, headers) + if has_request_context(): + # FLASK https://github.com/opentracing-contrib/python-flask + tracer = current_app.tracer if getattr(current_app, "tracer") else None + # Add traces + span = None + current_app.app_context() + if tracer: + span = tracer.get_span(request=request) + if not span: # pragma: no cover + span = get_current_span() + if not span: + span = tracer.tracer.start_span() + context = span.context if span else None + tracer.tracer.inject(context, opentracing.Format.HTTP_HEADERS, headers) return headers diff --git a/pyms/logger/logger.py b/pyms/logger/logger.py index 922b47a..3afffbf 100644 --- a/pyms/logger/logger.py +++ b/pyms/logger/logger.py @@ -33,7 +33,7 @@ def add_fields(self, log_record, record, message_dict): log_record["span"] = headers.get('X-B3-SpanId', "") log_record["parent"] = headers.get('X-B3-ParentSpanId', "") except Exception as ex: - logger.error("Tracer error {}".format(ex)) + logger.error("Tracer error: {}".format(ex)) def add_service_name(self, project_name): self.service_name = project_name.lower() From 3c1c4cc334c6210c7e6596119a48e53d4fb0c6b8 Mon Sep 17 00:00:00 2001 From: Alberto Vara Date: Fri, 13 Dec 2019 18:05:26 +0100 Subject: [PATCH 2/3] No cover exception --- pyms/logger/logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyms/logger/logger.py b/pyms/logger/logger.py index 3afffbf..60c9bf2 100644 --- a/pyms/logger/logger.py +++ b/pyms/logger/logger.py @@ -32,7 +32,7 @@ def add_fields(self, log_record, record, message_dict): log_record["trace"] = headers.get('X-B3-TraceId', "") log_record["span"] = headers.get('X-B3-SpanId', "") log_record["parent"] = headers.get('X-B3-ParentSpanId', "") - except Exception as ex: + except Exception as ex: # pragma: no cover logger.error("Tracer error: {}".format(ex)) def add_service_name(self, project_name): From 4d22d5fccafd419cfec33171b9f3c2b3834a985c Mon Sep 17 00:00:00 2001 From: Alberto Vara Date: Fri, 13 Dec 2019 18:30:11 +0100 Subject: [PATCH 3/3] No cover exception --- pyms/flask/services/requests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyms/flask/services/requests.py b/pyms/flask/services/requests.py index 89b53c4..92cfced 100644 --- a/pyms/flask/services/requests.py +++ b/pyms/flask/services/requests.py @@ -81,7 +81,7 @@ def insert_trace_headers(headers: dict) -> dict: try: headers = inject_span_in_headers(headers) - except Exception as ex: + except Exception as ex: # pragma: no cover logger.debug("Tracer error {}".format(ex)) return headers