Skip to main content

package-events-tracking

Librería compartida de tracking de eventos de producto para microservicios Finkargo. Sigue las mismas convenciones que fk_util_tools (fk_utils): empaquetado Poetry + MIT, configuración vía Config/SETTINGS, credenciales vía AWS Secrets Manager (no env vars planas), logging estándar y type hints consistentes. El módulo Python se sigue importando como fk_tracking.

Instalación

poetry add package-events-tracking

Main Features

  • Decorador @track_endpoint: instrumenta cualquier endpoint de FastAPI capturando producto, categoría, usuario, duración, estado y metadata flexible — sin tocar la lógica de negocio.
  • track_event / @track_on_success: para tracking condicional o post-ejecución — un helper async standalone y un decorador que solo trackea si la función decorada retorna exitosamente (nunca en error), con metadata_fn(result, kwargs) opcional para metadata dinámica.
  • Fire-and-forget: un fallo de tracking (repositorio no configurado, DB caída, etc.) nunca rompe el endpoint decorado — se loguea con logger.warning y se descarta.
  • Persistencia desacoplada: interface TrackingRepository + adaptador PostgresTrackingRepository (schema events_tracking, tabla tracking_events, metadata JSONB indexado con GIN).
  • Configuración centralizada: TrackingConfig.set_repository()/get_repository() + resolución de credenciales vía AWS Secrets Manager (get_tracking_connection_string()).
  • Analítica opcional: router de FastAPI (fk_tracking.fastapi.tracking_analytics_router) con endpoints de consulta por producto, usuarios activos y análisis de metadata.

Uso rápido

from fastapi import FastAPI
from fk_tracking import TrackingConfig, track_endpoint
from fk_tracking.config import get_tracking_connection_string
from fk_tracking.repository.postgres_adapter import PostgresTrackingRepository

app = FastAPI()


@app.on_event("startup")
async def configure_tracking():
    connection_string = get_tracking_connection_string()
    if connection_string:
        TrackingConfig.set_repository(PostgresTrackingRepository(connection_string))


@app.get("/cotizaciones")
@track_endpoint(producto="dmp", category="consulta", metadata={"modulo": "cotizaciones"})
async def get_cotizaciones():
    return {"cotizaciones": []}

Tracking condicional o post-ejecución

Para los casos que @track_endpoint no cubre (trackear solo en éxito, o solo bajo una condición interna que no es "la función completó sin excepción"):

from fk_tracking import track_event, track_on_success

# Decorador: trackea solo si la función retorna exitosamente
@track_on_success(
    producto="dmp",
    category=ImportEventCategory.SHIPMENT_CREATED.value,
    metadata_fn=lambda result, kwargs: {"shipment_id": result.id},
    user_id_kwarg="company_uuid",
)
async def create_shipment(company_uuid: str, ...):
    ...


# Función standalone: el caller decide cuándo trackear tras inspeccionar su propio estado
async def process_import(company_uuid: str, shipment):
    result = do_something(shipment)
    if result.requires_manual_review:
        await track_event(
            producto="dmp",
            category=ImportEventCategory.MANUAL_REVIEW.value,
            endpoint="process_import",
            user_id=company_uuid,
            metadata={"shipment_id": shipment.id},
        )

Desarrollo

poetry install
poetry run pytest
poetry run ruff check .

Migraciones

El schema events_tracking y la tabla tracking_events se gestionan en data-bbdd-cross (no en este repo), como cualquier otra tabla de Finkargo:

  • rds_co/Finkargo/changes/000810..000812_..._LIBARDO_CUELLO.json
  • rds_mx/Finkargo/changes/000792..000794_..._LIBARDO_CUELLO.json

TrackingEvent (fk_tracking/repository/postgres_adapter.py) debe mantenerse en sync con esos changesets, no al revés — la fuente de verdad del schema es Liquibase en data-bbdd-cross. La PK es event_id UUID DEFAULT gen_random_uuid() (no serial), y los timestamps son TIMESTAMP WITH TIME ZONE, consistente con el resto de tablas de ese repo.

Release files for package-events-tracking 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for package-events-tracking 0.1.1
File Size Uploaded
package_events_tracking-0.1.1.tar.gz 14.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for package-events-tracking 0.1.1
File Interpreter ABI Platform
package_events_tracking-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 32.2 kB

Release files / package_events_tracking-0.1.1.tar.gz

Download URL package_events_tracking-0.1.1.tar.gz
Size 14.7 kB
Tags Source
SHA-256 checksum
How to use checksums
53e75b06cba974e7c5402c1a431920f6d7f099151220b4b9b7f044e1a06550ac
BLAKE2b-256 checksum
How to use checksums
6d935ca924b2188c2e353236c476d589b7fd5b19bf65e2e920a26b53bd5cf17b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.13.14 Linux/6.17.0-1020-azure

Release files / package_events_tracking-0.1.1-py3-none-any.whl

Download URL package_events_tracking-0.1.1-py3-none-any.whl
Size 17.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e08260119288999d0c4a3d712c0873d309be578dbfc504f95957d25f196e52a9
BLAKE2b-256 checksum
How to use checksums
38995d6872cfa3e7cc518846404b8d06324311341edb70e3f04dbf69642f12bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.13.14 Linux/6.17.0-1020-azure

Release history Release notifications | RSS feed

0.1.2

2 release files

This release

0.1.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page