Python package to implement observability domain probes
Project description
domprob 🛰️
Inspired by this blog post, domprob is a Python package to implement observability domain probes in your projects.
Overview
Keep your business logic comprehensible by abstracting the observability code away.
Turn this (21 lines):
class OrderService:
def checkout(self):
self.logger.log(f"Attempting to checkout order {self.order}")
try:
self.checkout_service.checkout_order(self.order)
except CheckoutError as e:
self.logger.error(f"Checkout for order {self.order} failed: {e}")
self.metrics.increment("checkout-failed", {
"failed_orders": 1, "customer": 6234654
})
return
self.metrics.increment("checkout-successful", {
"successful_orders": 1,
})
self.logger.log(f"Order checkout completed successfully", {
"successful_orders": 1,
"customer": 6234654,
"order_number": 2374,
"sku": "JH-374-VJHV"
})
→ Into ✨this✨ (9 lines):
class Order:
def checkout(self):
probe.announce(AttemptingCheckoutObservation())
try:
self.checkout_service.checkout_order(self.order)
except CheckoutError as e:
probe.announce(CheckoutFailedObservation())
return
probe.announce(CheckoutSuccessfulObservation())
Installation
Install using uv:
uv add domprob
Using pip:
pip install domprob
Using poetry:
poetry add domprob
Usage
Define an observation
import logging
from typing import Any
from domprob import announcement, BaseObservation
class CheckoutSuccessful(BaseObservation):
def __init__(self, **order_details: Any) -> None:
self.order_details = order_details
@announcement(logging.Logger)
def log_observation(self, log: logging.Logger) -> None:
log.info("Checkout successful!", **self.order_details)
Calling the observation
from domprob import probe
class OrderService:
def checkout(self):
try:
self.checkout_service.checkout_order(self.order)
except CheckoutError as e:
raise
probe.observe(CheckoutSuccessful(**self.order_entity))
Check out the docs for more detail!
Project details
Release history Release notifications | RSS feed
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 domprob-0.1.0b0.tar.gz.
File metadata
- Download URL: domprob-0.1.0b0.tar.gz
- Upload date:
- Size: 31.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b71c1c4ce6c3d2d2aed06fa3e2acf41aea6ec4b3e676652649bbb520bea7afc
|
|
| MD5 |
61d6a5370aa07de7e4c15a051ee317e8
|
|
| BLAKE2b-256 |
a901c1710cbb8ded43cedf5876062671163391b963292321e6c111da1ee21a95
|
File details
Details for the file domprob-0.1.0b0-py3-none-any.whl.
File metadata
- Download URL: domprob-0.1.0b0-py3-none-any.whl
- Upload date:
- Size: 39.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
264346da14bbba927d235aee6692c2f781977844911cef3f87a2e8318ac36810
|
|
| MD5 |
cc7c1e52699580bb721791ccebfc0f4b
|
|
| BLAKE2b-256 |
87a3c28672101fa211885974e5c93f3c9b0131a61ff11b1de09bb6845fffdfed
|