44"""
55try :
66 import fastapi
7+ import os
78 import wrapt
89 import signal
9- import os
10+ from distutils . version import LooseVersion
1011
1112 from ..log import logger
1213 from ..util import running_in_gunicorn
1314 from .asgi import InstanaASGIMiddleware
1415 from starlette .middleware import Middleware
1516
16- @wrapt .patch_function_wrapper ('fastapi.applications' , 'FastAPI.__init__' )
17- def init_with_instana (wrapped , instance , args , kwargs ):
18- middleware = kwargs .get ('middleware' )
19- if middleware is None :
20- kwargs ['middleware' ] = [Middleware (InstanaASGIMiddleware )]
21- elif isinstance (middleware , list ):
22- middleware .append (Middleware (InstanaASGIMiddleware ))
17+ if hasattr (fastapi , '__version__' ) and \
18+ (LooseVersion (fastapi .__version__ ) >= LooseVersion ('0.51.0' )):
19+
20+ @wrapt .patch_function_wrapper ('fastapi.applications' , 'FastAPI.__init__' )
21+ def init_with_instana (wrapped , instance , args , kwargs ):
22+ middleware = kwargs .get ('middleware' )
23+ if middleware is None :
24+ kwargs ['middleware' ] = [Middleware (InstanaASGIMiddleware )]
25+ elif isinstance (middleware , list ):
26+ middleware .append (Middleware (InstanaASGIMiddleware ))
2327
24- return wrapped (* args , ** kwargs )
28+ return wrapped (* args , ** kwargs )
2529
26- logger .debug ("Instrumenting FastAPI" )
30+ logger .debug ("Instrumenting FastAPI" )
2731
28- # Reload GUnicorn when we are instrumenting an already running application
29- if "INSTANA_MAGIC" in os .environ and running_in_gunicorn ():
30- os .kill (os .getpid (), signal .SIGHUP )
32+ # Reload GUnicorn when we are instrumenting an already running application
33+ if "INSTANA_MAGIC" in os .environ and running_in_gunicorn ():
34+ os .kill (os .getpid (), signal .SIGHUP )
35+ else :
36+ logger .debug ("Instana supports FastAPI package versions 0.51.0 and newer. Skipping." )
3137
3238except ImportError :
33- pass
39+ pass
0 commit comments