edullm / core /logging /usage_logger.py
JairoDanielMT's picture
Upload 21 files
f6cb78b verified
import time
import json
from pathlib import Path
from typing import Literal, Optional
# Rutas
LOG_FILE = Path("logs/registro_uso.json")
USER_STATS_FILE = Path("logs/usuarios.json")
# Crear carpeta si no existe
LOG_FILE.parent.mkdir(parents=True, exist_ok=True)
# Tipo de entrada admitida
TipoEntrada = Literal["Texto", "Imagen", "PDF", "DOCX", "TXT", "Otro"]
def registrar_uso(
user_id: int,
username: Optional[str],
tipo_entrada: TipoEntrada,
duracion_segundos: float,
exito: bool,
fuente: Optional[str] = "telegram_bot",
) -> None:
"""
Registra un evento de uso y actualiza el historial acumulado por usuario.
"""
timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
log_entry = {
"timestamp": timestamp,
"user_id": user_id,
"username": username or "N/A",
"tipo_entrada": tipo_entrada,
"duracion_segundos": round(duracion_segundos, 2),
"exito": exito,
"fuente": fuente,
}
# Guardar log individual
try:
registros = []
if LOG_FILE.exists():
with open(LOG_FILE, "r", encoding="utf-8") as f:
registros = json.load(f)
registros.append(log_entry)
with open(LOG_FILE, "w", encoding="utf-8") as f:
json.dump(registros, f, indent=2, ensure_ascii=False)
except Exception as e:
print(f"[ERROR] No se pudo guardar el registro individual: {e}")
# Actualizar conteo acumulado
try:
resumen = {}
if USER_STATS_FILE.exists():
with open(USER_STATS_FILE, "r", encoding="utf-8") as f:
resumen = json.load(f)
uid = str(user_id)
if uid not in resumen:
resumen[uid] = {
"username": username or "N/A",
"total_usos": 0,
"exitosos": 0,
"fallidos": 0,
"ultima_vez": timestamp
}
resumen[uid]["username"] = username or "N/A"
resumen[uid]["total_usos"] += 1
resumen[uid]["ultima_vez"] = timestamp
if exito:
resumen[uid]["exitosos"] += 1
else:
resumen[uid]["fallidos"] += 1
with open(USER_STATS_FILE, "w", encoding="utf-8") as f:
json.dump(resumen, f, indent=2, ensure_ascii=False)
except Exception as e:
print(f"[ERROR] No se pudo actualizar el resumen de usuarios: {e}")