Initial commit: Modular Deploymentcenter platform
This commit is contained in:
+204
@@ -0,0 +1,204 @@
|
||||
-- Deploymentcenter Unified Database Schema
|
||||
-- UTF-8 (utf8mb4) & InnoDB
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- Core Platform Tables
|
||||
DROP TABLE IF EXISTS dc_users;
|
||||
DROP TABLE IF EXISTS dc_settings;
|
||||
|
||||
-- LicenseLabrador Module Tables
|
||||
DROP TABLE IF EXISTS license_api_rate_limit;
|
||||
DROP TABLE IF EXISTS license_audit_log;
|
||||
DROP TABLE IF EXISTS license_activations;
|
||||
DROP TABLE IF EXISTS license_licenses;
|
||||
DROP TABLE IF EXISTS license_products;
|
||||
|
||||
-- Watchdog Module Tables
|
||||
DROP TABLE IF EXISTS watchdog_proxmox_targets;
|
||||
DROP TABLE IF EXISTS watchdog_agent_tokens;
|
||||
DROP TABLE IF EXISTS watchdog_cron_jobs;
|
||||
DROP TABLE IF EXISTS watchdog_event_log;
|
||||
DROP TABLE IF EXISTS watchdog_monitors;
|
||||
|
||||
-- UpdateService Module Tables
|
||||
DROP TABLE IF EXISTS updateservice_releases;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- 1. Core Platform Tables
|
||||
CREATE TABLE dc_users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(64) NOT NULL UNIQUE,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
totp_secret VARCHAR(64) NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE dc_settings (
|
||||
skey VARCHAR(64) PRIMARY KEY,
|
||||
svalue TEXT NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- 2. LicenseLabrador Module Tables
|
||||
CREATE TABLE license_products (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
slug VARCHAR(64) NOT NULL UNIQUE,
|
||||
name VARCHAR(190) NOT NULL,
|
||||
notes TEXT NULL,
|
||||
default_cache_ttl_hours INT NOT NULL DEFAULT 168,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE license_licenses (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
product_id INT NOT NULL,
|
||||
license_key CHAR(29) NOT NULL UNIQUE,
|
||||
customer_name VARCHAR(190) NULL,
|
||||
customer_email VARCHAR(190) NULL,
|
||||
status ENUM('active','revoked','suspended') NOT NULL DEFAULT 'active',
|
||||
expires_at DATETIME NULL,
|
||||
max_activations INT NOT NULL DEFAULT 2,
|
||||
notes TEXT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (product_id) REFERENCES license_products(id) ON DELETE RESTRICT
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE license_activations (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
license_id INT NOT NULL,
|
||||
hardware_id VARCHAR(128) NOT NULL,
|
||||
hostname VARCHAR(190) NULL,
|
||||
app_version VARCHAR(64) NULL,
|
||||
first_seen DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
last_seen DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
is_blocked TINYINT(1) NOT NULL DEFAULT 0,
|
||||
UNIQUE KEY uq_lic_hw (license_id, hardware_id),
|
||||
FOREIGN KEY (license_id) REFERENCES license_licenses(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE license_audit_log (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
actor VARCHAR(64) NOT NULL,
|
||||
action VARCHAR(64) NOT NULL,
|
||||
details TEXT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE license_api_rate_limit (
|
||||
ip VARBINARY(16) NOT NULL,
|
||||
window_start DATETIME NOT NULL,
|
||||
request_count INT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (ip, window_start)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- 3. Watchdog Module Tables
|
||||
CREATE TABLE watchdog_monitors (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
source VARCHAR(100) NOT NULL,
|
||||
instance VARCHAR(100) NOT NULL DEFAULT 'default',
|
||||
type ENUM('heartbeat','host','hypervisor_node','guest') NOT NULL DEFAULT 'heartbeat',
|
||||
state ENUM('up','warning','down','error','stopped','maintenance') NOT NULL DEFAULT 'up',
|
||||
expected_interval_sec INT NOT NULL DEFAULT 60,
|
||||
last_seen_utc DATETIME NULL,
|
||||
last_status ENUM('ok','warning','error') NULL,
|
||||
last_message TEXT NULL,
|
||||
metrics_json JSON NULL,
|
||||
metric_state_reason VARCHAR(255) NULL,
|
||||
group_key VARCHAR(150) NULL,
|
||||
parent_source VARCHAR(100) NULL,
|
||||
notes TEXT NULL,
|
||||
url VARCHAR(255) NULL,
|
||||
icon VARCHAR(255) NULL,
|
||||
is_muted TINYINT(1) NOT NULL DEFAULT 0,
|
||||
expect_running TINYINT(1) NOT NULL DEFAULT 1,
|
||||
os VARCHAR(50) NULL,
|
||||
first_contact_deadline_utc DATETIME NULL,
|
||||
ack_until_utc DATETIME NULL,
|
||||
acknowledged_by VARCHAR(100) NULL,
|
||||
warning_notified_utc DATETIME NULL,
|
||||
suppress_until_utc DATETIME NULL,
|
||||
last_started_utc DATETIME NULL,
|
||||
last_stopped_utc DATETIME NULL,
|
||||
last_crash_utc DATETIME NULL,
|
||||
created_utc DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_utc DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uq_monitor (source, instance)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE watchdog_event_log (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
source VARCHAR(100) NOT NULL,
|
||||
instance VARCHAR(100) NOT NULL DEFAULT 'default',
|
||||
kind ENUM('started','stopped_graceful','crash_suspected','hard_error',
|
||||
'recovered','warning_raised','warning_cleared',
|
||||
'maintenance_start','maintenance_end','watchdog_started') NOT NULL,
|
||||
from_state VARCHAR(20) NULL,
|
||||
to_state VARCHAR(20) NULL,
|
||||
severity ENUM('info','warning','alarm') NOT NULL DEFAULT 'info',
|
||||
at_utc DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
message TEXT NULL,
|
||||
meta_json JSON NULL,
|
||||
notified TINYINT(1) NOT NULL DEFAULT 0,
|
||||
notified_at_utc DATETIME NULL,
|
||||
channel VARCHAR(40) NULL,
|
||||
KEY ix_evt (source, instance, at_utc),
|
||||
KEY ix_evt_time (at_utc)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE watchdog_cron_jobs (
|
||||
name VARCHAR(50) PRIMARY KEY,
|
||||
interval_sec INT NOT NULL,
|
||||
last_run_utc DATETIME NULL,
|
||||
running TINYINT(1) NOT NULL DEFAULT 0,
|
||||
lock_until_utc DATETIME NULL,
|
||||
last_status VARCHAR(20) NULL,
|
||||
last_duration_ms INT NULL,
|
||||
enabled TINYINT(1) NOT NULL DEFAULT 1
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE watchdog_agent_tokens (
|
||||
token_id VARCHAR(64) PRIMARY KEY,
|
||||
token_hash VARCHAR(128) NOT NULL,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
monitor_source VARCHAR(100) NULL,
|
||||
monitor_instance VARCHAR(100) NULL,
|
||||
created_at_utc DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
last_used_at_utc DATETIME NULL,
|
||||
revoked TINYINT(1) NOT NULL DEFAULT 0
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE watchdog_proxmox_targets (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
url VARCHAR(255) NOT NULL,
|
||||
token_id VARCHAR(150) NOT NULL,
|
||||
token_secret TEXT NOT NULL,
|
||||
cert_fingerprint VARCHAR(100) NULL,
|
||||
enabled TINYINT(1) NOT NULL DEFAULT 1,
|
||||
last_poll_utc DATETIME NULL,
|
||||
last_status VARCHAR(50) NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- 4. UpdateService Module Tables
|
||||
CREATE TABLE updateservice_releases (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
product_slug VARCHAR(64) NOT NULL,
|
||||
version VARCHAR(32) NOT NULL,
|
||||
release_notes TEXT NULL,
|
||||
download_url VARCHAR(255) NOT NULL,
|
||||
sha256_hash VARCHAR(64) NULL,
|
||||
is_critical TINYINT(1) NOT NULL DEFAULT 0,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uq_prod_ver (product_slug, version)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Seed default cron jobs for Watchdog
|
||||
INSERT INTO watchdog_cron_jobs (name, interval_sec, enabled) VALUES
|
||||
('evaluator', 60, 1),
|
||||
('proxmox_poll', 60, 1),
|
||||
('proxmox_smart', 600, 1),
|
||||
('warning_digest', 43200, 1),
|
||||
('self_ping', 60, 1),
|
||||
('eventlog_cleanup', 86400, 1)
|
||||
ON DUPLICATE KEY UPDATE interval_sec = VALUES(interval_sec);
|
||||
Reference in New Issue
Block a user