Opentelemetry instrumentor for django-stomp package
Project description
Opentelemetry auto instrumentation for django-stomp
This library will help you to use opentelemetry traces and metrics on Django STOMP usage library.
Installation
pip install opentelemetry-instrumentation-django-stomp
How to use ?
You can use the DjangoStompInstrumentor().instrument() for example in manage.py file.
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
import typing
from opentelemetry_instrumentation_django_stomp import DjangoStompInstrumentor
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
from opentelemetry.trace.span import Span
def publisher_hook(span: Span, body: typing.Dict, headers: typing.Dict):
# Custom code in your project here we can see span attributes and make custom logic with then.
pass
def consumer_hook(span: Span, body: typing.Dict, headers: typing.Dict):
# Custom code in your project here we can see span attributes and make custom logic with then.
pass
provider = TracerProvider()
trace.set_tracer_provider(provider)
trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(ConsoleSpanExporter()))
def main():
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "application.settings")
DjangoStompInstrumentor().instrument(
trace_provider=trace,
publisher_hook=publisher_hook,
consumer_hook=consumer_hook,
)
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == "__main__":
main()
The code above will create telemetry wrappers inside django-stomp code and creates automatic spans with broker data.
The DjangoStompInstrumentor can receive three optional parameters:
- trace_provider: The tracer provider to use in open-telemetry spans.
- publisher_hook: The callable function on publisher action to call before the original function call, use this to override, enrich the span or get span information in the main project.
- consumer_hook: The callable function on consumer action to call before the original function call, use this to override, enrich the span or get span information in the main project.
:warning: The hook function will not raise an exception when an error occurs inside hook function, only a warning log is generated
Span Generated
send {destination}
With the django-stomp, we can publish a message to a broker using publisher.send and the instrumentator
can include a span with telemetry data in this function utilization.
from uuid import uuid4
from django_stomp.builder import build_publisher
publisher = build_publisher(f"publisher-unique-name-{uuid4()}")
publisher.send(
queue='/queue/a-destination',
body={"a": "random","body": "message"},
)
The publisher span had send {destination} name.
CONSUMER
With the django-stomp, we create a simple consumer using pubsub command and the instrumentator can include a span with telemetry data in this function utilization.
python manage.py pubsub QUEUE_NAME callback_function_to_consume_message
Consumer spans can generate up to three types:
- process {destination}
- ack {destination}
- nack {destination}
Supress django-stomp traces and metrics
When the flag OTEL_PYTHON_DJANGO_STOMP_INSTRUMENT has False value traces and metrics will not be generated.
Use this to supress the django-stomp instrumentation.
HOW TO CONTRIBUTE ?
Look the contributing specs
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file opentelemetry_instrumentation_django_stomp-0.4.0.tar.gz.
File metadata
- Download URL: opentelemetry_instrumentation_django_stomp-0.4.0.tar.gz
- Upload date:
- Size: 9.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.5.1 CPython/3.10.18 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40b942621b39542e1bccf0f1160e8f8364f2f8fba6d8a6e4ac6eefd89ea748b3
|
|
| MD5 |
002ee9b52c8cc1648de8c33bf2dd4deb
|
|
| BLAKE2b-256 |
6c0a41945f28ef6def3b8fc238ac85fb6ca302fed2811913a89f6c3c8fe8ec7e
|
File details
Details for the file opentelemetry_instrumentation_django_stomp-0.4.0-py3-none-any.whl.
File metadata
- Download URL: opentelemetry_instrumentation_django_stomp-0.4.0-py3-none-any.whl
- Upload date:
- Size: 12.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.5.1 CPython/3.10.18 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9225036fa1f4788dd4309ef7314ba516b9813a042626d4b61eea171e342ab75c
|
|
| MD5 |
b06c2b98095f05db3b558d00b7823e50
|
|
| BLAKE2b-256 |
9c789fb58a78de6ffcd30ec433f188b0ff9c1f3f9d252f7352c38ae57a8cc8a1
|