Skip to content

Commit eebd8fd

Browse files
committed
adding grpc integration
1 parent 17741ab commit eebd8fd

File tree

1 file changed

+37
-16
lines changed
  • ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc

1 file changed

+37
-16
lines changed

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

+37-16
Original file line numberDiff line numberDiff line change
@@ -16,49 +16,70 @@
1616
# pylint:disable=import-self
1717
# pylint:disable=no-name-in-module
1818
# pylint:disable=relative-beyond-top-level
19+
from contextlib import contextmanager
20+
1921
import grpc
22+
from concurrent import futures
2023
from opentelemetry import trace
2124
from opentelemetry.ext.grpc.version import __version__
25+
from opentelemetry.sdk.trace import TracerProvider
2226
from opentelemetry.auto_instrumentation.instrumentor import BaseInstrumentor
2327
from opentelemetry.trace import get_tracer
2428
from wrapt import ObjectProxy
2529
from wrapt import wrap_function_wrapper as _wrap
30+
from opentelemetry.ext.grpc.grpcext import intercept_channel, intercept_server
2631

32+
import pdb
33+
from opentelemetry.sdk.trace.export import (
34+
ConsoleSpanExporter,
35+
SimpleExportSpanProcessor,
36+
)
2737

2838

2939
class GrpcInstrumentorServer(BaseInstrumentor):
40+
trace.set_tracer_provider(TracerProvider())
41+
tracer = trace.get_tracer_provider()
42+
server = None
3043

3144
def _instrument(self, **kwargs):
32-
# tracer = self.get_trace(kwargs)
33-
34-
_wrap(grpc, 'server', server_interceptor(tracer_provider=get_tracer_provider(**kwargs)))
35-
_wrap(grpc, 'secure_channel', server_interceptor(tracer_provider=get_tracer_provider(**kwargs)))
45+
self.server = grpc.server(futures.ThreadPoolExecutor())
46+
self.server = intercept_server(self.server, server_interceptor())
3647

3748
def _uninstrument(self, **kwargs):
38-
_unwrap(grpc, 'server')
49+
if hasattr(self.server, 'stop'):
50+
return self.server.stop(kwargs.get('grace'))
3951

4052

4153
class GrpcInstrumentorClient(BaseInstrumentor):
54+
trace.set_tracer_provider(TracerProvider())
55+
tracer = trace.get_tracer_provider()
56+
channel = None
4257

4358
def _instrument(self, **kwargs):
44-
# tracer = get_tracer_provider(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)))
59+
hostport = kwargs.get('hostport')
60+
61+
if kwargs.get('channel_type') == 'secure':
62+
self.channel = secure_channel_wrapper(hostport, kwargs.get("credentials"))
63+
64+
else:
65+
self.channel = insecure_channel_wrapper(hostport)
4766

4867
def _uninstrument(self, **kwargs):
49-
_unwrap(grpc, 'secure_channel')
50-
_unwrap(grpc, 'insecure_channel')
5168

69+
if hasattr(self.channel, 'close'):
70+
return self.channel.close()
5271

53-
def _unwrap(obj, attr):
54-
func = getattr(obj, attr, None)
5572

56-
if func and isinstance(func, ObjectProxy) and hasattr(func, "__wrapped__"):
57-
setattr(obj, attr, func.__wrapped__)
73+
@contextmanager
74+
def insecure_channel_wrapper(hostport):
75+
with grpc.insecure_channel(hostport) as channel:
76+
yield intercept_channel(channel, client_interceptor())
5877

5978

60-
def get_tracer_provider(**kwargs):
61-
return kwargs.get("tracer_provider")
79+
@contextmanager
80+
def secure_channel_wrapper(hostport, credentials):
81+
with grpc.secure_channel(hostport, credentials) as channel:
82+
yield intercept_channel(channel, client_interceptor())
6283

6384

6485
def client_interceptor(tracer_provider=None):

0 commit comments

Comments
 (0)