nowme-images-app / stats.py
Moibe's picture
Costo real de procesamiento son 6 segundos
5a31539
from firebase_admin import credentials, firestore
import firebase_admin
from datetime import datetime
from collections import Counter
# # --- Inicialización de Firebase (asegúrate de que esto se ejecute una sola vez) ---
if not firebase_admin._apps:
try:
firebase_cred = credentials.Certificate('archivos/config.json')
firebase_admin.initialize_app(firebase_cred)
print("Firebase Admin SDK inicializada exitosamente.")
except Exception as e:
print(f"Error al inicializar Firebase Admin SDK: {e}")
exit()
db = firestore.client(database_id='nowme')
def sacar_estadistica_horas(coleccion_nombre):
"""
Analiza la hora de creación de los documentos en una colección
y devuelve un recuento de cuántos documentos se crearon en cada hora del día.
Args:
coleccion_nombre (str): El nombre de la colección a analizar.
Returns:
dict: Un diccionario donde las claves son las horas (0-23) y los
valores son el número de documentos creados en esa hora.
"""
print(f"\n--- Sacando estadísticas de creación por hora en la colección '{coleccion_nombre}' ---")
# 1. Obtener todos los documentos de la colección
# Es importante que el campo `timestamp_creacion` exista en todos.
try:
docs = db.collection(coleccion_nombre).stream()
# 2. Extraer la hora de cada timestamp
horas_creacion = []
for doc in docs:
doc_data = doc.to_dict()
if 'timestamp_creacion' in doc_data and doc_data['timestamp_creacion'] is not None:
# Firestore `SERVER_TIMESTAMP` se convierte a un objeto datetime en Python
timestamp = doc_data['timestamp_creacion']
hora = timestamp.hour # Obtenemos solo la hora (de 0 a 23)
horas_creacion.append(hora)
if not horas_creacion:
print("❌ No se encontraron timestamps de creación para analizar.")
return {}
# 3. Contar la frecuencia de cada hora
# `Counter` es perfecto para esto, cuenta las repeticiones de los elementos en una lista
conteo_horas = Counter(horas_creacion)
# Opcional: ordenar los resultados por hora
resultados_ordenados = dict(sorted(conteo_horas.items()))
print("✔️ Estadísticas de creación por hora calculadas.")
return resultados_ordenados
except Exception as e:
print(f"❌ Error al sacar las estadísticas: {e}")
return {}
# --- Ejemplo de uso ---
if __name__ == "__main__":
# Asegúrate de que tu colección 'logs' exista y tenga documentos con 'timestamp_creacion'
# Esta función leerá TODOS los documentos de la colección, tenlo en cuenta para el costo si es muy grande.
estadisticas = sacar_estadistica_horas('logs')
if estadisticas:
print("\n--- Conteo de documentos creados por hora ---")
for hora, cantidad in estadisticas.items():
# Formateamos la hora para una mejor visualización
print(f" Hora {hora:02d}:00 - {hora:02d}:59 -> {cantidad} documentos")
else:
print("\nNo se pudieron generar las estadísticas.")