From c0ca1314c8004bdac5df8bf0eb3033920d49845b Mon Sep 17 00:00:00 2001 From: Peter Giacomo Lombardo Date: Mon, 9 Nov 2020 17:05:02 +0100 Subject: [PATCH] FastAPI: Load only when supported version in use --- instana/instrumentation/fastapi_inst.py | 34 +++++++++++++++---------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/instana/instrumentation/fastapi_inst.py b/instana/instrumentation/fastapi_inst.py index 18c00a3e..5c15139b 100644 --- a/instana/instrumentation/fastapi_inst.py +++ b/instana/instrumentation/fastapi_inst.py @@ -4,30 +4,36 @@ """ try: import fastapi + import os import wrapt import signal - import os + from distutils.version import LooseVersion from ..log import logger from ..util import running_in_gunicorn from .asgi import InstanaASGIMiddleware from starlette.middleware import Middleware - @wrapt.patch_function_wrapper('fastapi.applications', 'FastAPI.__init__') - def init_with_instana(wrapped, instance, args, kwargs): - middleware = kwargs.get('middleware') - if middleware is None: - kwargs['middleware'] = [Middleware(InstanaASGIMiddleware)] - elif isinstance(middleware, list): - middleware.append(Middleware(InstanaASGIMiddleware)) + if hasattr(fastapi, '__version__') and \ + (LooseVersion(fastapi.__version__) >= LooseVersion('0.51.0')): + + @wrapt.patch_function_wrapper('fastapi.applications', 'FastAPI.__init__') + def init_with_instana(wrapped, instance, args, kwargs): + middleware = kwargs.get('middleware') + if middleware is None: + kwargs['middleware'] = [Middleware(InstanaASGIMiddleware)] + elif isinstance(middleware, list): + middleware.append(Middleware(InstanaASGIMiddleware)) - return wrapped(*args, **kwargs) + return wrapped(*args, **kwargs) - logger.debug("Instrumenting FastAPI") + logger.debug("Instrumenting FastAPI") - # Reload GUnicorn when we are instrumenting an already running application - if "INSTANA_MAGIC" in os.environ and running_in_gunicorn(): - os.kill(os.getpid(), signal.SIGHUP) + # Reload GUnicorn when we are instrumenting an already running application + if "INSTANA_MAGIC" in os.environ and running_in_gunicorn(): + os.kill(os.getpid(), signal.SIGHUP) + else: + logger.debug("Instana supports FastAPI package versions 0.51.0 and newer. Skipping.") except ImportError: - pass \ No newline at end of file + pass