// shared/lib/db/alert-schema.ts — 数据库表结构常量 // 供 monitor-ai 及未来其他项目引用 export const SERVICES_TABLE_SQL = ` CREATE TABLE IF NOT EXISTS services ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, category TEXT NOT NULL DEFAULT 'endpoint', alert_level TEXT NOT NULL DEFAULT 'warning', checks TEXT NOT NULL DEFAULT '[]', check_interval INTEGER DEFAULT 30, check_timeout INTEGER DEFAULT 10, enabled INTEGER DEFAULT 1, current_status TEXT DEFAULT 'unknown', status_since TEXT, display_order INTEGER DEFAULT 0, created_at TEXT DEFAULT (datetime('now', '+8 hours')), updated_at TEXT DEFAULT (datetime('now', '+8 hours')) ); ` export const ALERT_CHANNELS_TABLE_SQL = ` CREATE TABLE IF NOT EXISTS alert_channels ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, channel_type TEXT DEFAULT 'wechat', webhook_url TEXT NOT NULL, enabled INTEGER DEFAULT 1, level_critical INTEGER DEFAULT 1, level_warning INTEGER DEFAULT 1, level_info INTEGER DEFAULT 0, quiet_enabled INTEGER DEFAULT 0, quiet_start TEXT DEFAULT '23:00', quiet_end TEXT DEFAULT '07:00', quiet_bypass_critical INTEGER DEFAULT 1, cooldown_minutes INTEGER DEFAULT 5, created_at TEXT DEFAULT (datetime('now', '+8 hours')), updated_at TEXT DEFAULT (datetime('now', '+8 hours')) ); ` export const ALERT_SETTINGS_TABLE_SQL = ` CREATE TABLE IF NOT EXISTS alert_settings ( key TEXT PRIMARY KEY, value TEXT NOT NULL, description TEXT, updated_at TEXT DEFAULT (datetime('now', '+8 hours')) ); ` export const STATUS_HISTORY_TABLE_SQL = ` CREATE TABLE IF NOT EXISTS status_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, service_id INTEGER NOT NULL REFERENCES services(id), from_status TEXT NOT NULL, to_status TEXT NOT NULL, started_at TEXT NOT NULL, ended_at TEXT, duration_seconds INTEGER, error_message TEXT, failed_checks TEXT, truncated_by_restart INTEGER DEFAULT 0, created_at TEXT DEFAULT (datetime('now', '+8 hours')) ); CREATE INDEX IF NOT EXISTS idx_status_history_service ON status_history(service_id, started_at); CREATE INDEX IF NOT EXISTS idx_status_history_open ON status_history(ended_at) WHERE ended_at IS NULL; ` export const ALERT_HISTORY_TABLE_SQL = ` CREATE TABLE IF NOT EXISTS alert_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, channel_id INTEGER REFERENCES alert_channels(id), service_id INTEGER REFERENCES services(id), status_event_id INTEGER REFERENCES status_history(id), alert_type TEXT NOT NULL DEFAULT 'alert', level TEXT NOT NULL, title TEXT NOT NULL, content TEXT NOT NULL, sent_at TEXT NOT NULL, success INTEGER DEFAULT 0, response_code INTEGER, response_body TEXT, created_at TEXT DEFAULT (datetime('now', '+8 hours')) ); CREATE INDEX IF NOT EXISTS idx_alert_history_time ON alert_history(sent_at); CREATE INDEX IF NOT EXISTS idx_alert_history_channel ON alert_history(channel_id, sent_at); CREATE INDEX IF NOT EXISTS idx_alert_history_service ON alert_history(service_id, sent_at); CREATE INDEX IF NOT EXISTS idx_alert_history_event ON alert_history(status_event_id); ` export const ALL_TABLES_SQL = [ SERVICES_TABLE_SQL, ALERT_CHANNELS_TABLE_SQL, ALERT_SETTINGS_TABLE_SQL, STATUS_HISTORY_TABLE_SQL, ALERT_HISTORY_TABLE_SQL, ].join('\n')