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())