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 helperasyncstandalone y un decorador que solo trackea si la función decorada retorna exitosamente (nunca en error), conmetadata_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.warningy se descarta. - Persistencia desacoplada: interface
TrackingRepository+ adaptadorPostgresTrackingRepository(schemaevents_tracking, tablatracking_events,metadataJSONB 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.jsonrds_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)
| File | Size | Uploaded | |
|---|---|---|---|
| package_events_tracking-0.1.1.tar.gz | 14.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|