Initial commit
Dieser Commit ist enthalten in:
187
database/schema_v2.sql
Normale Datei
187
database/schema_v2.sql
Normale Datei
@ -0,0 +1,187 @@
|
||||
-- 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;
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren