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
- Una regex compilada extrae ruta, estado y tamaño.
Countercuenta los estados y las rutas top.- Los totales imprimen un reporte compacto.
Palabras clave y builtins usados aquí
continuedefdictelseforifintlenprintreturn
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.
Paso 2 de 3 en Bis; paso 40 de 41 en Herramientas de dominio.