Skip to content

Commit 4fc36b5

Browse files
committed
Code cleanup
1 parent c36e60a commit 4fc36b5

File tree

4 files changed

+37
-10
lines changed

4 files changed

+37
-10
lines changed

middleware/__init__.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
from middleware.distro import mw_tracker, custom_record_exception_wrapper
2-
from typing import Collection
3-
import sys
4-
import threading
5-
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
6-
from opentelemetry import trace
72
from opentelemetry.sdk.trace import Span
8-
from typing import Optional
93
from middleware.options import (
104
MWOptions,
115
DETECT_AWS_BEANSTALK,
@@ -36,5 +30,4 @@
3630
"DETECT_ENVVARS",
3731
]
3832

39-
tracer = trace.get_tracer(__name__)
4033
Span.record_exception = custom_record_exception_wrapper

middleware/distro.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
from middleware.log import create_logger_handler
1414
from middleware.profiler import collect_profiling
1515
from opentelemetry import trace
16-
from opentelemetry.trace import Tracer, get_current_span, get_tracer, Span, get_tracer, Status, StatusCode
16+
from opentelemetry.trace import Tracer, get_current_span, get_tracer, get_tracer, Status, StatusCode
17+
from opentelemetry.sdk.trace import Span
1718
import os
1819
import json
1920

@@ -86,6 +87,39 @@ def mw_tracker(
8687

8788
mw_tracker_called = True
8889

90+
def record_exception(exc: Exception, span_name: Optional[str] = None) -> None:
91+
"""
92+
Reports an exception as a span event creating a dummy span if necessary.
93+
94+
Args:
95+
exc (Exception): Pass Exception to record as in a current span.
96+
span_name (String,Optional): Span Name to use if no current span found,
97+
defaults to Exception Name.
98+
99+
Example
100+
--------
101+
>>> from middleware import record_exception
102+
>>> try:
103+
>>> print("Divide by zero:",1/0)
104+
>>> except Exception as e:
105+
>>> record_exception(e)
106+
107+
"""
108+
109+
span = get_current_span()
110+
if span.is_recording():
111+
span.record_exception(exc)
112+
return
113+
114+
tracer: Tracer = get_tracer("mw-tracer")
115+
if span_name is None:
116+
span_name = type(exc).__name__
117+
118+
span = tracer.start_span(span_name)
119+
span.record_exception(exc)
120+
span.set_status(trace.Status(trace.StatusCode.ERROR, str(exc)))
121+
span.end()
122+
89123
def extract_function_code(tb_frame, lineno):
90124
"""Extracts the full function body where the exception occurred."""
91125
try:

middleware/trace.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def create_tracer_provider(options: MWOptions, resource: Resource) -> TracerProv
7777
exporter,
7878
)
7979
)
80-
# trace_provider.add_span_processor(ExceptionFilteringSpanProcessor())
80+
trace_provider.add_span_processor(ExceptionFilteringSpanProcessor())
8181
if options.console_exporter:
8282
output = sys.stdout
8383
if options.debug_log_file:

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "middleware-io"
7-
version = "2.1.2rc14"
7+
version = "2.1.2rc15"
88
requires-python = ">=3.8"
99
description = "Middleware's APM tool enables Python developers to effortlessly monitor their applications, gathering distributed tracing, metrics, logs, and profiling data for valuable insights and performance optimization."
1010
authors = [{ name = "middleware-dev" }]

0 commit comments

Comments
 (0)