Spaces:
Running
Running
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.") |