←

De Patterns a Fleet: GPS Publico vs Privado

Caso de estudio: extraccion de un repo open source desde un sistema de fleet tracking privado. Comparativa entre gps-tracking-patterns (publico) y GPS Fleet Monitor (privado).

fullstackOpen Source2026-05-02
pythonfastapihttpxopen-source

El Problema

Segundo caso de estudio de extraccion open source. Un sistema de fleet tracking privado del cual se extrajo una libreria de 6 patterns. Mismo dominio, distinto alcance.

El Caso

Un sistema de monitoreo GPS vehicular con 26 endpoints (privado) del cual se extrajo una libreria con provider interface, circuit breaker, adaptive polling y track utils (publico).

Que tiene cada uno

CapacidadPublicoPrivado
GPS Provider Interface (abstracto)SiSi
Tracksolid Adapter (auth, positions, tracks)SiSi
OAuth + MD5 signing + Redis cacheSiSi
Circuit Breaker (Redis-backed)SiSi
Track Utils (haversine, trip summary)SiSi
Adaptive PollingSiSi
26 endpoints REST (FastAPI)--Si
PostgreSQL (6 modelos)--Si
Dashboard web (HTMX + Leaflet)--Si
Celery tasks (adaptive polling)--Si
Geofence sync bidireccional--Si
Comandos remotos (2-step confirm)--Si
Alertas (velocidad, geofence, ignicion)--Si
Server-Sent Events (tiempo real)--Si

En numeros

MetricaPublicoPrivado
Lineas de codigo~1,000~3,900
Archivos Python8~35
Dependencias3 (httpx, redis, tenacity)15+
Tests25342 LOC
InfraestructuraSolo RedisPostgreSQL + Redis + Celery

Criterios de Extraccion

Lo que se publico:

  • Standalone: funciona sin base de datos, sin framework web (solo Redis para circuit breaker)
  • Intercambiable: el provider interface permite implementar otros proveedores GPS
  • Conocimiento escaso: la API de Tracksolid no tiene SDK oficial, rate limits no documentados

Lo que se quedo privado:

  • Acoplado a infraestructura: modelos ORM, Celery tasks, endpoints FastAPI, dashboard
  • Datos sensibles: credenciales API, IMEIs de dispositivos, datos de flota
  • Logica de negocio: geofence sync, comandos remotos, sistema de alertas

El Refactor

El cambio principal fue el Adaptive Polling Manager. En el sistema privado consultaba SQLAlchemy directamente (db.query(Device).filter(...)). La version publica acepta una lista de dicts con {imei, status, last_gps_time} y retorna los IMEIs a pollear. Misma logica, cero ORM.

El Circuit Breaker uso keys hardcodeadas (gps:cb:state). La version publica acepta key_prefix configurable para usar multiples circuit breakers independientes.

Leccion

Misma formula que con Hikvision: el repo publico es el motor (cliente API + patterns de resiliencia), el privado es el vehiculo (API REST + DB + dashboard + automatizacion). La diferencia es que GPS agrego el adaptive polling como pattern -- una optimizacion que solo descubres cuando pagas por cada API call en produccion.

Te late algo similar?

Cuentame tu proyecto por WhatsApp

WhatsApp