Skip to content

Commit 71ce915

Browse files
committed
adding instrumentors to grpc autoinstrumentor
1 parent b108596 commit 71ce915

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

ext/opentelemetry-ext-grpc/setup.cfg

+3
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,6 @@ test =
5050

5151
[options.packages.find]
5252
where = src
53+
54+
opentelemetry_instrumentor =
55+
grpc = opentelemetry.ext.grpc:GrpcInstrumentor

ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py

+43-1
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,51 @@
1616
# pylint:disable=import-self
1717
# pylint:disable=no-name-in-module
1818
# pylint:disable=relative-beyond-top-level
19-
19+
import grpc
2020
from opentelemetry import trace
2121
from opentelemetry.ext.grpc.version import __version__
22+
from opentelemetry.auto_instrumentation.instrumentor import BaseInstrumentor
23+
from opentelemetry.trace import get_tracer
24+
from wrapt import ObjectProxy
25+
from wrapt import wrap_function_wrapper as _wrap
26+
27+
class GrpcInstrumentorServer (BaseInstrumentor):
28+
29+
def _instrument(self, **kwargs):
30+
tracer = self.get_trace(kwargs)
31+
_wrap(grpc,'server', server_interceptor(tracer_provider = get_tracer_provider(kwargs)))
32+
_wrap(grpc, 'secure_channel',server_interceptor(tracer_provider= get_tracer_provider(kwargs)))
33+
34+
35+
36+
def _uninstrument(self, **kwargs):
37+
_unwrap(grpc, 'server')
38+
39+
40+
41+
class GrpcInstrumeentorClient (BaseInstrumentor):
42+
43+
def _instrument(self, **kwargs):
44+
tracer = self.get_trace(kwargs)
45+
_wrap(grpc,'insecure_channel', client_interceptor(tracer_provider = get_tracer_provider(kwargs)))
46+
_wrap(grpc, 'secure_channel',client_interceptor(tracer_provider= get_tracer_provider(kwargs)))
47+
48+
49+
50+
51+
def _uninstrument(self, **kwargs):
52+
53+
_unwrap(grpc, 'secure_channel')
54+
_unwrap(grpc, 'insecure_channel')
55+
56+
def _unwrap(obj, attr):
57+
func = getattr(obj,attr, None)
58+
59+
if func and isinstance(func, ObjectProxy) and hasattr(func,"__wrapped__"):
60+
setattr(obj,attr,func.__wrapped__)
61+
62+
def get_tracer_provider (**kwargs):
63+
return kwargs.get("tracer_provider")
2264

2365

2466
def client_interceptor(tracer_provider=None):

0 commit comments

Comments
 (0)