def _trace_before_publish(self, *args, **kwargs): task = utils.retrieve_task_from_sender(kwargs) task_id = utils.retrieve_task_id_from_message(kwargs) if task is None or task_id is None: return operation_name = f"{_TASK_APPLY_ASYNC}/{task.name}" span = self._tracer.start_span( operation_name, kind=trace.SpanKind.PRODUCER ) # apply some attributes here because most of the data is not available if span.is_recording(): span.set_attribute(_TASK_TAG_KEY, _TASK_APPLY_ASYNC) span.set_attribute(SpanAttributes.MESSAGING_MESSAGE_ID, task_id) span.set_attribute(_TASK_NAME_KEY, task.name) utils.set_attributes_from_context(span, kwargs) activation = trace.use_span(span, end_on_exit=True) activation.__enter__() # pylint: disable=E1101 utils.attach_span(task, task_id, (span, activation), is_publish=True) headers = kwargs.get("headers") if headers: inject(headers)
def test_task_id_from_protocol_v1(self): # ensures a `task_id` is properly returned when Protocol v1 is used. # `context` is an example of an emitted Signal with Protocol v1 context = { "body": { "expires": None, "utc": True, "args": ["user"], "chord": None, "callbacks": None, "errbacks": None, "taskset": None, "id": "dffcaec1-dd92-4a1a-b3ab-d6512f4beeb7", "retries": 0, "task": "tests.contrib.celery.test_integration.fn_task_parameters", "timelimit": (None, None), "eta": None, "kwargs": { "force_logout": True }, }, "sender": "tests.contrib.celery.test_integration.fn_task_parameters", "exchange": "celery", "routing_key": "celery", "retry_policy": None, "headers": {}, "properties": {}, } task_id = utils.retrieve_task_id_from_message(context) self.assertEqual(task_id, "dffcaec1-dd92-4a1a-b3ab-d6512f4beeb7")
def _trace_before_publish(self, *args, **kwargs): task = utils.retrieve_task_from_sender(kwargs) task_id = utils.retrieve_task_id_from_message(kwargs) if task is None or task_id is None: return operation_name = "{0}/{1}".format(_TASK_APPLY_ASYNC, task.name) span = self._tracer.start_span( operation_name, kind=trace.SpanKind.PRODUCER ) # apply some attributes here because most of the data is not available if span.is_recording(): span.set_attribute(_TASK_TAG_KEY, _TASK_APPLY_ASYNC) span.set_attribute(_MESSAGE_ID_ATTRIBUTE_NAME, task_id) span.set_attribute(_TASK_NAME_KEY, task.name) utils.set_attributes_from_context(span, kwargs) activation = self._tracer.use_span(span, end_on_exit=True) activation.__enter__() utils.attach_span(task, task_id, (span, activation), is_publish=True) headers = kwargs.get("headers") if headers: propagators.inject(type(headers).__setitem__, headers)
def test_task_id_from_protocol_v2(self): # ensures a `task_id` is properly returned when Protocol v2 is used. # `context` is an example of an emitted Signal with Protocol v2 context = { "body": ( ["user"], { "force_logout": True }, { u"chord": None, u"callbacks": None, u"errbacks": None, u"chain": None, }, ), "sender": u"tests.contrib.celery.test_integration.fn_task_parameters", "exchange": u"", "routing_key": u"celery", "retry_policy": None, "headers": { u"origin": u"gen83744@hostname", u"root_id": "7e917b83-4018-431d-9832-73a28e1fb6c0", u"expires": None, u"shadow": None, u"id": "7e917b83-4018-431d-9832-73a28e1fb6c0", u"kwargsrepr": u"{'force_logout': True}", u"lang": u"py", u"retries": 0, u"task": u"tests.contrib.celery.test_integration.fn_task_parameters", u"group": None, u"timelimit": [None, None], u"parent_id": None, u"argsrepr": u"['user']", u"eta": None, }, "properties": { u"reply_to": "c3054a07-5b28-3855-b18c-1623a24aaeca", u"correlation_id": "7e917b83-4018-431d-9832-73a28e1fb6c0", }, } task_id = utils.retrieve_task_id_from_message(context) self.assertEqual(task_id, "7e917b83-4018-431d-9832-73a28e1fb6c0")
def _trace_after_publish(*args, **kwargs): task = utils.retrieve_task_from_sender(kwargs) task_id = utils.retrieve_task_id_from_message(kwargs) if task is None or task_id is None: return # retrieve and finish the Span _, activation = utils.retrieve_span(task, task_id, is_publish=True) if activation is None: logger.warning("no existing span found for task_id=%s", task_id) return activation.__exit__(None, None, None) # pylint: disable=E1101 utils.detach_span(task, task_id, is_publish=True)
def _trace_before_publish(self, *args, **kwargs): task = utils.retrieve_task_from_sender(kwargs) task_id = utils.retrieve_task_id_from_message(kwargs) if task is None or task_id is None: return span = self._tracer.start_span(task.name, kind=trace.SpanKind.PRODUCER) # apply some attributes here because most of the data is not available span.set_attribute(_TASK_TAG_KEY, _TASK_APPLY_ASYNC) span.set_attribute(_MESSAGE_ID_ATTRIBUTE_NAME, task_id) span.set_attribute(_TASK_NAME_KEY, task.name) utils.set_attributes_from_context(span, kwargs) activation = self._tracer.use_span(span, end_on_exit=True) activation.__enter__() utils.attach_span(task, task_id, (span, activation), is_publish=True)