Registro #85: el webhook de Jira FAC queda en producción (paputec) — publicación de 5145801, secreto nuevo, PUT del webhook id 1 y prueba e2e con FAC-170 detectada en 1.05 s (HMAC, verificada) y borrada; producción sigue en Bind__Mode=Write por decisión de Johann

This commit is contained in:
Johann
2026-09-30 00:31:55 -06:00
parent e88b5e1eb8
commit 7e50c71791
3 changed files with 63 additions and 16 deletions
+17 -8
View File
@@ -4,7 +4,8 @@
# url → lee la URL pública del túnel ngrok local (solo lectura)
# registrar → POST /rest/webhooks/1.0/webhook (ESCRIBE: 1 webhook de sitio)
# crear-ticket → POST /rest/api/3/issue (ESCRIBE: 1 ticket de prueba en FAC)
# esperar CLAVE → espera la detección en la BD local (solo lectura)
# esperar CLAVE [paputec] → espera la detección en la BD local o, con "paputec",
# en la de producción por ssh (solo lectura)
# borrar-ticket CLAVE → DELETE /rest/api/3/issue/CLAVE (ESCRIBE: borra el ticket de prueba)
# borrar-webhook → DELETE del webhook registrado (reversa total)
# mover URL_BASE → PUT del webhook a otra URL base (ESCRIBE), p. ej.
@@ -12,7 +13,8 @@
# estado → webhooks de sitio actuales (solo lectura)
#
# Estado del piloto: webhook de sitio id 1 registrado el 29-sep apuntando al
# túnel ngrok de Johann; prueba FAC-169 creada, detectada y borrada.
# túnel ngrok de Johann; prueba FAC-169 creada, detectada y borrada. El 30-sep
# se movió a https://paputec.mx/balam (solo HMAC, secreto nuevo).
#
# El token de Jira y el secreto del webhook nunca se imprimen ni se versionan:
# token → propuesta/token-jira.txt (gitignoreado) o $JIRA_TOKEN_FILE
@@ -61,10 +63,16 @@ def url_publica():
return None
def sql(consulta):
# Superusuario local del docker-compose: ve la tabla pese a RLS.
out = subprocess.run(["docker", "exec", "balam-postgres-dev", "psql", "-U", "balam", "-d", "balam",
"-At", "-F", " | ", "-c", consulta], capture_output=True, text=True, encoding="utf-8")
def sql(consulta, destino="local"):
# Superusuario del docker-compose (local o paputec): ve la tabla pese a RLS.
if destino == "paputec":
# La consulta viaja por stdin: sin comillas que escapar a través de ssh + sudo.
out = subprocess.run(["ssh", "-o", "BatchMode=yes", "johann@paputec.mx",
"sudo docker exec -i balam-postgres psql -U balam -d balam -At -F ' | '"],
input=consulta, capture_output=True, text=True, encoding="utf-8")
else:
out = subprocess.run(["docker", "exec", "balam-postgres-dev", "psql", "-U", "balam", "-d", "balam",
"-At", "-F", " | ", "-c", consulta], capture_output=True, text=True, encoding="utf-8")
return out.stdout.strip() or out.stderr.strip()
@@ -100,7 +108,7 @@ elif cmd == "registrar":
elif cmd == "crear-ticket":
adf = {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"type": "text", "text":
"Ticket de PRUEBA de la plataforma Balam (29-sep-2026), autorizado por Pedro Ayala, para validar "
f"Ticket de PRUEBA de la plataforma Balam ({time.strftime('%d/%m/%Y')}), autorizado por Pedro Ayala, para validar "
"que la plataforma detecta la creación de tickets por webhook. Se elimina en cuanto se confirma."}]}]}
st, r = jira("POST", "/rest/api/3/issue", {"fields": {
"project": {"key": "FAC"}, "issuetype": {"id": "10073"},
@@ -114,12 +122,13 @@ elif cmd == "crear-ticket":
elif cmd == "esperar":
clave = sys.argv[2]
destino = sys.argv[3] if len(sys.argv) > 3 else "local"
for i in range(60):
fila = sql(f"""SELECT "Id","IssueKey","Verified","AuthMethod","JiraStatus",
to_char("JiraTimestampUtc" AT TIME ZONE 'America/Mexico_City','HH24:MI:SS.MS'),
to_char("ReceivedAtUtc" AT TIME ZONE 'America/Mexico_City','HH24:MI:SS.MS'),
round(extract(epoch from ("ReceivedAtUtc"-"JiraTimestampUtc"))::numeric,2),
coalesce("Error",'') FROM "JiraTicketEvents" WHERE "IssueKey"='{clave}'""")
coalesce("Error",'') FROM "JiraTicketEvents" WHERE "IssueKey"='{clave}'""", destino)
if fila and "|" in fila:
print(f"DETECTADO tras ~{i}s de espera: id | llave | verificado | auth | estatus Jira | emitido (MX) | recibido (MX) | retraso s | error")
print(" " + fila)