Skip to content

Commit 440c66d

Browse files
committed
docs, cleanup
1 parent 29abf3c commit 440c66d

File tree

6 files changed

+63
-42
lines changed

6 files changed

+63
-42
lines changed

Diff for: .pylintrc

+1-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_
226226

227227
# Argument names that match this expression will be ignored. Default to name
228228
# with leading underscore.
229-
ignored-argument-names=_.*|^ignored_|^unused_
229+
ignored-argument-names=_.*|^ignored_|^unused_|^kwargs|^args
230230

231231
# Tells whether we should check for unused import in __init__ files.
232232
init-import=no

Diff for: ext/opentelemetry-ext-celery/README.rst

+27
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,33 @@ Installation
1616

1717
pip install opentelemetry-ext-celery
1818

19+
Usage
20+
-----
21+
22+
* Start broker backend
23+
24+
::
25+
docker run -p 5672:5672 rabbitmq
26+
27+
28+
* Run instrumented task
29+
30+
.. code-block:: python
31+
32+
from opentelemetry import trace
33+
from opentelemetry.ext.celery import CeleryInstrumentor
34+
35+
CeleryInstrumentor().instrument()
36+
37+
from celery import Celery
38+
39+
app = Celery("tasks", broker="amqp://localhost")
40+
41+
@app.task
42+
def add(x, y):
43+
return x + y
44+
45+
add.delay(42, 50)
1946
2047
References
2148
----------

Diff for: ext/opentelemetry-ext-celery/setup.cfg

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#
1515
[metadata]
1616
name = opentelemetry-ext-celery
17-
description = OpenTelemetry Celery integration
17+
description = OpenTelemetry Celery Instrumentation
1818
long_description = file: README.rst
1919
long_description_content_type = text/x-rst
2020
author = OpenTelemetry Authors

Diff for: ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/__init__.py

