| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- -- Migration: 0018_api_analytics
- -- Description: Create tables for Web API usage analytics and tracking
- -- Date: 2024-12-28
- -- Create API usage logs table for detailed request tracking
- CREATE TABLE IF NOT EXISTS api_usage_logs (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- dev_id VARCHAR(255) NOT NULL,
- endpoint VARCHAR(255) NOT NULL,
- method VARCHAR(10) NOT NULL,
- timestamp INTEGER NOT NULL,
- response_time_ms INTEGER,
- status_code INTEGER,
- ip_address VARCHAR(45),
- user_agent TEXT,
- screen_name VARCHAR(16), -- User making the request (if authenticated)
- error_message TEXT, -- Store error details if request failed
- request_size INTEGER, -- Size of request in bytes
- response_size INTEGER -- Size of response in bytes
- );
- -- Create indexes for efficient querying
- CREATE INDEX idx_usage_dev_id ON api_usage_logs(dev_id);
- CREATE INDEX idx_usage_timestamp ON api_usage_logs(timestamp);
- CREATE INDEX idx_usage_endpoint ON api_usage_logs(endpoint);
- CREATE INDEX idx_usage_status ON api_usage_logs(status_code);
- CREATE INDEX idx_usage_screen_name ON api_usage_logs(screen_name);
- -- Create aggregated statistics table for performance
- CREATE TABLE IF NOT EXISTS api_usage_stats (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- dev_id VARCHAR(255) NOT NULL,
- endpoint VARCHAR(255) NOT NULL,
- period_type VARCHAR(10) NOT NULL, -- 'hour', 'day', 'month'
- period_start INTEGER NOT NULL,
- request_count INTEGER DEFAULT 0,
- error_count INTEGER DEFAULT 0,
- total_response_time_ms INTEGER DEFAULT 0,
- avg_response_time_ms INTEGER DEFAULT 0,
- total_request_bytes INTEGER DEFAULT 0,
- total_response_bytes INTEGER DEFAULT 0,
- unique_users INTEGER DEFAULT 0,
- UNIQUE(dev_id, endpoint, period_type, period_start)
- );
- -- Create indexes for aggregated stats
- CREATE INDEX idx_stats_dev_id ON api_usage_stats(dev_id);
- CREATE INDEX idx_stats_period ON api_usage_stats(period_type, period_start);
- CREATE INDEX idx_stats_endpoint ON api_usage_stats(endpoint);
- -- Create table for tracking API key quotas and limits
- CREATE TABLE IF NOT EXISTS api_quotas (
- dev_id VARCHAR(255) PRIMARY KEY,
- daily_limit INTEGER DEFAULT 10000,
- monthly_limit INTEGER DEFAULT 300000,
- daily_used INTEGER DEFAULT 0,
- monthly_used INTEGER DEFAULT 0,
- last_reset_daily INTEGER NOT NULL,
- last_reset_monthly INTEGER NOT NULL,
- overage_allowed BOOLEAN DEFAULT FALSE
- );
|