Servicio de Formateo de Reportes Markdown
Descripción
Servicio en monitoring/services/report_service.py que formatea datos de insight en Markdown estructurado para descarga por download_markdown().
Funciones Principales
format_markdown(report_data) -> str
Transforma un dict de generate_report() en string Markdown con secciones:
- Encabezado (timestamp, SLA)
- Root cause
- Contexto (métricas, alertas correladas)
- Runbook aplicado (pasos, comandos)
- Ejecución (output, rollback)
- Acknowledgement
_code_block(title: str, content_lines: list[str]) -> list[str] (nuevo, sa4 B15)
Construye un bloque de código fenced que es immune a backticks en el contenido.
Antes:
lines += ["", "### Commands", "```"]
lines += rec["commands"] # Si un comando contiene ```, rompe el fence
lines += ["```"]
Problema: Un comando/output con ``` cerraba el bloque prematuramente.
Ahora:
def _code_block(title, content_lines):
body = [str(x) for x in content_lines]
longest = 0
for line in body:
run = 0
for ch in line:
run = run + 1 if ch == "`" else 0
longest = max(longest, run)
fence = "`" * max(3, longest + 1) # Siempre más larga que cualquier run
return ["", title, fence, *body, fence]
Beneficio: Incluso si commands/output tienen `````, el fence es aún más largo y mantiene integridad del bloque.
Usos en format_markdown()
if rec["commands"]:
lines += _code_block("### Commands", rec["commands"])
if rec["rollback_commands"]:
lines += _code_block("### Rollback Commands", rec["rollback_commands"])
if ex.get("output"):
lines += _code_block("### Output", [ex["output"]])
Dependencias
- Modelos:
AIInsight,Runbook - Servicios:
generate_report()(mismo módulo)
Integración
Llamada por:
download_markdown(insight_id)endpoint: devuelve el Markdown como archivo attachment
Véase también
- [[feature—monitoring—sa4-baja-cleanup]]
- [[entity—monitoring—api—download-markdown]]
- [[concept—monitoring—report-generation]]
- [[entity—monitoring—service—insight-generator]]