+19-22
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,22 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414
"""
15-
Instrument `celery`_ to report Celery APP operations.
16-
17-
There are two options for instrumenting code. The first option is to use the
18-
``opentelemetry-instrument`` executable which will automatically
19-
instrument your Celery APP. The second is to programmatically enable
20-
instrumentation as explained in the following section.
15+
Instrument `celery`_ to trace Celery applications.
2116
2217
.. _celery: https://pypi.org/project/celery/
2318
2419
Usage
2520
-----
2621
27-
Be sure rabbitmq is running:
22+
* Start broker backend
2823
2924
.. code::
3025
3126
docker run -p 5672:5672 rabbitmq
3227
28+
29+
* Run instrumented task
30+
3331
.. code:: python
3432
3533
from opentelemetry import trace
@@ -57,9 +55,9 @@ def add(x, y):
5755
from celery import signals # pylint: disable=no-name-in-module
5856

5957
from opentelemetry import trace
60-
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
6158
from opentelemetry.ext.celery import utils
6259
from opentelemetry.ext.celery.version import __version__
60+
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
6361
from opentelemetry.trace.status import Status, StatusCanonicalCode
6462

6563
logger = logging.getLogger(__name__)
@@ -77,7 +75,6 @@ def add(x, y):
7775

7876

7977
class CeleryInstrumentor(BaseInstrumentor):
80-
# pylint: disable=unused-argument
8178
def _instrument(self, **kwargs):
8279
tracer_provider = kwargs.get("tracer_provider")
8380

@@ -104,8 +101,8 @@ def _uninstrument(self, **kwargs):
104101
signals.task_retry.disconnect(self._trace_retry)
105102

106103
def _trace_prerun(self, *args, **kwargs):
107-
task = utils.signal_retrieve_task(kwargs)
108-
task_id = utils.signal_retrieve_task_id(kwargs)
104+
task = utils.retrieve_task(kwargs)
105+
task_id = utils.retrieve_task_id(kwargs)
109106

110107
if task is None or task_id is None:
111108
return
@@ -120,8 +117,8 @@ def _trace_prerun(self, *args, **kwargs):
120117

121118
@staticmethod
122119
def _trace_postrun(*args, **kwargs):
123-
task = utils.signal_retrieve_task(kwargs)
124-
task_id = utils.signal_retrieve_task_id(kwargs)
120+
task = utils.retrieve_task(kwargs)
121+
task_id = utils.retrieve_task_id(kwargs)
125122

126123
if task is None or task_id is None:
127124
return
@@ -147,8 +144,8 @@ def _trace_before_publish(self, *args, **kwargs):
147144
# The `Task` instance **does not** include any information about the current
148145
# execution, so it **must not** be used to retrieve `request` data.
149146
# pylint: disable=no-member
150-
task = utils.signal_retrieve_task_from_sender(kwargs)
151-
task_id = utils.signal_retrieve_task_id_from_message(kwargs)
147+
task = utils.retrieve_task_from_sender(kwargs)
148+
task_id = utils.retrieve_task_id_from_message(kwargs)
152149

153150
if task is None or task_id is None:
154151
return
@@ -167,8 +164,8 @@ def _trace_before_publish(self, *args, **kwargs):
167164

168165
@staticmethod
169166
def _trace_after_publish(*args, **kwargs):
170-
task = utils.signal_retrieve_task_from_sender(kwargs)
171-
task_id = utils.signal_retrieve_task_id_from_message(kwargs)
167+
task = utils.retrieve_task_from_sender(kwargs)
168+
task_id = utils.retrieve_task_id_from_message(kwargs)
172169

173170
if task is None or task_id is None:
174171
return
@@ -184,8 +181,8 @@ def _trace_after_publish(*args, **kwargs):
184181

185182
@staticmethod
186183
def _trace_failure(*args, **kwargs):
187-
task = utils.signal_retrieve_task_from_sender(kwargs)
188-
task_id = utils.signal_retrieve_task_id(kwargs)
184+
task = utils.retrieve_task_from_sender(kwargs)
185+
task_id = utils.retrieve_task_id(kwargs)
189186

190187
if task is None or task_id is None:
191188
return
@@ -210,9 +207,9 @@ def _trace_failure(*args, **kwargs):
210207

211208
@staticmethod
212209
def _trace_retry(*args, **kwargs):
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)
210+
task = utils.retrieve_task_from_sender(kwargs)
211+
task_id = utils.retrieve_task_id_from_request(kwargs)
212+
reason = utils.retrieve_reason(kwargs)
216213

217214
if task is None or task_id is None or reason is None:
218215
return

Diff for: ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/utils.py

+13-16
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
import logging
1616

17-
import celery
17+
from celery import registry # pylint: disable=no-name-in-module
1818

1919
logger = logging.getLogger(__name__)
2020

@@ -50,24 +50,25 @@ def set_attributes_from_context(span, context):
5050
"""Helper to extract meta values from a Celery Context"""
5151
for key in CELERY_CONTEXT_ATTRIBUTES:
5252
value = context.get(key)
53-
attribute_name = None
5453

5554
# Skip this key if it is not set
5655
if value is None or value == "":
5756
continue
5857

5958
# Skip `timelimit` if it is not set (it's default/unset value is a
6059
# tuple or a list of `None` values
61-
elif key == "timelimit" and value in [(None, None), [None, None]]:
60+
if key == "timelimit" and value in [(None, None), [None, None]]:
6261
continue
6362

6463
# Skip `retries` if it's value is `0`
65-
elif key == "retries" and value == 0:
64+
if key == "retries" and value == 0:
6665
continue
6766

67+
attribute_name = None
68+
6869
# Celery 4.0 uses `origin` instead of `hostname`; this change preserves
6970
# the same name for the tag despite Celery version
70-
elif key == "origin":
71+
if key == "origin":
7172
key = "hostname"
7273

7374
elif key == "delivery_info":
@@ -154,38 +155,36 @@ def retrieve_span(task, task_id, is_publish=False):
154155
return span_dict.get((task_id, is_publish), (None, None))
155156

156157

157-
def signal_retrieve_task(kwargs):
158+
def retrieve_task(kwargs):
158159
task = kwargs.get("task")
159160
if task is None:
160161
logger.debug("Unable to retrieve task from signal arguments")
161162
return task
162163

163164

164-
def signal_retrieve_task_from_sender(kwargs):
165+
def retrieve_task_from_sender(kwargs):
165166
sender = kwargs.get("sender")
166167
if sender is None:
167168
logger.debug("Unable to retrieve the sender from signal arguments")
168-
return
169169

170170
# before and after publish signals sender is the task name
171171
# for retry and failure signals sender is the task object
172172
if isinstance(sender, str):
173-
sender = celery.registry.tasks.get(sender)
173+
sender = registry.tasks.get(sender)
174174
if sender is None:
175175
logger.debug("Unable to retrieve the task from sender=%s", sender)
176-
return
177176

178177
return sender
179178

180179

181-
def signal_retrieve_task_id(kwargs):
180+
def retrieve_task_id(kwargs):
182181
task_id = kwargs.get("task_id")
183182
if task_id is None:
184183
logger.debug("Unable to retrieve task_id from signal arguments")
185184
return task_id
186185

187186

188-
def signal_retrieve_task_id_from_request(kwargs):
187+
def retrieve_task_id_from_request(kwargs):
189188
# retry signal does not include task_id as argument so use request argument
190189
request = kwargs.get("request")
191190
if request is None:
@@ -198,7 +197,7 @@ def signal_retrieve_task_id_from_request(kwargs):
198197
return task_id
199198

200199

201-
def signal_retrieve_task_id_from_message(kwargs):
200+
def retrieve_task_id_from_message(kwargs):
202201
"""Helper to retrieve the `Task` identifier from the message `body`.
203202
This helper supports Protocol Version 1 and 2. The Protocol is well
204203
detailed in the official documentation:
@@ -213,9 +212,7 @@ def signal_retrieve_task_id_from_message(kwargs):
213212
return body.get("id")
214213

215214

216-
217-
218-
def signal_retrieve_reason(kwargs):
215+
def retrieve_reason(kwargs):
219216
reason = kwargs.get("reason")
220217
if not reason:
221218
logger.debug("Unable to retrieve the retry reason")

Diff for: ext/opentelemetry-ext-celery/tests/test_utils.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ def test_task_id_from_protocol_v1(self):
161161
"properties": {},
162162
}
163163

164-
task_id = utils.retrieve_task_id(context)
164+
task_id = utils.retrieve_task_id_from_message(context)
165165
self.assertEqual(task_id, "dffcaec1-dd92-4a1a-b3ab-d6512f4beeb7")
166166

167167
def test_task_id_from_protocol_v2(self):
@@ -204,5 +204,5 @@ def test_task_id_from_protocol_v2(self):
204204
},
205205
}
206206

207-
task_id = utils.retrieve_task_id(context)
207+
task_id = utils.retrieve_task_id_from_message(context)
208208
self.assertEqual(task_id, "7e917b83-4018-431d-9832-73a28e1fb6c0")

0 commit comments

Comments
 (0)