bugfix(opentelemetry-instrumentation-grpc): Add code() and details() to ServicerContext (#1578)

This commit is contained in:
CoLa
2023-01-20 18:30:25 +01:00
committed by GitHub
parent dd7afe0cc6
commit d75e19768a
2 changed files with 26 additions and 9 deletions

View File

@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- `opentelemetry-instrumentation-grpc` Fix code()/details() of _OpentelemetryServicerContext.
([#1578](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1578))
- Fix aiopg instrumentation to work with aiopg < 2.0.0
([#1473](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1473))
- `opentelemetry-instrumentation-aws-lambda` Adds an option to configure `disable_aws_context_propagation` by

View File

@ -69,8 +69,8 @@ class _OpenTelemetryServicerContext(grpc.ServicerContext):
def __init__(self, servicer_context, active_span):
self._servicer_context = servicer_context
self._active_span = active_span
self.code = grpc.StatusCode.OK
self.details = None
self._code = grpc.StatusCode.OK
self._details = None
super().__init__()
def __getattr__(self, attr):
@ -119,8 +119,8 @@ class _OpenTelemetryServicerContext(grpc.ServicerContext):
return self._servicer_context.trailing_metadata()
def abort(self, code, details):
self.code = code
self.details = details
self._code = code
self._details = details
self._active_span.set_attribute(
SpanAttributes.RPC_GRPC_STATUS_CODE, code.value[0]
)
@ -135,10 +135,25 @@ class _OpenTelemetryServicerContext(grpc.ServicerContext):
def abort_with_status(self, status):
return self._servicer_context.abort_with_status(status)
def code(self):
if not hasattr(self._servicer_context, "code"):
raise RuntimeError(
"code() is not supported with the installed version of grpcio"
)
return self._servicer_context.code()
def details(self):
if not hasattr(self._servicer_context, "details"):
raise RuntimeError(
"details() is not supported with the installed version of "
"grpcio"
)
return self._servicer_context.details()
def set_code(self, code):
self.code = code
self._code = code
# use details if we already have it, otherwise the status description
details = self.details or code.value[1]
details = self._details or code.value[1]
self._active_span.set_attribute(
SpanAttributes.RPC_GRPC_STATUS_CODE, code.value[0]
)
@ -152,12 +167,12 @@ class _OpenTelemetryServicerContext(grpc.ServicerContext):
return self._servicer_context.set_code(code)
def set_details(self, details):
self.details = details
if self.code != grpc.StatusCode.OK:
self._details = details
if self._code != grpc.StatusCode.OK:
self._active_span.set_status(
Status(
status_code=StatusCode.ERROR,
description=f"{self.code}:{details}",
description=f"{self._code}:{details}",
)
)
return self._servicer_context.set_details(details)