File size: 3,088 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
from firebase_admin import credentials, firestore
import firebase_admin
from collections import Counter
from datetime import datetime

# # --- 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_filtrada(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,
    excluyendo aquellos cuyo campo 'servidor' sea 'buzzword' y tengan un timestamp.

    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}' ---")
    
    try:
        # 1. Obtener los documentos que cumplen el filtro de exclusión principal
        docs_filtrados = db.collection(coleccion_nombre).where(
            filter=firestore.FieldFilter('servidor', '!=', 'buzzword')
        ).stream()
        
        # 2. Extraer la hora de cada timestamp, filtrando en Python
        horas_creacion = []
        for doc in docs_filtrados:
            doc_data = doc.to_dict()
            # Filtramos en el código de Python
            if 'timestamp_creacion' in doc_data and doc_data['timestamp_creacion'] is not None:
                timestamp = doc_data['timestamp_creacion']
                hora = timestamp.hour
                horas_creacion.append(hora)
        
        if not horas_creacion:
            print("❌ No se encontraron timestamps de creación para analizar después de aplicar el filtro.")
            return {}
            
        # 3. Contar la frecuencia de cada hora
        conteo_horas = Counter(horas_creacion)
        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 los campos necesarios
    estadisticas_filtradas = sacar_estadistica_horas_filtrada('logs')

    if estadisticas_filtradas:
        print("\n--- Conteo de documentos creados por hora (sin 'buzzword') ---")
        for hora, cantidad in estadisticas_filtradas.items():
            print(f"  Hora {hora:02d}:00 - {hora:02d}:59 -> {cantidad} documentos")
    else:
        print("\nNo se pudieron generar las estadísticas.")