Contexto
Los logs del módulo SDM contenían mensajes del tipo:
text
FisAircrafts message received:
<xml-fragment fullLoad="true">
<urn:fisAircraft ... />
<urn:fisAircraft ... />
...
</xml-fragment>Un único fragmento podía contener cientos de aeronaves.
Se necesitaba buscar vuelos presentes en un Excel y extraer sus datos.
Dificultad
Un enfoque ingenuo podría procesar únicamente una línea o buscar una matrícula mediante una expresión regular global.
Esto falla cuando:
- el XML ocupa múltiples líneas;
- hay cientos de nodos;
- la matrícula aparece lejos de la cabecera;
- existen varios fragmentos;
- un mensaje se corta por rotación de logs;
- el XML contiene namespaces;
- se intenta aplicar regex a estructuras jerárquicas complejas.
Decisión: reconstruir primero el fragmento completo
La estrategia correcta es detectar:
text
inicio de mensaje
|
v
acumular lineas
|
v
fin de xml-fragment
|
v
parsear XML completo
|
v
iterar fisAircraftEsto permite tratar cada mensaje como una unidad.
Caso de fallo: una matrícula visible no aparecía en el informe
Se detectó un caso donde una matrícula concreta estaba claramente presente en el log pero no aparecía en la salida.
Este tipo de incidencia es especialmente útil desde el punto de vista de ingeniería.
La respuesta adecuada no es añadir una excepción especial para esa matrícula.
Hay que estudiar por qué el algoritmo no la detectó.
Posibles causas:
- lectura parcial del bloque;
- namespace;
- normalización;
- expresión regular demasiado restrictiva;
- procesamiento que solo toma el primer elemento;
- XML incompleto;
- filtrado previo;
- problema de encoding.
Lo que aprendí
Cuando un caso conocido contradice el resultado, debe convertirse en un caso de prueba de regresión.
Decisión: eliminar RAW del informe final
Durante debugging puede ser útil conservar el XML completo.
Pero para un informe operacional, una columna RAW:
- ocupa mucho;
- dificulta abrir Excel;
- hace el archivo poco legible;
- duplica información.
Es un buen ejemplo de separación entre:
text
datos de diagnósticoy:
text
datos de consumo---
