Skip to content

Instantly share code, notes, and snippets.

@adam-hert
Last active December 9, 2017 01:05
Show Gist options
  • Save adam-hert/a448bbd4f87ab6d0807bf420b878fef7 to your computer and use it in GitHub Desktop.
Save adam-hert/a448bbd4f87ab6d0807bf420b878fef7 to your computer and use it in GitHub Desktop.
AppOptics Celery tracing

This gist depends on redis-server.

Start Celery: celery -A test_celery worker --loglevel=info

Then run the script manually to creata a task: python test_celery.py

from celery import Celery
import time, appoptics
from appoptics import loader
loader.load_inst_modules()
app = Celery(
'test_celery'
,broker= 'redis://localhost/0'
)
app.conf.update(
CELERY_RESULT_BACKEND = 'redis://localhost/1'
)
@appoptics.log_method('maths')
def maths():
time.sleep(1)
@app.task
def add(x, y):
start_time = time.time() * 1e6 # start time for metric span
trace = appoptics.start_trace('Celery_task', keys=None, xtr=None) # start a trace
time.sleep(2)
maths()
result = x+y # the actual celery task
trace_context = appoptics.end_trace('Celery_task') #end the trace
status_code = 200 # set the status code of the current trasaction (maps to the UI)
stop_time = time.time() * 1e6 # stop the timing for the metric span
# Create metric span
appoptics.util.SwigSpan.createHttpSpan(
None, "analyze prices", int(stop_time - start_time), status_code,
"GET", 499 < status_code < 600,
)
return result
#for creating task data
if __name__ == '__main__':
result = add.delay(4, 4)
print( result.get() )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment