Saltar a contenido

Runbook — PC Manager

Deploy

Dónde corre: host node1.local (checkout en /home/hquintero/pc-manager), con Docker Compose: contenedor pc-manager (Django, puerto host 9000 → contenedor 8000) y db_mariadb (MySQL 8, puerto host 3307). Host público: pcm.compulandia.com.py (el proxy/exposición frente al contenedor no está documentado en este repo — pendiente de confirmar).

No hay CI/CD activo: el .gitlab-ci.yml de la raíz es una plantilla sin completar (rutas y servicio placeholder) y el repo vive en GitHub, así que nunca se ejecuta. El deploy es manual:

cd /home/hquintero/pc-manager
git pull origin main
docker compose up -d --build backend   # el arranque corre migrate + collectstatic

Cómo verificar que el deploy salió bien:

docker compose ps        # backend y db "Up"
docker logs --tail 50 pc-manager   # sin trazas de error; runserver escuchando en 0.0.0.0:8000
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:9000/pc-manager/login/   # → 200

Sincronización periódica

  • El Dockerfile instala un cron (19:50 diario) que ejecuta /app/sync_components.sh, pero ese script hace cd /opt/pc-manager/... y activa un .venv que no existen dentro del contenedor: tal como está, ese cron no puede funcionar. Pendiente de confirmar cómo se dispara hoy la sincronización diaria; la ejecución manual documentada es:
docker exec pc-manager python3 manage.py sync_components   # componentes + reevaluación de combos
docker exec pc-manager python3 manage.py sync_categories   # categorías
  • Ambas también existen como acciones masivas en el admin de categorías (incluida la importación completa de productos por categoría).

Logs

Qué Dónde Cómo verlos
Sincronización y negocio (logger product_sync) logs/product_sync.log en el checkout (volumen montado; rotación diaria a medianoche, 14 días) tail -f logs/product_sync.log
Salida del proceso Django (runserver, prints, requests) stdout del contenedor docker logs -f pc-manager
MySQL stdout del contenedor docker logs -f db_mariadb

Rollback

No hay tags ni releases: el rollback es volver a un commit anterior.

cd /home/hquintero/pc-manager
git log --oneline -10                  # elegir el commit estable
git checkout <commit>
docker compose up -d --build backend

Atención: el contenedor ejecuta migrate al arrancar. Si la versión a revertir es anterior a una migración ya aplicada, la migración NO se revierte sola; hay que bajarla explícitamente antes (docker exec pc-manager python3 manage.py migrate PcManager <NNNN>) y verificar que sea reversible. La base se conserva en el volumen db_data.

Fallas frecuentes

1. Un combo aparece "No disponible" / stock 0 en la tienda

  • Síntoma en el log: No hay componentes asignados en la categoría <id> para el producto <nombre> o El componente <nombre> marcado como 'siempre incluir' no está asignado o no alcanza stock para un combo completo (stock calculado: 0). Es la falla más frecuente del log con diferencia.
  • Diagnóstico: abrir el combo en el admin (/pc-manager/) y revisar el inline de componentes: alguna categoría quedó sin componente asignable (sin stock, componente inactivo en el Integrador, o un always_include sin stock). grep "<nombre del combo>" logs/product_sync.log muestra la categoría exacta.
  • Resolución: asignar/agregar un componente alternativo con stock en esa categoría (o darle prioridad a uno de otro supplier), o desmarcar el always_include sin stock. Guardar reevaluá y empuja el combo.

2. La receta del combo no se aplicó en el Integrador (warning sku_sap)

  • Síntoma en el log: Integrador — producto PCM-NNNNN: Componente 'CPI-NNNN': no tiene sku_sap (sin inventario en SAP) (también: no existe como ProductItem, el ProductItem está inactivo). En un combo ya confirmado, el Integrador conserva la receta anterior.
  • Diagnóstico: grep "Integrador —" logs/product_sync.log lista los componentes rechazados por combo.
  • Resolución: corregir el componente del lado del Integrador/SAP (o sustituirlo en el combo por uno válido) y volver a guardar el combo para reenviar la receta completa.

3. Un cambio local no llegó a la tienda (push perdido)

  • Síntoma: el combo se ve bien en PC Manager pero la tienda muestra precio/stock viejo. En docker logs pc-manager aparece Fallida intento de conexion con el integrador o ❌ HTTPError ... /api/supplier-products/sync (los fallos de conexión salen por stdout, no por product_sync.log).
  • Diagnóstico: los push no tienen reintentos: si el Integrador estaba caído o las credenciales (USER_* del .env) vencieron, ese POST se perdió. Verificar conectividad y credenciales.
  • Resolución: re-guardar el combo en el admin (cualquier guardado con cambios re-encola el push) o correr docker exec pc-manager python3 manage.py sync_components, que reevalúa y empuja los combos cuyos componentes cambiaron.