hbox-docs/backend/semilla_1027.py

65 lines
4.5 KiB
Python

#!/usr/bin/env python3
"""Primeras incidencias (27-oct-2026): las dos fallas de acceso de esta semana, para que el tablero de Incidencias arranque
con su historia. Se corre EN EL SERVIDOR después de reiniciar el servicio (lo hace scripts/despliegue-1027.sh):
cd /srv/projects/drogheda/hbox-docs/backend && venv/bin/python3 semilla_1027.py
Idempotente: si ya existe una incidencia con la misma firma, no la vuelve a abrir. Escribe como «claude» por 127.0.0.1:8081.
"""
import json
import os
import urllib.request
API = os.environ.get("VIGIA_API", "http://127.0.0.1:8081")
def api(metodo, ruta, cuerpo=None):
req = urllib.request.Request(API + ruta, method=metodo, data=json.dumps(cuerpo).encode() if cuerpo is not None else None,
headers={"X-Remote-User": "claude", "Content-Type": "application/json"})
with urllib.request.urlopen(req, timeout=15) as r:
return json.loads(r.read().decode())
SEMILLA = [
{"alta": {"firma": "semilla:acceso-restablecer", "origen": "agente", "tipo": "acceso", "gravedad": "alta",
"titulo": "Después de restablecer la contraseña no se podía volver a entrar (reporte de Adriana, 26-oct)",
"descripcion": "Adriana reportó el 26-oct que, después de restablecer contraseñas, la gente no podía volver a entrar. "
"El 23-oct se restableció a todos con una contraseña inicial y solo 4 de 19 la cambiaron. El 27-oct a "
"las 9:18 Gibran le restableció la suya a Adriana y con eso entró.",
"pagina": "/cuenta.html"},
"cambio": {"estado": "en-curso", "asignado": "claude", "publica": True,
"resumen_publico": "Desde el 27-oct se entra con una página nueva: tu usuario (o tu correo de Helgen) y tu "
"contraseña. Si tu navegador llena una contraseña vieja, bórrala y escribe la tuya.",
"comentario": "Causa: con la ventana gris de antes (HTTP Basic de nginx) el navegador y el teléfono guardaban la "
"contraseña anterior y la volvían a mandar sola; Mi cuenta no tenía campo de usuario, así que el "
"gestor de contraseñas nunca la actualizaba; el usuario con mayúscula («Adriana») no existía para "
"nginx, y el servidor no registraba quién fallaba ni por qué. Arreglo (27-oct): página de entrada "
"propia (usuario o correo, sin importar mayúsculas), sesión que sobrevive al cambio de contraseña, "
"cerrar sesión que sí cierra, el restablecimiento cierra las sesiones viejas, contraseñas sin "
"mayúscula automática en el teléfono, y cada intento queda registrado (sin la contraseña). Queda "
"en curso una semana: el vigía avisa si alguien sigue sin poder entrar."}},
{"alta": {"firma": "semilla:servicio-repetibles", "origen": "agente", "tipo": "datos", "gravedad": "media",
"titulo": "El servicio instalado a mano el 27-oct dejó fuera la prueba Ethernet/serie y no estaba en el repo",
"descripcion": "A las 9:15 del 27-oct se reinstaló /etc/systemd/system/actas-hbox.service con una copia vieja: "
"agregó a Gibran como administrador, pero ACTAS_REPETIBLES ya no incluía prueba-ethernet-serie "
"(la segunda acta de la misma serie se rechazaba con 409). El repo no tenía a Gibran.",
"pagina": "/formularios/ethernet-serie.html"},
"cambio": {"estado": "resuelta", "asignado": "claude",
"comentario": "Arreglado en el despliegue del 27-oct: el servicio del repo ahora lleva a Gibran como "
"administrador y la lista completa de actas repetibles, y se instaló desde el repo. El vigía "
"compara cada hora el servicio instalado contra el del repo y abre una incidencia si no coinciden."}},
]
def main():
for s in SEMILLA:
lista = api("GET", "/api/incidencias?estado=todas&q=" + urllib.request.quote(s["alta"]["titulo"][:30]))
if any(r.get("titulo") == s["alta"]["titulo"] for r in lista.get("incidencias", [])):
print("ya estaba:", s["alta"]["titulo"][:70])
continue
r = api("POST", "/api/incidencias", s["alta"])
api("PATCH", "/api/incidencia?id=" + r["id"], s["cambio"])
print("abierta:", r["id"], s["alta"]["titulo"][:70])
if __name__ == "__main__":
main()