From ce2972937f3e86f0e49d4378ded624e2ac047955 Mon Sep 17 00:00:00 2001 From: wyc Date: Mon, 30 Nov 2020 19:46:40 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dtrace=E5=92=8Casyncio?= =?UTF-8?q?=E5=85=B1=E7=94=A8=E6=97=B6=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skywalking/decorators.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/skywalking/decorators.py b/skywalking/decorators.py index a48e0575..14585def 100644 --- a/skywalking/decorators.py +++ b/skywalking/decorators.py @@ -17,12 +17,14 @@ from functools import wraps from typing import List +import inspect from skywalking import Layer, Component from skywalking.trace.context import get_context from skywalking.trace.tags import Tag + def trace( op: str = None, layer: Layer = Layer.Unknown, @@ -31,7 +33,7 @@ def trace( ): def decorator(func): @wraps(func) - def wrapper(*args, **kwargs): + async def wrapper(*args, **kwargs): _op = op or func.__name__ context = get_context() with context.new_local_span(op=_op) as span: @@ -40,6 +42,8 @@ def wrapper(*args, **kwargs): [span.tag(tag) for tag in tags or []] try: result = func(*args, **kwargs) + if inspect.isawaitable(result): + return async await result return result except Exception: span.raised() From 4f61ebeca92ca1a368a56a126d671e5d2e7e163d Mon Sep 17 00:00:00 2001 From: wyc Date: Tue, 1 Dec 2020 18:11:03 +0800 Subject: [PATCH 2/5] add new wrapper function --- skywalking/decorators.py | 50 ++++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/skywalking/decorators.py b/skywalking/decorators.py index 14585def..4d435a7a 100644 --- a/skywalking/decorators.py +++ b/skywalking/decorators.py @@ -32,24 +32,40 @@ def trace( tags: List[Tag] = None, ): def decorator(func): - @wraps(func) - async 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) - if inspect.isawaitable(result): - return async await result - return result - except Exception: - span.raised() - raise + if inspect.iscoroutinefunction(func): + @wraps(func) + async 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 await result + except Exception: + span.raised() + raise - return wrapper + return wrapper + + else: + @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 + return wrapper return decorator From 84216c0a19a63ea9faf82cfe3c24712927590438 Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Tue, 1 Dec 2020 22:13:07 +0800 Subject: [PATCH 3/5] Fix linting --- skywalking/decorators.py | 1 - 1 file changed, 1 deletion(-) diff --git a/skywalking/decorators.py b/skywalking/decorators.py index 4d435a7a..28736cf0 100644 --- a/skywalking/decorators.py +++ b/skywalking/decorators.py @@ -24,7 +24,6 @@ from skywalking.trace.tags import Tag - def trace( op: str = None, layer: Layer = Layer.Unknown, From 6a0b05f3a2c2f46e541d81ea70f661b792252f59 Mon Sep 17 00:00:00 2001 From: wyc Date: Sun, 6 Dec 2020 20:24:13 +0800 Subject: [PATCH 4/5] remove repeat codes --- skywalking/decorators.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/skywalking/decorators.py b/skywalking/decorators.py index 28736cf0..7e719732 100644 --- a/skywalking/decorators.py +++ b/skywalking/decorators.py @@ -24,6 +24,7 @@ from skywalking.trace.tags import Tag + def trace( op: str = None, layer: Layer = Layer.Unknown, @@ -31,11 +32,11 @@ def trace( tags: List[Tag] = None, ): def decorator(func): + _op = op or func.__name__ + context = get_context() if inspect.iscoroutinefunction(func): @wraps(func) async 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 @@ -46,14 +47,11 @@ async def wrapper(*args, **kwargs): except Exception: span.raised() raise - return wrapper else: @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 From 0102f0c68d0d0f2baa354193b5b1339952656c2a Mon Sep 17 00:00:00 2001 From: Zhenxu Ke Date: Wed, 9 Dec 2020 09:10:22 +0800 Subject: [PATCH 5/5] Update decorators.py --- skywalking/decorators.py | 1 - 1 file changed, 1 deletion(-) diff --git a/skywalking/decorators.py b/skywalking/decorators.py index 7e719732..444c7a5f 100644 --- a/skywalking/decorators.py +++ b/skywalking/decorators.py @@ -24,7 +24,6 @@ from skywalking.trace.tags import Tag - def trace( op: str = None, layer: Layer = Layer.Unknown,