Spaces:
Running
Running
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
-- =====================================================
|