File size: 3,240 Bytes
5a31539
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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.")