opentelemetry-instrumentation-django-stomp


Nameopentelemetry-instrumentation-django-stomp JSON
Version 0.2.0 PyPI version JSON
download
home_pagehttps://github.com/juntossomosmais/opentelemetry-instrumentation-django-stomp
SummaryOpentelemetry instrumentor for django-stomp package
upload_time2022-12-12 19:58:57
maintainer
docs_urlNone
authorJuntos Somos Mais
requires_python>=3.7,<4.0
licenseMIT
keywords django-stomp stomp django opentelemetry instrumentation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Opentelemetry auto instrumentation for django-stomp

[//]: # ([![Build Status]&#40;https://dev.azure.com/juntos-somos-mais-loyalty/python/_apis/build/status/juntossomosmais.opentelemetry-instrumentation-django-stomp?branchName=main&#41;]&#40;https://dev.azure.com/juntos-somos-mais-loyalty/python/_build/latest?definitionId=272&branchName=main&#41;)
[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=juntossomosmais_opentelemetry-instrumentation-django-stomp&metric=sqale_rating&token=80cebbac184a793f8d0be7a3bbe9792f47a6ef23)](https://sonarcloud.io/summary/new_code?id=juntossomosmais_opentelemetry-instrumentation-django-stomp)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=juntossomosmais_opentelemetry-instrumentation-django-stomp&metric=coverage&token=80cebbac184a793f8d0be7a3bbe9792f47a6ef23)](https://sonarcloud.io/summary/new_code?id=juntossomosmais_opentelemetry-instrumentation-django-stomp)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=juntossomosmais_opentelemetry-instrumentation-django-stomp&metric=alert_status&token=80cebbac184a793f8d0be7a3bbe9792f47a6ef23)](https://sonarcloud.io/summary/new_code?id=juntossomosmais_opentelemetry-instrumentation-django-stomp)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)
[![PyPI version](https://badge.fury.io/py/opentelemetry-instrumentation-django-stomp.svg)](https://badge.fury.io/py/opentelemetry-instrumentation-django-stomp)
[![GitHub](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/juntossomosmais/opentelemetry-instrumentation-django-stomp/blob/main/LICENSE)

This library will help you to use opentelemetry traces and metrics on [Django STOMP](https://github.com/juntossomosmais/django-stomp) usage library.

![Django stomp instrumentation](docs/example.gif?raw=true)


####  Installation
pip install `opentelemetry-instrumentation-django-stomp`

#### How to use ?

You can use the `DjangoStompInstrumentor().instrument()` for example in `manage.py` file.


```python
#!/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

#### PUBLISHER example

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.

```python
    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 "PUBLISHER" name.

![publisher example](docs/publisher_example.png?raw=true)

#### CONSUMER example
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.

```bash
   python manage.py pubsub QUEUE_NAME callback_function_to_consume_message
```

Consumer spans can generate up to three types:

- CONSUMER
![consumer example](docs/consumer_example.png?raw=true)
- ACK
![ack example](docs/ack_example.png?raw=true)
- NACK
![nack example](docs/nack_example.png?raw=true)

#### 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](./CONTRIBUTING.md) specs

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/juntossomosmais/opentelemetry-instrumentation-django-stomp",
    "name": "opentelemetry-instrumentation-django-stomp",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.7,<4.0",
    "maintainer_email": "",
    "keywords": "django-stomp,stomp,django,opentelemetry,instrumentation",
    "author": "Juntos Somos Mais",
    "author_email": "labs@juntossomosmais.com.br",
    "download_url": "https://files.pythonhosted.org/packages/9b/74/d45446b152e2883c2efd00e52c7b699d0a95c5d156befffbe136ce987ad9/opentelemetry-instrumentation-django-stomp-0.2.0.tar.gz",
    "platform": null,
    "description": "# Opentelemetry auto instrumentation for django-stomp\n\n[//]: # ([![Build Status]&#40;https://dev.azure.com/juntos-somos-mais-loyalty/python/_apis/build/status/juntossomosmais.opentelemetry-instrumentation-django-stomp?branchName=main&#41;]&#40;https://dev.azure.com/juntos-somos-mais-loyalty/python/_build/latest?definitionId=272&branchName=main&#41;)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=juntossomosmais_opentelemetry-instrumentation-django-stomp&metric=sqale_rating&token=80cebbac184a793f8d0be7a3bbe9792f47a6ef23)](https://sonarcloud.io/summary/new_code?id=juntossomosmais_opentelemetry-instrumentation-django-stomp)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=juntossomosmais_opentelemetry-instrumentation-django-stomp&metric=coverage&token=80cebbac184a793f8d0be7a3bbe9792f47a6ef23)](https://sonarcloud.io/summary/new_code?id=juntossomosmais_opentelemetry-instrumentation-django-stomp)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=juntossomosmais_opentelemetry-instrumentation-django-stomp&metric=alert_status&token=80cebbac184a793f8d0be7a3bbe9792f47a6ef23)](https://sonarcloud.io/summary/new_code?id=juntossomosmais_opentelemetry-instrumentation-django-stomp)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)\n[![PyPI version](https://badge.fury.io/py/opentelemetry-instrumentation-django-stomp.svg)](https://badge.fury.io/py/opentelemetry-instrumentation-django-stomp)\n[![GitHub](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/juntossomosmais/opentelemetry-instrumentation-django-stomp/blob/main/LICENSE)\n\nThis library will help you to use opentelemetry traces and metrics on [Django STOMP](https://github.com/juntossomosmais/django-stomp) usage library.\n\n![Django stomp instrumentation](docs/example.gif?raw=true)\n\n\n####  Installation\npip install `opentelemetry-instrumentation-django-stomp`\n\n#### How to use ?\n\nYou can use the `DjangoStompInstrumentor().instrument()` for example in `manage.py` file.\n\n\n```python\n#!/usr/bin/env python\n\"\"\"Django's command-line utility for administrative tasks.\"\"\"\nimport os\nimport sys\nimport typing\n\nfrom opentelemetry_instrumentation_django_stomp import DjangoStompInstrumentor\n\nfrom opentelemetry import trace\nfrom opentelemetry.sdk.trace import TracerProvider\nfrom opentelemetry.sdk.trace.export import BatchSpanProcessor\nfrom opentelemetry.sdk.trace.export import ConsoleSpanExporter\nfrom opentelemetry.trace.span import Span\n\n\ndef publisher_hook(span: Span, body: typing.Dict, headers: typing.Dict):\n    # Custom code in your project here we can see span attributes and make custom logic with then.\n    pass\n\n\ndef consumer_hook(span: Span, body: typing.Dict, headers: typing.Dict):\n    # Custom code in your project here we can see span attributes and make custom logic with then.\n    pass\n\n\nprovider = TracerProvider()\ntrace.set_tracer_provider(provider)\ntrace.get_tracer_provider().add_span_processor(BatchSpanProcessor(ConsoleSpanExporter()))\n\ndef main():\n    os.environ.setdefault(\"DJANGO_SETTINGS_MODULE\", \"application.settings\")\n    DjangoStompInstrumentor().instrument(\n        trace_provider=trace,\n        publisher_hook=publisher_hook,\n        consumer_hook=consumer_hook,\n    )\n    try:\n        from django.core.management import execute_from_command_line\n    except ImportError as exc:\n        raise ImportError(\n            \"Couldn't import Django. Are you sure it's installed and \"\n            \"available on your PYTHONPATH environment variable? Did you \"\n            \"forget to activate a virtual environment?\"\n        ) from exc\n    execute_from_command_line(sys.argv)\n\n\nif __name__ == \"__main__\":\n    main()\n```\n\nThe code above will create telemetry wrappers inside django-stomp code and creates automatic spans with broker data.\n\nThe `DjangoStompInstrumentor` can receive three optional parameters:\n- **trace_provider**: The tracer provider to use in open-telemetry spans.\n- **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.\n- **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.\n\n:warning: The hook function will not raise an exception when an error occurs inside hook function, only a warning log is generated\n\n#### PUBLISHER example\n\nWith the django-stomp, we can publish a message to a broker using `publisher.send` and the instrumentator\ncan include a span with telemetry data in this function utilization.\n\n```python\n    from uuid import uuid4\n    from django_stomp.builder import build_publisher\n    publisher = build_publisher(f\"publisher-unique-name-{uuid4()}\")\n    publisher.send(\n        queue='/queue/a-destination',\n        body={\"a\": \"random\",\"body\": \"message\"},\n    )\n```\n\nThe publisher span had \"PUBLISHER\" name.\n\n![publisher example](docs/publisher_example.png?raw=true)\n\n#### CONSUMER example\nWith the django-stomp, we create a simple consumer using pubsub command and the instrumentator\ncan include a span with telemetry data in this function utilization.\n\n```bash\n   python manage.py pubsub QUEUE_NAME callback_function_to_consume_message\n```\n\nConsumer spans can generate up to three types:\n\n- CONSUMER\n![consumer example](docs/consumer_example.png?raw=true)\n- ACK\n![ack example](docs/ack_example.png?raw=true)\n- NACK\n![nack example](docs/nack_example.png?raw=true)\n\n#### Supress django-stomp traces and metrics\nWhen the flag `OTEL_PYTHON_DJANGO_STOMP_INSTRUMENT` has `False` value traces and metrics will not be generated.\nUse this to supress the django-stomp instrumentation.\n\n#### HOW TO CONTRIBUTE ?\nLook the [contributing](./CONTRIBUTING.md) specs\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Opentelemetry instrumentor for django-stomp package",
    "version": "0.2.0",
    "split_keywords": [
        "django-stomp",
        "stomp",
        "django",
        "opentelemetry",
        "instrumentation"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "md5": "169461b80739fa0baf313cee36bb5be8",
                "sha256": "917cad82729b35f887bc51092c73ead9ba864bed2099fca07443c23db6f7258b"
            },
            "downloads": -1,
            "filename": "opentelemetry_instrumentation_django_stomp-0.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "169461b80739fa0baf313cee36bb5be8",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7,<4.0",
            "size": 12253,
            "upload_time": "2022-12-12T19:58:59",
            "upload_time_iso_8601": "2022-12-12T19:58:59.754120Z",
            "url": "https://files.pythonhosted.org/packages/b7/e6/e88f9c6c408f5b5b74f077952760cb04acafde1b09836c271c8e1b257f9e/opentelemetry_instrumentation_django_stomp-0.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "md5": "38ca89ef41613d7d82750602b41a5db4",
                "sha256": "6e108df1a673800a0cb67f0cf26409cd17e97d7e5c743ae13f570457ecde0d49"
            },
            "downloads": -1,
            "filename": "opentelemetry-instrumentation-django-stomp-0.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "38ca89ef41613d7d82750602b41a5db4",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7,<4.0",
            "size": 9875,
            "upload_time": "2022-12-12T19:58:57",
            "upload_time_iso_8601": "2022-12-12T19:58:57.985813Z",
            "url": "https://files.pythonhosted.org/packages/9b/74/d45446b152e2883c2efd00e52c7b699d0a95c5d156befffbe136ce987ad9/opentelemetry-instrumentation-django-stomp-0.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2022-12-12 19:58:57",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "juntossomosmais",
    "github_project": "opentelemetry-instrumentation-django-stomp",
    "lcname": "opentelemetry-instrumentation-django-stomp"
}
        
Elapsed time: 0.53789s