SPB Git

spb/vquant Public MIT

VibeQuant — AI-powered institutional-grade financial intelligence platform.

TypeScript 84.3% Python 11.7% JavaScript 1.6% CSS 1.5% HTML 0.7%
3.5 KB · 105 lines typescript
Raw Blame History
1/*2 * =============================================================================3 *  VibeQuant (vquant) — AI-Powered Financial Intelligence Platform4 * -----------------------------------------------------------------------------5 *  File:      server/migrate-analytics.ts6 *7 *  Author:    Simon-Pierre Boucher8 *  Contact:   contact@spboucher.ai9 *  Website:   https://www.spboucher.ai10 *  Demo:      https://www.vquant.ai11 *  License:   MIT (see LICENSE)12 *13 *  Copyright © 2026 Simon-Pierre Boucher. All rights reserved.14 * =============================================================================15 */1617import Database from 'better-sqlite3';18import path from 'path';1920const dbPath = path.join(process.cwd(), 'local.db');21const db = new Database(dbPath);2223console.log('🔄 Adding analytics tables to database...');2425try {26  // Create active_users table27  db.exec(`28    CREATE TABLE IF NOT EXISTS active_users (29      id TEXT PRIMARY KEY,30      session_id TEXT NOT NULL UNIQUE,31      user_id TEXT,32      status TEXT NOT NULL DEFAULT 'idle',33      current_query TEXT,34      last_heartbeat INTEGER NOT NULL,35      user_agent TEXT,36      ip_address TEXT,37      created_at INTEGER NOT NULL,38      FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE39    );40  `);41  console.log('✅ Created active_users table');4243  // Create analytics_metrics table44  db.exec(`45    CREATE TABLE IF NOT EXISTS analytics_metrics (46      id TEXT PRIMARY KEY,47      timestamp INTEGER NOT NULL,48      total_requests INTEGER DEFAULT 0,49      successful_requests INTEGER DEFAULT 0,50      failed_requests INTEGER DEFAULT 0,51      active_users INTEGER DEFAULT 0,52      unique_visitors INTEGER DEFAULT 0,53      average_response_time REAL DEFAULT 0,54      peak_response_time REAL DEFAULT 0,55      tokens_generated INTEGER DEFAULT 0,56      estimated_cost REAL DEFAULT 0,57      tool_calls_count INTEGER DEFAULT 0,58      python_executions INTEGER DEFAULT 0,59      search_queries INTEGER DEFAULT 0,60      error_count INTEGER DEFAULT 0,61      error_rate REAL DEFAULT 0,62      period_type TEXT NOT NULL DEFAULT 'minute'63    );64  `);65  console.log('✅ Created analytics_metrics table');6667  // Create request_logs table68  db.exec(`69    CREATE TABLE IF NOT EXISTS request_logs (70      id TEXT PRIMARY KEY,71      session_id TEXT NOT NULL,72      user_id TEXT,73      query TEXT NOT NULL,74      response_time REAL,75      input_tokens INTEGER DEFAULT 0,76      output_tokens INTEGER DEFAULT 0,77      total_cost REAL DEFAULT 0,78      tools_called TEXT,79      status TEXT NOT NULL,80      error_message TEXT,81      timestamp INTEGER NOT NULL,82      FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE83    );84  `);85  console.log('✅ Created request_logs table');8687  // Create indexes for better performance88  db.exec(`89    CREATE INDEX IF NOT EXISTS idx_active_users_session ON active_users(session_id);90    CREATE INDEX IF NOT EXISTS idx_active_users_heartbeat ON active_users(last_heartbeat);91    CREATE INDEX IF NOT EXISTS idx_analytics_timestamp ON analytics_metrics(timestamp);92    CREATE INDEX IF NOT EXISTS idx_analytics_period ON analytics_metrics(period_type);93    CREATE INDEX IF NOT EXISTS idx_request_logs_timestamp ON request_logs(timestamp);94    CREATE INDEX IF NOT EXISTS idx_request_logs_status ON request_logs(status);95  `);96  console.log('✅ Created indexes');9798  console.log('\n🎉 Analytics tables migration completed successfully!');99} catch (error) {100  console.error('❌ Migration failed:', error);101  process.exit(1);102} finally {103  db.close();104}105