in aws_embedded_metrics/metric_scope/__init__.py [0:0]
def metric_scope(fn): # type: ignore
if asyncio.iscoroutinefunction(fn):
@wraps(fn)
async def wrapper(*args, **kwargs): # type: ignore
logger = create_metrics_logger()
if "metrics" in inspect.signature(fn).parameters:
kwargs["metrics"] = logger
try:
return await fn(*args, **kwargs)
except Exception as e:
raise e
finally:
await logger.flush()
return wrapper
else:
@wraps(fn)
def wrapper(*args, **kwargs): # type: ignore
logger = create_metrics_logger()
if "metrics" in inspect.signature(fn).parameters:
kwargs["metrics"] = logger
try:
return fn(*args, **kwargs)
except Exception as e:
raise e
finally:
loop = asyncio.get_event_loop()
loop.run_until_complete(logger.flush())
return wrapper