187 Zeilen
6.6 KiB
SQL
187 Zeilen
6.6 KiB
SQL
-- Clean Architecture Database Schema v2
|
|
-- Erweitert das bestehende Schema um neue Tabellen
|
|
|
|
-- Session Management
|
|
CREATE TABLE IF NOT EXISTS browser_sessions (
|
|
id TEXT PRIMARY KEY,
|
|
fingerprint_id TEXT NOT NULL,
|
|
cookies TEXT NOT NULL, -- JSON encrypted
|
|
local_storage TEXT, -- JSON encrypted
|
|
session_storage TEXT, -- JSON encrypted
|
|
proxy_config TEXT, -- JSON
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
last_used TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
health_score REAL DEFAULT 1.0,
|
|
account_id TEXT,
|
|
user_agent TEXT,
|
|
viewport_width INTEGER DEFAULT 1920,
|
|
viewport_height INTEGER DEFAULT 1080,
|
|
locale TEXT DEFAULT 'de-DE',
|
|
timezone TEXT DEFAULT 'Europe/Berlin',
|
|
active BOOLEAN DEFAULT 1,
|
|
error_count INTEGER DEFAULT 0,
|
|
success_count INTEGER DEFAULT 0,
|
|
FOREIGN KEY (fingerprint_id) REFERENCES browser_fingerprints(id),
|
|
FOREIGN KEY (account_id) REFERENCES accounts(id)
|
|
);
|
|
|
|
-- Fingerprints
|
|
CREATE TABLE IF NOT EXISTS browser_fingerprints (
|
|
id TEXT PRIMARY KEY,
|
|
canvas_noise_config TEXT NOT NULL, -- JSON
|
|
webrtc_config TEXT NOT NULL, -- JSON
|
|
fonts TEXT NOT NULL, -- JSON array
|
|
hardware_config TEXT NOT NULL, -- JSON
|
|
navigator_props TEXT NOT NULL, -- JSON
|
|
webgl_vendor TEXT,
|
|
webgl_renderer TEXT,
|
|
audio_context_config TEXT, -- JSON
|
|
timezone TEXT,
|
|
timezone_offset INTEGER,
|
|
plugins TEXT, -- JSON array
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
last_rotated TIMESTAMP,
|
|
platform_specific TEXT, -- Platform-spezifische Anpassungen
|
|
static_components TEXT, -- JSON: Unchangeable hardware/platform values
|
|
rotation_seed TEXT, -- Seed for deterministic noise generation
|
|
account_bound BOOLEAN DEFAULT 0 -- Is this bound to specific account(s)
|
|
);
|
|
|
|
-- Rate Limiting
|
|
CREATE TABLE IF NOT EXISTS rate_limit_events (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
action_type TEXT NOT NULL,
|
|
duration_ms INTEGER NOT NULL,
|
|
success BOOLEAN NOT NULL,
|
|
response_code INTEGER,
|
|
session_id TEXT,
|
|
url TEXT,
|
|
element_selector TEXT,
|
|
error_message TEXT,
|
|
retry_count INTEGER DEFAULT 0,
|
|
metadata TEXT, -- JSON
|
|
FOREIGN KEY (session_id) REFERENCES browser_sessions(id)
|
|
);
|
|
|
|
-- Analytics
|
|
CREATE TABLE IF NOT EXISTS account_creation_analytics (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
event_id TEXT UNIQUE NOT NULL,
|
|
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
account_id TEXT,
|
|
session_id TEXT NOT NULL,
|
|
fingerprint_id TEXT NOT NULL,
|
|
duration_seconds REAL NOT NULL,
|
|
success BOOLEAN NOT NULL,
|
|
error_type TEXT,
|
|
error_message TEXT,
|
|
workflow_steps TEXT NOT NULL, -- JSON
|
|
metadata TEXT, -- JSON
|
|
total_retry_count INTEGER DEFAULT 0,
|
|
network_requests INTEGER DEFAULT 0,
|
|
screenshots_taken INTEGER DEFAULT 0,
|
|
proxy_used BOOLEAN DEFAULT 0,
|
|
proxy_type TEXT,
|
|
browser_type TEXT DEFAULT 'chromium',
|
|
headless BOOLEAN DEFAULT 0,
|
|
success_rate REAL,
|
|
FOREIGN KEY (account_id) REFERENCES accounts(id),
|
|
FOREIGN KEY (session_id) REFERENCES browser_sessions(id),
|
|
FOREIGN KEY (fingerprint_id) REFERENCES browser_fingerprints(id)
|
|
);
|
|
|
|
-- Error Events
|
|
CREATE TABLE IF NOT EXISTS error_events (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
error_id TEXT UNIQUE NOT NULL,
|
|
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
error_type TEXT NOT NULL,
|
|
error_message TEXT NOT NULL,
|
|
stack_trace TEXT,
|
|
context TEXT NOT NULL, -- JSON
|
|
recovery_attempted BOOLEAN DEFAULT 0,
|
|
recovery_successful BOOLEAN DEFAULT 0,
|
|
recovery_attempts TEXT, -- JSON array
|
|
severity TEXT DEFAULT 'medium',
|
|
platform TEXT,
|
|
session_id TEXT,
|
|
account_id TEXT,
|
|
correlation_id TEXT,
|
|
user_impact BOOLEAN DEFAULT 1,
|
|
system_impact BOOLEAN DEFAULT 0,
|
|
data_loss BOOLEAN DEFAULT 0,
|
|
FOREIGN KEY (session_id) REFERENCES browser_sessions(id),
|
|
FOREIGN KEY (account_id) REFERENCES accounts(id)
|
|
);
|
|
|
|
-- Rate Limit Policies
|
|
CREATE TABLE IF NOT EXISTS rate_limit_policies (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
action_type TEXT UNIQUE NOT NULL,
|
|
min_delay REAL NOT NULL,
|
|
max_delay REAL NOT NULL,
|
|
adaptive BOOLEAN DEFAULT 1,
|
|
backoff_multiplier REAL DEFAULT 1.5,
|
|
max_retries INTEGER DEFAULT 3,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Session Pool Status
|
|
CREATE TABLE IF NOT EXISTS session_pool_status (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
total_sessions INTEGER NOT NULL,
|
|
active_sessions INTEGER NOT NULL,
|
|
healthy_sessions INTEGER NOT NULL,
|
|
failed_sessions INTEGER NOT NULL,
|
|
avg_health_score REAL,
|
|
metadata TEXT -- JSON
|
|
);
|
|
|
|
-- Indexes for performance
|
|
CREATE INDEX IF NOT EXISTS idx_sessions_last_used ON browser_sessions(last_used);
|
|
CREATE INDEX IF NOT EXISTS idx_sessions_health ON browser_sessions(health_score);
|
|
CREATE INDEX IF NOT EXISTS idx_sessions_active ON browser_sessions(active);
|
|
CREATE INDEX IF NOT EXISTS idx_rate_limits_timestamp ON rate_limit_events(timestamp);
|
|
CREATE INDEX IF NOT EXISTS idx_rate_limits_action ON rate_limit_events(action_type);
|
|
CREATE INDEX IF NOT EXISTS idx_analytics_timestamp ON account_creation_analytics(timestamp);
|
|
CREATE INDEX IF NOT EXISTS idx_analytics_success ON account_creation_analytics(success);
|
|
CREATE INDEX IF NOT EXISTS idx_analytics_platform ON account_creation_analytics(metadata);
|
|
CREATE INDEX IF NOT EXISTS idx_errors_timestamp ON error_events(timestamp);
|
|
CREATE INDEX IF NOT EXISTS idx_errors_type ON error_events(error_type);
|
|
CREATE INDEX IF NOT EXISTS idx_errors_severity ON error_events(severity);
|
|
|
|
-- Views für häufige Abfragen
|
|
CREATE VIEW IF NOT EXISTS v_session_health AS
|
|
SELECT
|
|
bs.id,
|
|
bs.health_score,
|
|
bs.error_count,
|
|
bs.success_count,
|
|
bs.last_used,
|
|
COUNT(aca.id) as total_accounts,
|
|
AVG(aca.success_rate) as avg_success_rate
|
|
FROM browser_sessions bs
|
|
LEFT JOIN account_creation_analytics aca ON bs.id = aca.session_id
|
|
GROUP BY bs.id;
|
|
|
|
CREATE VIEW IF NOT EXISTS v_daily_analytics AS
|
|
SELECT
|
|
DATE(timestamp) as date,
|
|
COUNT(*) as total_attempts,
|
|
SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) as successful,
|
|
AVG(duration_seconds) as avg_duration,
|
|
AVG(total_retry_count) as avg_retries
|
|
FROM account_creation_analytics
|
|
GROUP BY DATE(timestamp);
|
|
|
|
CREATE VIEW IF NOT EXISTS v_error_summary AS
|
|
SELECT
|
|
error_type,
|
|
COUNT(*) as error_count,
|
|
MIN(timestamp) as first_occurrence,
|
|
MAX(timestamp) as last_occurrence,
|
|
AVG(CASE WHEN recovery_successful = 1 THEN 1.0 ELSE 0.0 END) as recovery_rate
|
|
FROM error_events
|
|
GROUP BY error_type; |