Metadata-Version: 2.4
Name: flexinfer-observability
Version: 0.2.2
Summary: Structured logging and metrics for Python services
Author-email: Cody Blevins <cody@flexinfer.ai>
License: MIT
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Requires-Python: >=3.11
Requires-Dist: opentelemetry-api>=1.20.0
Requires-Dist: prometheus-client>=0.19.0
Provides-Extra: dev
Requires-Dist: mypy>=1.0.0; extra == 'dev'
Requires-Dist: pre-commit>=3.5.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Requires-Dist: ruff>=0.1.0; extra == 'dev'
Description-Content-Type: text/markdown

![Banner](assets/banner.png)
# flexinfer-observability

![Header](assets/header.svg)

[![pipeline status](https://gitlab.flexinfer.ai/libs/py-observability/badges/main/pipeline.svg)](https://gitlab.flexinfer.ai/libs/py-observability/-/commits/main)
[![coverage report](https://gitlab.flexinfer.ai/libs/py-observability/badges/main/coverage.svg)](https://gitlab.flexinfer.ai/libs/py-observability/-/commits/main)

Standardized observability library for Python services in the FlexInfer ecosystem.

## Features

- **Structured Logging**: `JsonFormatter` with automatic OpenTelemetry trace ID injection.
- **Metrics**: `BaseMetrics` abstraction for Prometheus counters/gauges with Pushgateway support.
- **Timing**: Context managers for operation latency measurement.

## Usage

### Logging

```python
from observability.logging import setup_logging

logger = setup_logging(level="INFO", log_format="json")
logger.info("Service started", extra={"service_id": "api-1"})
```

### Metrics

```python
from observability.metrics import BaseMetrics
from prometheus_client import Counter

class ServiceMetrics(BaseMetrics):
    def __init__(self):
        super().__init__(job_name="my_service")
        self.requests = Counter("requests_total", "Total requests")

metrics = ServiceMetrics()
metrics.requests.inc()
metrics.push()
```

## Configuration

| Environment Variable      | Description                  | Default     |
| ------------------------- | ---------------------------- | ----------- |
| `LOG_LEVEL`               | Log level (DEBUG, INFO, ...) | INFO        |
| `LOG_FORMAT`              | logging format (json, plain) | plain       |
| `METRICS_PUSHGATEWAY_URL` | Prometheus Pushgateway URL   | None        |
| `METRICS_JOB_NAME`        | Job name for metrics         | default_job |

## Installation

```bash
pip install flexinfer-observability
```
