CreaRack-SL

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]]