66"""
77
88import sys
9- from ..log import logger
10- from ..singletons import tracer
9+
10+ from opentelemetry import context
11+ import contextvars
12+
13+ from instana .log import logger
1114
1215
1316def instrument_gevent ():
@@ -16,38 +19,21 @@ def instrument_gevent():
1619 logger .debug ("Instrumenting gevent" )
1720
1821 import gevent
19- from opentracing .scope_managers .gevent import GeventScopeManager
20- from opentracing .scope_managers .gevent import _GeventScope
2122
2223 def spawn_callback (new_greenlet ):
2324 """Handles context propagation for newly spawning greenlets"""
24- parent_scope = tracer .scope_manager .active
25- if parent_scope is not None :
26- # New greenlet, new clean slate. Clone and make active in this new greenlet
27- # the currently active scope (but don't finish() the span on close - it's a
28- # clone/not the original and we don't want to close it prematurely)
29- # TODO: Change to our own ScopeManagers
30- parent_scope_clone = _GeventScope (
31- parent_scope .manager , parent_scope .span , finish_on_close = False
32- )
33- tracer ._scope_manager ._set_greenlet_scope (
34- parent_scope_clone , new_greenlet
35- )
36-
37- logger .debug (" -> Updating tracer to use gevent based context management" )
38- tracer ._scope_manager = GeventScopeManager ()
25+ parent_context = context .get_current ()
26+ new_context = contextvars .Context ()
27+
28+ new_context .run (lambda : context .attach (parent_context ))
29+ new_greenlet .gr_context = new_context
30+
3931 gevent .Greenlet .add_spawn_callback (spawn_callback )
4032 except Exception :
4133 logger .debug ("instrument_gevent: " , exc_info = True )
4234
4335
4436if "gevent" not in sys .modules :
4537 logger .debug ("Instrumenting gevent: gevent not detected or loaded. Nothing done." )
46- elif not hasattr (sys .modules ["gevent" ], "version_info" ):
47- logger .debug ("gevent module has no 'version_info'. Skipping instrumentation." )
48- elif sys .modules ["gevent" ].version_info < (1 , 4 ):
49- logger .debug (
50- "gevent < 1.4 detected. The Instana package supports gevent versions 1.4 and greater."
51- )
5238else :
5339 instrument_gevent ()
0 commit comments