| |
|
| | from datetime import datetime, timezone, timedelta
|
| | import logging
|
| | from .mongo_db import get_collection
|
| |
|
| | logger = logging.getLogger(__name__)
|
| | COLLECTION_NAME = 'student_current_situation'
|
| |
|
| |
|
| |
|
| | def store_current_situation_result(username, text, metrics, feedback):
|
| | """
|
| | Guarda los resultados del an谩lisis de situaci贸n actual.
|
| | """
|
| | try:
|
| |
|
| | if not all([username, text, metrics]):
|
| | logger.error("Faltan par谩metros requeridos")
|
| | return False
|
| |
|
| | collection = get_collection(COLLECTION_NAME)
|
| | if collection is None:
|
| | logger.error("No se pudo obtener la colecci贸n")
|
| | return False
|
| |
|
| |
|
| | document = {
|
| | 'username': username,
|
| | 'timestamp': datetime.now(timezone.utc).isoformat(),
|
| | 'text': text,
|
| | 'metrics': metrics,
|
| | 'feedback': feedback or {},
|
| | 'analysis_type': 'current_situation'
|
| | }
|
| |
|
| |
|
| | result = collection.insert_one(document)
|
| | if result.inserted_id:
|
| | logger.info(f"""
|
| | An谩lisis de situaci贸n actual guardado:
|
| | - Usuario: {username}
|
| | - ID: {result.inserted_id}
|
| | - Longitud texto: {len(text)}
|
| | """)
|
| |
|
| |
|
| | storage_verified = verify_storage(username)
|
| | if not storage_verified:
|
| | logger.warning("Verificaci贸n de almacenamiento fall贸")
|
| |
|
| | return True
|
| |
|
| | logger.error("No se pudo insertar el documento")
|
| | return False
|
| |
|
| | except Exception as e:
|
| | logger.error(f"Error guardando an谩lisis de situaci贸n actual: {str(e)}")
|
| | return False
|
| |
|
| | def verify_storage(username):
|
| | """
|
| | Verifica que los datos se est谩n guardando correctamente.
|
| | """
|
| | try:
|
| | collection = get_collection(COLLECTION_NAME)
|
| | if collection is None:
|
| | logger.error("No se pudo obtener la colecci贸n para verificaci贸n")
|
| | return False
|
| |
|
| |
|
| | timestamp_threshold = (datetime.now(timezone.utc) - timedelta(minutes=5)).isoformat()
|
| |
|
| | recent_docs = collection.find({
|
| | 'username': username,
|
| | 'timestamp': {'$gte': timestamp_threshold}
|
| | }).sort('timestamp', -1).limit(1)
|
| |
|
| | docs = list(recent_docs)
|
| | if docs:
|
| | logger.info(f"""
|
| | 脷ltimo documento guardado:
|
| | - ID: {docs[0]['_id']}
|
| | - Timestamp: {docs[0]['timestamp']}
|
| | - M茅tricas guardadas: {bool(docs[0].get('metrics'))}
|
| | """)
|
| | return True
|
| |
|
| | logger.warning(f"No se encontraron documentos recientes para {username}")
|
| | return False
|
| |
|
| | except Exception as e:
|
| | logger.error(f"Error verificando almacenamiento: {str(e)}")
|
| | return False
|
| |
|
| | def get_current_situation_analysis(username, limit=5):
|
| | """
|
| | Obtiene los an谩lisis de situaci贸n actual de un usuario.
|
| | """
|
| | try:
|
| | collection = get_collection(COLLECTION_NAME)
|
| | if collection is None:
|
| | logger.error("No se pudo obtener la colecci贸n")
|
| | return []
|
| |
|
| |
|
| | query = {'username': username, 'analysis_type': 'current_situation'}
|
| | cursor = collection.find(query).sort('timestamp', -1)
|
| |
|
| |
|
| | if limit:
|
| | cursor = cursor.limit(limit)
|
| |
|
| |
|
| | return list(cursor)
|
| |
|
| | except Exception as e:
|
| | logger.error(f"Error obteniendo an谩lisis de situaci贸n actual: {str(e)}")
|
| | return []
|
| |
|
| | def get_recent_situation_analysis(username, limit=5):
|
| | """
|
| | Obtiene los an谩lisis m谩s recientes de un usuario.
|
| | """
|
| | try:
|
| | collection = get_collection(COLLECTION_NAME)
|
| | if collection is None:
|
| | return []
|
| |
|
| | results = collection.find(
|
| | {'username': username}
|
| | ).sort('timestamp', -1).limit(limit)
|
| |
|
| | return list(results)
|
| |
|
| | except Exception as e:
|
| | logger.error(f"Error obteniendo an谩lisis recientes: {str(e)}")
|
| | return [] |