Skip to content

Commit

Permalink
bugfix(opentelemetry-instrumentation-grpc): Add code() and details() …
Browse files Browse the repository at this point in the history
…to ServicerContext (#1578)
  • Loading branch information
CoLa5 authored Jan 20, 2023
1 parent dd7afe0 commit d75e197
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 9 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -119,8 +119,8 @@ def trailing_metadata(self):
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]
)
Expand All @@ -135,10 +135,25 @@ def abort(self, code, details):
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]
)
Expand All @@ -152,12 +167,12 @@ def set_code(self, code):
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)
Expand Down

0 comments on commit d75e197

Please sign in to comment.