nowme-images-app / stats2.py
Moibe's picture
Costo real de procesamiento son 6 segundos
5a31539
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.")