typestar

log_report.py en Python

Resumir estados, rutas y bytes de un log de acceso.

"""Resume un log de acceso: códigos de estado, rutas top, bytes servidos."""
import re
import sys
from collections import Counter
from pathlib import Path

LINEA = re.compile(r'"(?:GET|POST) (?P<path>\S+)[^"]*" (?P<status>\d{3}) '
                  r'(?P<size>\d+)')


def analizar(texto):
    estados, rutas, total = Counter(), Counter(), 0
    for linea in texto.splitlines():
        m = LINEA.search(linea)
        if not m:
            continue
        estados[m.group("status")] += 1
        rutas[m.group("path")] += 1
        total += int(m.group("size"))
    return estados, rutas, total


def principal():
    fuente = Path(sys.argv[1]) if len(sys.argv) > 1 else None
    texto = fuente.read_text() if fuente else sys.stdin.read()
    estados, rutas, total = analizar(texto)
    print("códigos de estado:", dict(estados))
    print("rutas top:")
    for ruta, visitas in rutas.most_common(3):
        print(f"  {visitas:4d}  {ruta}")
    print(f"{total:,} bytes servidos")


if __name__ == "__main__":
    principal()

Cómo funciona

  1. Una regex compilada extrae ruta, estado y tamaño.
  2. Counter cuenta los estados y las rutas top.
  3. Los totales imprimen un reporte compacto.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
35
Caracteres a escribir
905
Tokens
251
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 137 segundos.

Escribe este fragmento

Paso 2 de 3 en Bis; paso 40 de 41 en Herramientas de dominio.

← Anterior Siguiente →