@@ -54,17 +54,11 @@ def add(x, y):
54
54
import logging
55
55
import signal
56
56
57
- from celery import registry , signals # pylint: disable=no-name-in-module
57
+ from celery import signals # pylint: disable=no-name-in-module
58
58
59
59
from opentelemetry import trace
60
- from opentelemetry .auto_instrumentation .instrumentor import BaseInstrumentor
61
- from opentelemetry .ext .celery .utils import (
62
- attach_span ,
63
- detach_span ,
64
- retrieve_span ,
65
- retrieve_task_id ,
66
- set_attributes_from_context ,
67
- )
60
+ from opentelemetry .instrumentation .instrumentor import BaseInstrumentor
61
+ from opentelemetry .ext .celery import utils
68
62
from opentelemetry .ext .celery .version import __version__
69
63
from opentelemetry .trace .status import Status , StatusCanonicalCode
70
64
@@ -110,58 +104,53 @@ def _uninstrument(self, **kwargs):
110
104
signals .task_retry .disconnect (self ._trace_retry )
111
105
112
106
def _trace_prerun (self , * args , ** kwargs ):
113
- task = kwargs . get ( "task" )
114
- task_id = kwargs . get ( "task_id" )
115
- logger . debug ( "prerun signal start task_id=%s" , task_id )
107
+ task = utils . signal_retrieve_task ( kwargs )
108
+ task_id = utils . signal_retrieve_task_id ( kwargs )
109
+
116
110
if task is None or task_id is None :
117
- logger .debug (
118
- "Unable to extract the Task and the task_id. This version of Celery may not be supported."
119
- )
120
111
return
121
112
113
+ logger .debug ("prerun signal start task_id=%s" , task_id )
114
+
122
115
span = self ._tracer .start_span (task .name , kind = trace .SpanKind .CONSUMER )
123
116
124
117
activation = self ._tracer .use_span (span , end_on_exit = True )
125
118
activation .__enter__ ()
126
- attach_span (task , task_id , (span , activation ))
119
+ utils . attach_span (task , task_id , (span , activation ))
127
120
128
121
@staticmethod
129
122
def _trace_postrun (* args , ** kwargs ):
130
- task = kwargs . get ( "task" )
131
- task_id = kwargs . get ( "task_id" )
132
- logger . debug ( "postrun signal task_id=%s" , task_id )
123
+ task = utils . signal_retrieve_task ( kwargs )
124
+ task_id = utils . signal_retrieve_task_id ( kwargs )
125
+
133
126
if task is None or task_id is None :
134
- logger .debug (
135
- "Unable to extract the Task and the task_id. This version of Celery may not be supported."
136
- )
137
127
return
138
128
129
+ logger .debug ("postrun signal task_id=%s" , task_id )
130
+
139
131
# retrieve and finish the Span
140
- span , activation = retrieve_span (task , task_id )
132
+ span , activation = utils . retrieve_span (task , task_id )
141
133
if span is None :
142
134
logger .warning ("no existing span found for task_id=%s" , task_id )
143
135
return
144
136
145
137
# request context tags
146
138
span .set_attribute (_TASK_TAG_KEY , _TASK_RUN )
147
- set_attributes_from_context (span , kwargs )
148
- set_attributes_from_context (span , task .request )
139
+ utils . set_attributes_from_context (span , kwargs )
140
+ utils . set_attributes_from_context (span , task .request )
149
141
span .set_attribute (_TASK_NAME_KEY , task .name )
150
142
151
143
activation .__exit__ (None , None , None )
152
- detach_span (task , task_id )
144
+ utils . detach_span (task , task_id )
153
145
154
146
def _trace_before_publish (self , * args , ** kwargs ):
155
147
# The `Task` instance **does not** include any information about the current
156
148
# execution, so it **must not** be used to retrieve `request` data.
157
149
# pylint: disable=no-member
158
- task = registry . tasks . get (kwargs . get ( "sender" ) )
159
- task_id = retrieve_task_id (kwargs )
150
+ task = utils . signal_retrieve_task_from_sender (kwargs )
151
+ task_id = utils . signal_retrieve_task_id_from_message (kwargs )
160
152
161
153
if task is None or task_id is None :
162
- logger .debug (
163
- "Unable to extract the Task and the task_id. This version of Celery may not be supported."
164
- )
165
154
return
166
155
167
156
span = self ._tracer .start_span (task .name , kind = trace .SpanKind .PRODUCER )
@@ -170,44 +159,39 @@ def _trace_before_publish(self, *args, **kwargs):
170
159
span .set_attribute (_TASK_TAG_KEY , _TASK_APPLY_ASYNC )
171
160
span .set_attribute (_MESSAGE_ID_ATTRIBUTE_NAME , task_id )
172
161
span .set_attribute (_TASK_NAME_KEY , task .name )
173
- set_attributes_from_context (span , kwargs )
162
+ utils . set_attributes_from_context (span , kwargs )
174
163
175
164
activation = self ._tracer .use_span (span , end_on_exit = True )
176
165
activation .__enter__ ()
177
- attach_span (task , task_id , (span , activation ), is_publish = True )
166
+ utils . attach_span (task , task_id , (span , activation ), is_publish = True )
178
167
179
168
@staticmethod
180
169
def _trace_after_publish (* args , ** kwargs ):
181
- # pylint: disable=no-member
182
- task = registry . tasks . get (kwargs . get ( "sender" ) )
183
- task_id = retrieve_task_id ( kwargs )
170
+ task = utils . signal_retrieve_task_from_sender ( kwargs )
171
+ task_id = utils . signal_retrieve_task_id_from_message (kwargs )
172
+
184
173
if task is None or task_id is None :
185
- logger .debug (
186
- "Unable to extract the Task and the task_id. This version of Celery may not be supported."
187
- )
188
174
return
189
175
190
176
# retrieve and finish the Span
191
- _ , activation = retrieve_span (task , task_id , is_publish = True )
177
+ _ , activation = utils . retrieve_span (task , task_id , is_publish = True )
192
178
if activation is None :
193
179
logger .warning ("no existing span found for task_id=%s" , task_id )
194
180
return
195
181
196
182
activation .__exit__ (None , None , None )
197
- detach_span (task , task_id , is_publish = True )
183
+ utils . detach_span (task , task_id , is_publish = True )
198
184
199
185
@staticmethod
200
186
def _trace_failure (* args , ** kwargs ):
201
- task = kwargs .get ("sender" )
202
- task_id = kwargs .get ("task_id" )
187
+ task = utils .signal_retrieve_task_from_sender (kwargs )
188
+ task_id = utils .signal_retrieve_task_id (kwargs )
189
+
203
190
if task is None or task_id is None :
204
- logger .debug (
205
- "Unable to extract the Task and the task_id. This version of Celery may not be supported."
206
- )
207
191
return
208
192
209
193
# retrieve and pass exception info to activation
210
- span , _ = retrieve_span (task , task_id )
194
+ span , _ = utils . retrieve_span (task , task_id )
211
195
if span is None :
212
196
return
213
197
@@ -226,22 +210,14 @@ def _trace_failure(*args, **kwargs):
226
210
227
211
@staticmethod
228
212
def _trace_retry (* args , ** kwargs ):
229
- task = kwargs .get ("sender" )
230
- context = kwargs .get ("request" )
231
- if task is None or context is None :
232
- logger .debug (
233
- "Unable to extract the Task or the Context. This version of Celery may not be supported."
234
- )
235
- return
213
+ task = utils .signal_retrieve_task_from_sender (kwargs )
214
+ task_id = utils .signal_retrieve_task_id_from_request (kwargs )
215
+ reason = utils .signal_retrieve_reason (kwargs )
236
216
237
- reason = kwargs .get ("reason" )
238
- if not reason :
239
- logger .debug (
240
- "Unable to extract the retry reason. This version of Celery may not be supported."
241
- )
217
+ if task is None or task_id is None or reason is None :
242
218
return
243
219
244
- span , _ = retrieve_span (task , context . id )
220
+ span , _ = utils . retrieve_span (task , task_id )
245
221
if span is None :
246
222
return
247
223
0 commit comments