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.")