Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 31 additions & 15 deletions skywalking/decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

from functools import wraps
from typing import List
import inspect

from skywalking import Layer, Component
from skywalking.trace.context import get_context
Expand All @@ -30,22 +31,37 @@ def trace(
tags: List[Tag] = None,
):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
_op = op or func.__name__
context = get_context()
with context.new_local_span(op=_op) as span:
span.layer = layer
span.component = component
[span.tag(tag) for tag in tags or []]
try:
result = func(*args, **kwargs)
return result
except Exception:
span.raised()
raise
_op = op or func.__name__
context = get_context()
if inspect.iscoroutinefunction(func):
@wraps(func)
async def wrapper(*args, **kwargs):
with context.new_local_span(op=_op) as span:
span.layer = layer
span.component = component
[span.tag(tag) for tag in tags or []]
try:
result = func(*args, **kwargs)
return await result
except Exception:
span.raised()
raise
return wrapper

return wrapper
else:
@wraps(func)
def wrapper(*args, **kwargs):
with context.new_local_span(op=_op) as span:
span.layer = layer
span.component = component
[span.tag(tag) for tag in tags or []]
try:
result = func(*args, **kwargs)
return result
except Exception:
span.raised()
raise
return wrapper

return decorator

Expand Down