Skip to main content

Scaffold library

Project description

KLYM Telemetry

A small library to add instrumentation in KLYM apps.

Publish in PYPI

pip install twine
python setup.py bdist_wheel
twine upload dist/*

Installation

pip install klym-telemetry

Get started

Instrumenting a fastapi app

  1. Import klym instrumenter
from klym_telemetry.instrumenters import instrument_app
  1. Import instrument decorator
from klym_telemetry.utils import instrument
  1. Initialize automatic instrumentation
instrument_app(app_type='fastapi', app=app, service_name="test-klym-microservice", endpoint="http://localhost:4317")

Full example:

import time

from fastapi import FastAPI
from klym_telemetry.instrumenters import instrument_app
from klym_telemetry.utils import instrument, klym_telemetry

app = FastAPI()
instrument_app(app_type='fastapi', app=app, service_name="test-klym-microservice", endpoint="http://localhost:4317")


@instrument(private_methods=True, attributes={"description": "Class to say hello"})
class Hello:

    @instrument(span_name="Get start message (private method)")
    def _get_start_message(self):
        return "Hello"

    def say_hello(self):
        return {"message": self._get_start_message() + " World"}

    def say_hello_with_name(self, name: str):
        return {"message": f"{self._get_start_message()} {name}"}


@app.get("/")
def root():
    klym_telemetry.add_event_curr_span("Start sleeping")  # Custom event example
    for _ in range(10):
        time.sleep(0.2)
    klym_telemetry.add_event_curr_span("Finished sleeping")
    return Hello().say_hello()


@app.get("/hello/{name}")
@instrument(span_name="Say hello with name", attributes={"description": "Class to say hello asynchrounously"})
async def say_hello(name: str):
    return {"message": f"Hello {name}"}

Instrumenting a celery app

  1. Import klym instrumenter
from klym_telemetry.instrumenters import instrument_app
  1. Import celery signal when worker starts
from celery.signals import worker_init
  1. Initialize automatic instrumentation
instrument_app(app_type='celery', service_name="integrations", endpoint="http://localhost:4317")

Full example:

import os

from celery import Celery
from celery.signals import worker_init
from klym_telemetry.instrumenters import instrument_app

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings.local')

app = Celery('integrations')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

app.conf.update(
    worker_pool_restarts=True,
)


@worker_init.connect()
def init_celery_tracing(*args, **kwargs):
    instrument_app(app_type='celery', service_name="integrations", endpoint="http://localhost:4317")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

klym_telemetry-0.1.12.6-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file klym_telemetry-0.1.12.6-py3-none-any.whl.

File metadata

File hashes

Hashes for klym_telemetry-0.1.12.6-py3-none-any.whl
Algorithm Hash digest
SHA256 9037a338800774fa2e666b9b716ce25afeb9e7b3b046918b52bc0098b255e972
MD5 e3b4a8e81dbd6a46917a864a26f13ca6
BLAKE2b-256 a6c7a057ec772478fad74da7c217ba4f84b57cef396430d169731091b6edcb1e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page