Spaces:
Sleeping
Sleeping
File size: 6,381 Bytes
1d4dc07 | 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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | #!/usr/bin/env python3
"""
Validate MongoDB data collection
"""
import asyncio
import os
from dotenv import load_dotenv
from datetime import datetime
load_dotenv()
async def validate_mongodb_data():
"""Check what data is actually in MongoDB"""
try:
from analytics.database import get_sessions_collection, get_messages_collection
print("π Validating MongoDB Data Collection")
print("=" * 50)
# Get collections
sessions_collection = await get_sessions_collection()
messages_collection = await get_messages_collection()
if sessions_collection is None or messages_collection is None:
print("β Database collections not available")
return
# Check sessions
print("\nπ SESSIONS DATA:")
sessions_count = await sessions_collection.count_documents({})
print(f"Total sessions: {sessions_count}")
if sessions_count > 0:
# Get recent sessions
recent_sessions = await sessions_collection.find({}).sort("start_time", -1).limit(5).to_list(5)
print("\nRecent sessions:")
for i, session in enumerate(recent_sessions, 1):
print(f" {i}. Session ID: {session.get('session_id', 'N/A')}")
print(f" Start: {session.get('start_time', 'N/A')}")
print(f" Status: {session.get('status', 'N/A')}")
print(f" Messages: {session.get('message_count', 0)}")
print(f" Search used: {session.get('search_used', False)}")
print()
# Check messages
print("\n㪠MESSAGES DATA:")
messages_count = await messages_collection.count_documents({})
print(f"Total messages: {messages_count}")
if messages_count > 0:
# Get recent messages
recent_messages = await messages_collection.find({}).sort("timestamp", -1).limit(5).to_list(5)
print("\nRecent messages:")
for i, message in enumerate(recent_messages, 1):
print(f" {i}. Message ID: {message.get('message_id', 'N/A')}")
print(f" Session: {message.get('session_id', 'N/A')}")
print(f" Timestamp: {message.get('timestamp', 'N/A')}")
print(f" Prompt length: {message.get('prompt_length', 0)}")
print(f" Response time: {message.get('response_time_ms', 0)}ms")
print(f" Used search: {message.get('used_search', False)}")
print(f" Success: {message.get('success', False)}")
print()
# Check today's data
today_start = datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0)
messages_today = await messages_collection.count_documents({
"timestamp": {"$gte": today_start}
})
print(f"\nπ
Messages today: {messages_today}")
# Check active sessions
active_sessions = await sessions_collection.count_documents({
"status": "active"
})
print(f"π’ Active sessions: {active_sessions}")
# Check search usage
messages_with_search = await messages_collection.count_documents({
"used_search": True
})
search_percentage = (messages_with_search / messages_count * 100) if messages_count > 0 else 0
print(f"π Search usage: {messages_with_search}/{messages_count} ({search_percentage:.1f}%)")
return {
"sessions_count": sessions_count,
"messages_count": messages_count,
"messages_today": messages_today,
"active_sessions": active_sessions,
"search_usage_percentage": search_percentage
}
except Exception as e:
print(f"β Error validating MongoDB data: {e}")
import traceback
traceback.print_exc()
return None
async def test_dashboard_data():
"""Test dashboard data retrieval"""
try:
from analytics.dashboard import get_basic_stats
print("\nπ― DASHBOARD DATA:")
print("=" * 50)
stats = await get_basic_stats()
print("Dashboard stats:")
for key, value in stats.items():
print(f" {key}: {value}")
return stats
except Exception as e:
print(f"β Error getting dashboard data: {e}")
import traceback
traceback.print_exc()
return None
async def main():
print("π MongoDB Data Validation & Dashboard Check")
print("=" * 60)
# Validate MongoDB data
mongodb_data = await validate_mongodb_data()
# Test dashboard data
dashboard_data = await test_dashboard_data()
# Compare results
if mongodb_data and dashboard_data:
print("\nπ DATA COMPARISON:")
print("=" * 50)
print(f"MongoDB sessions: {mongodb_data['sessions_count']} | Dashboard: {dashboard_data.get('total_sessions', 'N/A')}")
print(f"MongoDB messages: {mongodb_data['messages_count']} | Dashboard: {dashboard_data.get('total_messages', 'N/A')}")
print(f"MongoDB today: {mongodb_data['messages_today']} | Dashboard: {dashboard_data.get('messages_today', 'N/A')}")
print(f"MongoDB active: {mongodb_data['active_sessions']} | Dashboard: {dashboard_data.get('active_sessions', 'N/A')}")
print(f"MongoDB search %: {mongodb_data['search_usage_percentage']:.1f} | Dashboard: {dashboard_data.get('search_usage_percentage', 'N/A')}")
# Check for discrepancies
discrepancies = []
if mongodb_data['sessions_count'] != dashboard_data.get('total_sessions', 0):
discrepancies.append("sessions count")
if mongodb_data['messages_count'] != dashboard_data.get('total_messages', 0):
discrepancies.append("messages count")
if mongodb_data['messages_today'] != dashboard_data.get('messages_today', 0):
discrepancies.append("today's messages")
if discrepancies:
print(f"\nβ οΈ DISCREPANCIES FOUND: {', '.join(discrepancies)}")
else:
print("\nβ
All data matches between MongoDB and Dashboard!")
if __name__ == "__main__":
asyncio.run(main()) |