File size: 4,367 Bytes
c0e18bf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
-- =====================================================
-- Supabase Database Schema for Data Science Agent Analytics
-- =====================================================
-- Run this in your Supabase SQL Editor: https://app.supabase.com/project/_/sql

-- 1. Usage Analytics Table
-- Tracks individual queries/requests made by users
CREATE TABLE IF NOT EXISTS usage_analytics (
    id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
    user_id TEXT NOT NULL,
    user_email TEXT,
    session_id TEXT NOT NULL,
    query TEXT NOT NULL,
    agent_used TEXT,
    tools_executed TEXT[],
    tokens_used INTEGER,
    duration_ms INTEGER,
    success BOOLEAN DEFAULT true,
    error_message TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

-- 2. User Sessions Table
-- Tracks user sessions for engagement metrics
CREATE TABLE IF NOT EXISTS user_sessions (
    id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
    user_id TEXT NOT NULL,
    user_email TEXT,
    started_at TIMESTAMPTZ DEFAULT NOW(),
    ended_at TIMESTAMPTZ,
    queries_count INTEGER DEFAULT 0,
    browser_info TEXT
);

-- 3. Indexes for performance
CREATE INDEX IF NOT EXISTS idx_usage_analytics_user_id ON usage_analytics(user_id);
CREATE INDEX IF NOT EXISTS idx_usage_analytics_created_at ON usage_analytics(created_at);
CREATE INDEX IF NOT EXISTS idx_usage_analytics_session_id ON usage_analytics(session_id);
CREATE INDEX IF NOT EXISTS idx_user_sessions_user_id ON user_sessions(user_id);
CREATE INDEX IF NOT EXISTS idx_user_sessions_started_at ON user_sessions(started_at);

-- 4. Function to increment session query count atomically
CREATE OR REPLACE FUNCTION increment_session_queries(session_id UUID)
RETURNS VOID AS $$
BEGIN
    UPDATE user_sessions 
    SET queries_count = queries_count + 1 
    WHERE id = session_id;
END;
$$ LANGUAGE plpgsql;

-- 5. Enable Row Level Security (RLS)
ALTER TABLE usage_analytics ENABLE ROW LEVEL SECURITY;
ALTER TABLE user_sessions ENABLE ROW LEVEL SECURITY;

-- 6. RLS Policies - Allow authenticated users to insert their own data
-- Policy for usage_analytics
CREATE POLICY "Users can insert their own analytics" ON usage_analytics
    FOR INSERT WITH CHECK (true);

CREATE POLICY "Users can view their own analytics" ON usage_analytics
    FOR SELECT USING (auth.uid()::text = user_id OR user_id = 'anonymous');

-- Policy for user_sessions
CREATE POLICY "Users can insert their own sessions" ON user_sessions
    FOR INSERT WITH CHECK (true);

CREATE POLICY "Users can update their own sessions" ON user_sessions
    FOR UPDATE USING (auth.uid()::text = user_id OR user_id = 'anonymous');

CREATE POLICY "Users can view their own sessions" ON user_sessions
    FOR SELECT USING (auth.uid()::text = user_id OR user_id = 'anonymous');

-- 7. Helpful Views for Analytics Dashboard

-- Daily active users
CREATE OR REPLACE VIEW daily_active_users AS
SELECT 
    DATE(created_at) as date,
    COUNT(DISTINCT user_id) as unique_users,
    COUNT(*) as total_queries
FROM usage_analytics
GROUP BY DATE(created_at)
ORDER BY date DESC;

-- Popular queries
CREATE OR REPLACE VIEW popular_queries AS
SELECT 
    query,
    COUNT(*) as count,
    COUNT(DISTINCT user_id) as unique_users
FROM usage_analytics
WHERE created_at > NOW() - INTERVAL '7 days'
GROUP BY query
ORDER BY count DESC
LIMIT 50;

-- Agent usage stats
CREATE OR REPLACE VIEW agent_usage_stats AS
SELECT 
    agent_used,
    COUNT(*) as total_uses,
    AVG(duration_ms) as avg_duration_ms,
    SUM(CASE WHEN success THEN 1 ELSE 0 END)::float / COUNT(*) * 100 as success_rate
FROM usage_analytics
WHERE agent_used IS NOT NULL
GROUP BY agent_used
ORDER BY total_uses DESC;

-- =====================================================
-- SETUP INSTRUCTIONS:
-- =====================================================
-- 1. Go to https://app.supabase.com/ and create a new project
-- 2. Go to Settings > API to get your Project URL and anon key
-- 3. Create a .env file in FRRONTEEEND/ with:
--    VITE_SUPABASE_URL=your_project_url
--    VITE_SUPABASE_ANON_KEY=your_anon_key
-- 4. Go to Authentication > Providers and enable:
--    - Email (enabled by default)
--    - Google (optional - need OAuth credentials)
--    - GitHub (optional - need OAuth app)
-- 5. Run this SQL in the SQL Editor
-- 6. Done! Your analytics will start tracking automatically
-- =====================================================