Skip to content

tectijuana/5miniloganalizer-DeftOZK

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Práctica 4.2: Mini Cloud Log Analyzer - Variante C

Autor

  • Nombre: Torres Moreno Diego Antonio
  • Matrícula: 23212077
  • Asignatura: Lenguajes de Interfaz
  • Institución: TECNM Campus ITT
  • Fecha: 22 de abril de 2026

.


1. Variante Asignada y Solución Implementada

Variante C: Detectar la primera aparición de 503.

La solución requerida modifica el comportamiento de un analizador de logs HTTP tradicional. En lugar de contar y clasificar todos los códigos hasta el final del archivo, este analizador se maneja en modo de monitoreo crítico (Early Exit). Lee el flujo de datos y, al detectar el primer evento 503 Service Unavailable, detiene inmediatamente la ejecución y manda una alerta, ignorando cualquier registro posterior.


2. Diseño y Lógica Utilizada (A nivel Ensamblador)

El código fue escrito exclusivamente en ensamblador ARM64, evitando la biblioteca estándar de C (libc) y comunicándose directamente con el kernel de Linux a través de llamadas al sistema (syscalls).

Máquina de Estados y Flujo de Control:

  1. Lectura en Bloques: Se utiliza la syscall read (x8 = 63) para cargar hasta 4096 bytes de la entrada estándar (stdin) a un buffer en memoria, optimizando las operaciones de E/S.

  2. Parser de Enteros Cíclico: El programa itera byte por byte. Si el carácter ASCII está entre '0' y '9', lo convierte a su valor decimal y lo acumula usando desplazamientos en base 10 (numero_actual = numero_actual * 10 + digito).

  3. Condición de Alerta (Branching): Al detectar un salto de línea (\n), el analizador evalúa el número parseado:

    • Se ejecuta una comparación directa: cmp x22, #503.
    • Si coincide (b.eq), el flujo salta inmediatamente a la etiqueta alerta_503, la cual invoca la syscall write (x8 = 64) para imprimir la alerta crítica y luego ejecuta exit (x8 = 93), garantizando que se cumpla la condición de "primera aparición".
  4. Manejo de Casos Borde: Si la syscall read devuelve 0 (EOF - Fin de archivo) sin haber detectado un 503, el programa imprime un mensaje de estado [OK] y finaliza limpiamente.


3. Archivo Fuente Funcional y Arquitectura

  • Archivo fuente: El código se encuentra en src/analyzer.s.
  • Adaptación a Entorno Termux (Android): Durante el desarrollo, se me presentó el error de arquitectura unexpected e_type: 2. Llegue a la conclusión de que las políticas de seguridad del sistema necesitaban que los ejecutables sean independientes de la posición. Lo pude solucionar enlazando el binario con el flag -pie (ld -pie -o analyzer analyzer.o).

Proceso de compilación y enlazado en entorno ARM64:

Captura de pantalla 2026-04-22 025422

4. Evidencia de Ejecución

Generación de archivos de prueba personalizados ('test_ok.txt' y 'test_error.txt') mediante el comando echo:**

Captura de pantalla 2026-04-22 025910

Prueba de Caso Negativo. Al procesar el archivo 'test_ok.txt', el analizador recorre la secuencia completa sin activar alertas, confirmando que no se detectaron eventos 503 y finalizando con un estado de éxito [OK]:

Captura de pantalla 2026-04-22 031652

A continuación, se presenta la validación manual utilizando los datos de prueba asignados (data/logs_C.txt):

Comando ejecutado:

cat data/logs_C.txt | ./analyzer

Captura de pantalla 2026-04-22 033443

5. Trazabilidad y Commits en GitHub Classroom

Realice el desarrollo de esta solución utilizando control de versiones. Todo el progreso, refactorización de la lógica base a la Variante C, y ajustes de compilación para ARM64 quedaron registrados por medio de commits con descripción enviados directamente desde la terminal de Termux hasta este repositorio.

Captura de pantalla 2026-04-22 023202
Captura de pantalla 2026-04-22 031441

About

26aldi5pm-5miniloganalizer-tmpLDI-logs1 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

No contributors

Languages

  • Assembly 53.1%
  • Shell 29.5%
  • Makefile 17.4%