diff --git a/opencensus/trace/span.py b/opencensus/trace/span.py index cb8e42dae..796e56000 100644 --- a/opencensus/trace/span.py +++ b/opencensus/trace/span.py @@ -362,6 +362,20 @@ def set_status(self, status): raise TypeError("Type Error: received {}, but requires Status.". format(type(status).__name__)) + def set_status_fields(self, code, message=None, details=None): + """Set span status. + + :type code: int + :param code: An enum value of :class: `~google.rpc.Code`. + + :type message: str + :param message: A developer-facing error message, should be in English. + + :type details: list + :param details: A list of messages that carry the error details. + """ + self.set_status(status_module.Status(code, message, details)) + def start(self): """Set the start time for a span.""" self.start_time = utils.to_iso_str() diff --git a/tests/unit/trace/test_span.py b/tests/unit/trace/test_span.py index f7ddf5d7b..958c28e66 100644 --- a/tests/unit/trace/test_span.py +++ b/tests/unit/trace/test_span.py @@ -201,6 +201,31 @@ def test_set_status(self): self.assertEqual(span.status.description, message) self.assertEqual(span.status.details, details) + def test_set_status_fields(self): + span_name = 'test_span_name' + span = self._make_one(span_name) + + code = 1 + message = 'ok' + details = {'object': 'ok'} + span.set_status_fields(code, message, details) + + self.assertEqual(span.status.canonical_code, code) + self.assertEqual(span.status.description, message) + self.assertEqual(span.status.details, details) + + def test_set_status_fields_without_details(self): + span_name = 'test_span_name' + span = self._make_one(span_name) + + code = 1 + message = 'ok' + span.set_status_fields(code, message) + + self.assertEqual(span.status.canonical_code, code) + self.assertEqual(span.status.description, message) + self.assertEqual(span.status.details, None) + def test_start(self): span_name = 'root_span' span = self._make_one(span_name)