fix(ui): remove extra closing div causing bugtracker layout shift & enforce non-destructive SQL schema migrations

This commit is contained in:
Deploymentcenter Bot
2026-08-06 13:10:20 +02:00
parent 563046be07
commit cb52298c7a
3 changed files with 106 additions and 147 deletions
-2
View File
@@ -1834,8 +1834,6 @@ $baseUrl = $protocol . '://' . $host;
</div> </div>
</div> </div>
</div>
<!-- ================= MODULE: BUGTRACKER & FEATURE-TRACKER ================= --> <!-- ================= MODULE: BUGTRACKER & FEATURE-TRACKER ================= -->
<div id="tab-bugtracker" class="tab-content"> <div id="tab-bugtracker" class="tab-content">
@@ -1,15 +1,9 @@
-- Migration 004: Unified Tokens (Master & Sub-Tokens) and Bugtracker / Feature-Tracker Module -- Migration 004: Unified Tokens (Master & Sub-Tokens) and Bugtracker / Feature-Tracker Module (Non-destructive)
SET FOREIGN_KEY_CHECKS = 0; SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS bugtracker_comments;
DROP TABLE IF EXISTS bugtracker_items;
DROP TABLE IF EXISTS dc_tokens;
SET FOREIGN_KEY_CHECKS = 1;
-- 1. Central Master & Sub-Token Hierarchy Table -- 1. Central Master & Sub-Token Hierarchy Table
CREATE TABLE dc_tokens ( CREATE TABLE IF NOT EXISTS dc_tokens (
id BIGINT AUTO_INCREMENT PRIMARY KEY, id BIGINT AUTO_INCREMENT PRIMARY KEY,
token_id VARCHAR(64) NOT NULL UNIQUE, token_id VARCHAR(64) NOT NULL UNIQUE,
parent_token_id VARCHAR(64) NULL, parent_token_id VARCHAR(64) NULL,
@@ -31,7 +25,7 @@ CREATE TABLE dc_tokens (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 2. Unified Bugtracker & Feature Request Items -- 2. Unified Bugtracker & Feature Request Items
CREATE TABLE bugtracker_items ( CREATE TABLE IF NOT EXISTS bugtracker_items (
id BIGINT AUTO_INCREMENT PRIMARY KEY, id BIGINT AUTO_INCREMENT PRIMARY KEY,
project_id INT NULL, project_id INT NULL,
project_slug VARCHAR(64) NOT NULL, project_slug VARCHAR(64) NOT NULL,
@@ -59,7 +53,7 @@ CREATE TABLE bugtracker_items (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 3. Diagnostic Comments & Timeline Table -- 3. Diagnostic Comments & Timeline Table
CREATE TABLE bugtracker_comments ( CREATE TABLE IF NOT EXISTS bugtracker_comments (
id BIGINT AUTO_INCREMENT PRIMARY KEY, id BIGINT AUTO_INCREMENT PRIMARY KEY,
item_id BIGINT NOT NULL, item_id BIGINT NOT NULL,
author VARCHAR(100) NOT NULL, author VARCHAR(100) NOT NULL,
@@ -70,9 +64,9 @@ CREATE TABLE bugtracker_comments (
FOREIGN KEY (item_id) REFERENCES bugtracker_items(id) ON DELETE CASCADE FOREIGN KEY (item_id) REFERENCES bugtracker_items(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Seed Sample Master Token SET FOREIGN_KEY_CHECKS = 1;
-- Raw Master Token: dc_master_myapp_dev_agent_001
-- Hash: SHA256 of 'dc_master_myapp_dev_agent_001' -- Seed Sample Master Token (Non-destructive)
INSERT INTO dc_tokens ( INSERT INTO dc_tokens (
token_id, parent_token_id, token_hash, raw_token, name, project_slug, owner_type, owner_identity, type, scopes, environment token_id, parent_token_id, token_hash, raw_token, name, project_slug, owner_type, owner_identity, type, scopes, environment
) VALUES ( ) VALUES (
@@ -83,9 +77,9 @@ INSERT INTO dc_tokens (
'myapp', 'dev_agent', 'DEV-WORKSTATION-01', 'master', 'myapp', 'dev_agent', 'DEV-WORKSTATION-01', 'master',
'["bugtracker:report", "bugtracker:manage", "watchdog:ping", "updateservice:read"]', '["bugtracker:report", "bugtracker:manage", "watchdog:ping", "updateservice:read"]',
'all' 'all'
); ) ON DUPLICATE KEY UPDATE token_id = token_id;
-- Seed Sample Sub Token provisioned from Master Token -- Seed Sample Sub Token provisioned from Master Token (Non-destructive)
INSERT INTO dc_tokens ( INSERT INTO dc_tokens (
token_id, parent_token_id, token_hash, raw_token, name, project_slug, owner_type, owner_identity, type, scopes, environment token_id, parent_token_id, token_hash, raw_token, name, project_slug, owner_type, owner_identity, type, scopes, environment
) VALUES ( ) VALUES (
@@ -96,19 +90,21 @@ INSERT INTO dc_tokens (
'myapp', 'dev_agent', 'DEV-WORKSTATION-01', 'sub', 'myapp', 'dev_agent', 'DEV-WORKSTATION-01', 'sub',
'["bugtracker:report", "bugtracker:manage"]', '["bugtracker:report", "bugtracker:manage"]',
'development' 'development'
); ) ON DUPLICATE KEY UPDATE token_id = token_id;
-- Seed Sample Bugs and Feature Requests -- Seed Sample Bugs and Feature Requests (Non-destructive)
INSERT INTO bugtracker_items ( INSERT INTO bugtracker_items (
id, project_slug, type, title, description, error_message, stack_trace, error_hash, build_version, environment, severity, status, occurrence_count, created_by id, project_slug, type, title, description, error_message, stack_trace, error_hash, build_version, environment, severity, status, occurrence_count, created_by
) VALUES ) VALUES
(1, 'myapp', 'bug', 'NullReferenceException in UserAuthService.cs line 42', 'Beim Login ohne gesetzte Session ist ein Unerwarteter Nullpointer-Fehler aufgetreten.', 'NullReferenceException: Object reference not set to an instance of an object.', 'at MyApp.Core.UserAuthService.ValidateToken(String token) in UserAuthService.cs:line 42\nat MyApp.Controllers.AuthController.Login() in AuthController.cs:line 18', 'e2c918a514d89a42f', 'v1.4.2-dev', 'development', 'high', 'open', 3, 'agent:dev-monitor-01'), (1, 'myapp', 'bug', 'NullReferenceException in UserAuthService.cs line 42', 'Beim Login ohne gesetzte Session ist ein Unerwarteter Nullpointer-Fehler aufgetreten.', 'NullReferenceException: Object reference not set to an instance of an object.', 'at MyApp.Core.UserAuthService.ValidateToken(String token) in UserAuthService.cs:line 42\nat MyApp.Controllers.AuthController.Login() in AuthController.cs:line 18', 'e2c918a514d89a42f', 'v1.4.2-dev', 'development', 'high', 'open', 3, 'agent:dev-monitor-01'),
(2, 'polytrader', 'bug', 'Database Connection Timeout on Order Execution', 'Unter hoher Last bricht die Verbindung zur MariaDB nach 30s ab.', 'SQLSTATE[HY000] [2002] Connection timed out', 'PDOException: SQLSTATE[HY000] [2002] Connection timed out at Db.php:24', 'f9a2b881c1092837d', 'v2.0.1', 'production', 'critical', 'in_progress', 14, 'agent:prod-watchdog'), (2, 'polytrader', 'bug', 'Database Connection Timeout on Order Execution', 'Unter hoher Last bricht die Verbindung zur MariaDB nach 30s ab.', 'SQLSTATE[HY000] [2002] Connection timed out', 'PDOException: SQLSTATE[HY000] [2002] Connection timed out at Db.php:24', 'f9a2b881c1092837d', 'v2.0.1', 'production', 'critical', 'in_progress', 14, 'agent:prod-watchdog'),
(3, 'myapp', 'feature_request', 'Unterstützung für TOTP 2FA Login erzwingen', 'KI-Agent empfiehlt die Hinzufügung einer erzwungenen Zwei-Faktor-Authentifizierung für Administrator-Konten.', NULL, NULL, NULL, 'v1.5.0-roadmap', 'development', 'medium', 'open', 1, 'agent:security-agent'); (3, 'myapp', 'feature_request', 'Unterstützung für TOTP 2FA Login erzwingen', 'KI-Agent empfiehlt die Hinzufügung einer erzwungenen Zwei-Faktor-Authentifizierung für Administrator-Konten.', NULL, NULL, NULL, 'v1.5.0-roadmap', 'development', 'medium', 'open', 1, 'agent:security-agent')
ON DUPLICATE KEY UPDATE id = id;
-- Seed Sample Comments -- Seed Sample Comments (Non-destructive)
INSERT INTO bugtracker_comments ( INSERT INTO bugtracker_comments (
item_id, author, comment, action_taken, created_at id, item_id, author, comment, action_taken, created_at
) VALUES ) VALUES
(1, 'agent:code-fixer-01', 'Log-Analyse gestartet. Der Fehler tritt auf, wenn $_SESSION["dc_user_id"] nicht gesetzt ist.', 'investigated', NOW()), (1, 1, 'agent:code-fixer-01', 'Log-Analyse gestartet. Der Fehler tritt auf, wenn $_SESSION["dc_user_id"] nicht gesetzt ist.', 'investigated', NOW()),
(2, 'agent:db-optimizer', 'Max Connection Limit in config.php auf 100 erhöht. Connection Pool wird beobachtet.', 'added_hint', NOW()); (2, 2, 'agent:db-optimizer', 'Max Connection Limit in config.php auf 100 erhöht. Connection Pool wird beobachtet.', 'added_hint', NOW())
ON DUPLICATE KEY UPDATE id = id;
+88 -123
View File
@@ -1,39 +1,10 @@
-- Deploymentcenter Unified Database Schema & Test Data -- Deploymentcenter Unified Database Schema & Non-Destructive Migrations
-- UTF-8 (utf8mb4) & InnoDB -- UTF-8 (utf8mb4) & InnoDB
SET FOREIGN_KEY_CHECKS = 0; SET FOREIGN_KEY_CHECKS = 0;
-- Core Platform Tables
DROP TABLE IF EXISTS dc_users;
DROP TABLE IF EXISTS dc_settings;
DROP TABLE IF EXISTS dc_projects;
-- License 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;
-- Bugtracker & Token Hierarchy Tables
DROP TABLE IF EXISTS bugtracker_comments;
DROP TABLE IF EXISTS bugtracker_items;
DROP TABLE IF EXISTS dc_tokens;
SET FOREIGN_KEY_CHECKS = 1;
-- 1. Core Platform Tables -- 1. Core Platform Tables
CREATE TABLE dc_users ( CREATE TABLE IF NOT EXISTS dc_users (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(64) NOT NULL UNIQUE, username VARCHAR(64) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL, password_hash VARCHAR(255) NOT NULL,
@@ -41,13 +12,13 @@ CREATE TABLE dc_users (
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE dc_settings ( CREATE TABLE IF NOT EXISTS dc_settings (
skey VARCHAR(64) PRIMARY KEY, skey VARCHAR(64) PRIMARY KEY,
svalue TEXT NOT NULL svalue TEXT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Core Projects Table (Shared across Lizenzen, Watchdog, UpdateService) -- Core Projects Table (Shared across Lizenzen, Watchdog, UpdateService)
CREATE TABLE dc_projects ( CREATE TABLE IF NOT EXISTS dc_projects (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
slug VARCHAR(64) NOT NULL UNIQUE, slug VARCHAR(64) NOT NULL UNIQUE,
name VARCHAR(190) NOT NULL, name VARCHAR(190) NOT NULL,
@@ -57,7 +28,7 @@ CREATE TABLE dc_projects (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 2. License Module Tables (Linked to dc_projects) -- 2. License Module Tables (Linked to dc_projects)
CREATE TABLE license_licenses ( CREATE TABLE IF NOT EXISTS license_licenses (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT NOT NULL, product_id INT NOT NULL,
license_key CHAR(29) NOT NULL UNIQUE, license_key CHAR(29) NOT NULL UNIQUE,
@@ -71,7 +42,7 @@ CREATE TABLE license_licenses (
FOREIGN KEY (product_id) REFERENCES dc_projects(id) ON DELETE RESTRICT FOREIGN KEY (product_id) REFERENCES dc_projects(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE license_activations ( CREATE TABLE IF NOT EXISTS license_activations (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
license_id INT NOT NULL, license_id INT NOT NULL,
hardware_id VARCHAR(128) NOT NULL, hardware_id VARCHAR(128) NOT NULL,
@@ -87,7 +58,7 @@ CREATE TABLE license_activations (
FOREIGN KEY (license_id) REFERENCES license_licenses(id) ON DELETE CASCADE FOREIGN KEY (license_id) REFERENCES license_licenses(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE license_audit_log ( CREATE TABLE IF NOT EXISTS license_audit_log (
id BIGINT AUTO_INCREMENT PRIMARY KEY, id BIGINT AUTO_INCREMENT PRIMARY KEY,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
actor VARCHAR(64) NOT NULL, actor VARCHAR(64) NOT NULL,
@@ -95,7 +66,7 @@ CREATE TABLE license_audit_log (
details TEXT NULL details TEXT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE license_api_rate_limit ( CREATE TABLE IF NOT EXISTS license_api_rate_limit (
ip VARBINARY(16) NOT NULL, ip VARBINARY(16) NOT NULL,
window_start DATETIME NOT NULL, window_start DATETIME NOT NULL,
request_count INT NOT NULL DEFAULT 0, request_count INT NOT NULL DEFAULT 0,
@@ -103,7 +74,7 @@ CREATE TABLE license_api_rate_limit (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 3. Watchdog Module Tables -- 3. Watchdog Module Tables
CREATE TABLE watchdog_monitors ( CREATE TABLE IF NOT EXISTS watchdog_monitors (
id BIGINT AUTO_INCREMENT PRIMARY KEY, id BIGINT AUTO_INCREMENT PRIMARY KEY,
source VARCHAR(100) NOT NULL, source VARCHAR(100) NOT NULL,
instance VARCHAR(100) NOT NULL DEFAULT 'default', instance VARCHAR(100) NOT NULL DEFAULT 'default',
@@ -136,7 +107,7 @@ CREATE TABLE watchdog_monitors (
UNIQUE KEY uq_monitor (source, instance) UNIQUE KEY uq_monitor (source, instance)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE watchdog_event_log ( CREATE TABLE IF NOT EXISTS watchdog_event_log (
id BIGINT AUTO_INCREMENT PRIMARY KEY, id BIGINT AUTO_INCREMENT PRIMARY KEY,
source VARCHAR(100) NOT NULL, source VARCHAR(100) NOT NULL,
instance VARCHAR(100) NOT NULL DEFAULT 'default', instance VARCHAR(100) NOT NULL DEFAULT 'default',
@@ -156,7 +127,7 @@ CREATE TABLE watchdog_event_log (
KEY ix_evt_time (at_utc) KEY ix_evt_time (at_utc)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE watchdog_cron_jobs ( CREATE TABLE IF NOT EXISTS watchdog_cron_jobs (
name VARCHAR(50) PRIMARY KEY, name VARCHAR(50) PRIMARY KEY,
interval_sec INT NOT NULL, interval_sec INT NOT NULL,
last_run_utc DATETIME NULL, last_run_utc DATETIME NULL,
@@ -167,7 +138,7 @@ CREATE TABLE watchdog_cron_jobs (
enabled TINYINT(1) NOT NULL DEFAULT 1 enabled TINYINT(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE watchdog_agent_tokens ( CREATE TABLE IF NOT EXISTS watchdog_agent_tokens (
token_id VARCHAR(64) PRIMARY KEY, token_id VARCHAR(64) PRIMARY KEY,
token_hash VARCHAR(128) NOT NULL, token_hash VARCHAR(128) NOT NULL,
raw_token VARCHAR(128) NULL, raw_token VARCHAR(128) NULL,
@@ -179,7 +150,7 @@ CREATE TABLE watchdog_agent_tokens (
revoked TINYINT(1) NOT NULL DEFAULT 0 revoked TINYINT(1) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE watchdog_proxmox_targets ( CREATE TABLE IF NOT EXISTS watchdog_proxmox_targets (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL, name VARCHAR(100) NOT NULL,
url VARCHAR(255) NOT NULL, url VARCHAR(255) NOT NULL,
@@ -192,7 +163,7 @@ CREATE TABLE watchdog_proxmox_targets (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 4. UpdateService Module Tables -- 4. UpdateService Module Tables
CREATE TABLE updateservice_releases ( CREATE TABLE IF NOT EXISTS updateservice_releases (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
product_slug VARCHAR(64) NOT NULL, product_slug VARCHAR(64) NOT NULL,
version VARCHAR(32) NOT NULL, version VARCHAR(32) NOT NULL,
@@ -208,75 +179,8 @@ CREATE TABLE updateservice_releases (
UNIQUE KEY uq_prod_ver_chan (product_slug, version, channel) UNIQUE KEY uq_prod_ver_chan (product_slug, version, channel)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) 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);
-- Seed Initial Projects (Core Projects)
INSERT INTO dc_projects (id, slug, name, notes, default_cache_ttl_hours) VALUES
(1, 'myapp', 'My Application Deluxe', 'Hauptanwendung für Desktop und Server', 168),
(2, 'polytrader', 'PolyTrader Suite Pro', 'Trading- und Handelssystem Client', 72),
(3, 'predictalytics', 'Predictalytics Engine', 'Datenanalyse und Vorhersage Dienst', 168)
ON DUPLICATE KEY UPDATE name = VALUES(name);
-- Seed Initial Licenses
INSERT INTO license_licenses (id, product_id, license_key, customer_name, customer_email, status, max_activations, notes) VALUES
(1, 1, 'LLAB1-98A72-B3C4D-5E6F7-89012', 'Musterfirma GmbH', 'muster@example.com', 'active', 5, 'Firmenlizenz Premium'),
(2, 2, 'LLAB2-12345-67890-ABCDE-FGHIJ', 'Software Solutions AG', 'info@softsol.de', 'active', 2, 'Pro-Lizenz Einzelnutzer'),
(3, 3, 'LLAB3-44556-77889-99001-AABB2', 'Test User Corp', 'test@usercorp.com', 'revoked', 1, 'Testlizenz gekündigt')
ON DUPLICATE KEY UPDATE customer_name = VALUES(customer_name);
-- Seed Initial Activations
INSERT INTO license_activations (license_id, hardware_id, hostname, app_version, is_blocked) VALUES
(1, 'HWID-88A9-99B1-CC02', 'PROD-SERVER-01', 'v1.4.2', 0),
(1, 'HWID-3344-5566-7788', 'DESKTOP-WIN11-DEV', 'v1.4.2', 0),
(2, 'HWID-7766-5544-3322', 'TRADING-NODE-01', 'v2.0.1', 0)
ON DUPLICATE KEY UPDATE hostname = VALUES(hostname);
-- Seed Initial Audit Logs
INSERT INTO license_audit_log (actor, action, details) VALUES
('admin', 'license.create', '{"product": "myapp", "license_key": "LLAB1-98A72-B3C4D-5E6F7-89012"}'),
('api', 'api.validate.success', '{"product": "myapp", "hardware_id": "HWID-88A9-99B1-CC02"}'),
('admin', 'license.revoke', '{"license_key": "LLAB3-44556-77889-99001-AABB2", "reason": "Vertrag abgelaufen"}');
-- Seed Initial Watchdog Monitors
INSERT INTO watchdog_monitors (source, instance, type, state, expected_interval_sec, last_seen_utc, last_status, last_message, metrics_json, group_key, os) VALUES
('srv-db-01', 'default', 'host', 'up', 60, NOW(), 'ok', 'System OK - All services running', '{"cpu": 18, "ram": 42, "disk": 55}', 'Infrastructure', 'Ubuntu 24.04 LTS'),
('srv-app-01', 'default', 'host', 'up', 60, NOW(), 'ok', 'App Server Operational', '{"cpu": 34, "ram": 68, "disk": 40}', 'Infrastructure', 'Debian 12'),
('PolyTrader Worker', 'default', 'heartbeat', 'up', 60, NOW(), 'ok', 'Processing job queue #842', NULL, 'Applications', '.NET 8 Service'),
('License Server Sync', 'default', 'heartbeat', 'up', 120, NOW(), 'ok', 'Sync OK', NULL, 'Services', 'PHP 8.3 Cron'),
('Update Poller Service', 'default', 'heartbeat', 'warning', 60, NOW(), 'warning', 'High latency on remote node', NULL, 'Services', 'Python Service'),
('pve-node-01', 'default', 'hypervisor_node', 'up', 60, NOW(), 'ok', 'Hypervisor Node healthy', '{"cpu": 25, "ram": 52}', 'Proxmox Cluster', 'Proxmox VE 8.1'),
('vm-100-mail', 'default', 'guest', 'up', 60, NOW(), 'ok', 'Mail VM active', NULL, 'pve-node-01', 'Linux Mail Server'),
('vm-101-backup', 'default', 'guest', 'stopped', 300, NOW(), 'ok', 'Cold Backup VM stopped gracefully', NULL, 'pve-node-01', 'Cold Backup VM')
ON DUPLICATE KEY UPDATE last_message = VALUES(last_message);
-- Seed Initial Watchdog Events
INSERT INTO watchdog_event_log (source, instance, kind, severity, message) VALUES
('srv-db-01', 'default', 'started', 'info', 'Server gestartet'),
('Update Poller Service', 'default', 'warning_raised', 'warning', 'Latenz überschreitet Schwellwert (450ms)'),
('PolyTrader Worker', 'default', 'recovered', 'info', 'Dienst nach Neustart wieder online');
-- Seed Initial Watchdog Agent Tokens
INSERT INTO watchdog_agent_tokens (token_id, token_hash, raw_token, name, monitor_source) VALUES
('tok_infra01', '140e6c7329ecb3ea662580a1495c654f593361e64cf96ec37050dd0915f013d5', 'wd_live_token_infra_01_secure', 'Infrastructure Agent Token', 'srv-db-01')
ON DUPLICATE KEY UPDATE name = VALUES(name);
-- Seed Initial Update Releases
INSERT INTO updateservice_releases (product_slug, version, release_notes, download_url, sha256_hash, is_critical) VALUES
('myapp', '1.0.0', 'Initiales Release mit Grundfunktionen', 'https://dc.mhdf.de/downloads/myapp-1.0.0.zip', 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 0),
('myapp', '1.1.0', 'Fehlerbehebungen und Performance-Optimierung', 'https://dc.mhdf.de/downloads/myapp-1.1.0.zip', '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', 0),
('polytrader', '2.0.1', 'Kritisches Sicherheits-Update für Handelsverbindungen', 'https://dc.mhdf.de/downloads/polytrader-2.0.1.zip', '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8', 1)
ON DUPLICATE KEY UPDATE release_notes = VALUES(release_notes);
-- 5. Core Token Hierarchy & Bugtracker Tables -- 5. Core Token Hierarchy & Bugtracker Tables
CREATE TABLE dc_tokens ( CREATE TABLE IF NOT EXISTS dc_tokens (
id BIGINT AUTO_INCREMENT PRIMARY KEY, id BIGINT AUTO_INCREMENT PRIMARY KEY,
token_id VARCHAR(64) NOT NULL UNIQUE, token_id VARCHAR(64) NOT NULL UNIQUE,
parent_token_id VARCHAR(64) NULL, parent_token_id VARCHAR(64) NULL,
@@ -297,7 +201,7 @@ CREATE TABLE dc_tokens (
FOREIGN KEY (parent_token_id) REFERENCES dc_tokens(token_id) ON DELETE CASCADE FOREIGN KEY (parent_token_id) REFERENCES dc_tokens(token_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE bugtracker_items ( CREATE TABLE IF NOT EXISTS bugtracker_items (
id BIGINT AUTO_INCREMENT PRIMARY KEY, id BIGINT AUTO_INCREMENT PRIMARY KEY,
project_id INT NULL, project_id INT NULL,
project_slug VARCHAR(64) NOT NULL, project_slug VARCHAR(64) NOT NULL,
@@ -324,7 +228,7 @@ CREATE TABLE bugtracker_items (
KEY ix_bt_hash (error_hash) KEY ix_bt_hash (error_hash)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE bugtracker_comments ( CREATE TABLE IF NOT EXISTS bugtracker_comments (
id BIGINT AUTO_INCREMENT PRIMARY KEY, id BIGINT AUTO_INCREMENT PRIMARY KEY,
item_id BIGINT NOT NULL, item_id BIGINT NOT NULL,
author VARCHAR(100) NOT NULL, author VARCHAR(100) NOT NULL,
@@ -335,28 +239,89 @@ CREATE TABLE bugtracker_comments (
FOREIGN KEY (item_id) REFERENCES bugtracker_items(id) ON DELETE CASCADE FOREIGN KEY (item_id) REFERENCES bugtracker_items(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Seed Initial Tokens SET FOREIGN_KEY_CHECKS = 1;
-- Seed default cron jobs for Watchdog (Non-destructive)
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);
-- Seed Initial Projects (Non-destructive)
INSERT INTO dc_projects (id, slug, name, notes, default_cache_ttl_hours) VALUES
(1, 'myapp', 'My Application Deluxe', 'Hauptanwendung für Desktop und Server', 168),
(2, 'polytrader', 'PolyTrader Suite Pro', 'Trading- und Handelssystem Client', 72),
(3, 'predictalytics', 'Predictalytics Engine', 'Datenanalyse und Vorhersage Dienst', 168)
ON DUPLICATE KEY UPDATE id = id;
-- Seed Initial Licenses (Non-destructive)
INSERT INTO license_licenses (id, product_id, license_key, customer_name, customer_email, status, max_activations, notes) VALUES
(1, 1, 'LLAB1-98A72-B3C4D-5E6F7-89012', 'Musterfirma GmbH', 'muster@example.com', 'active', 5, 'Firmenlizenz Premium'),
(2, 2, 'LLAB2-12345-67890-ABCDE-FGHIJ', 'Software Solutions AG', 'info@softsol.de', 'active', 2, 'Pro-Lizenz Einzelnutzer'),
(3, 3, 'LLAB3-44556-77889-99001-AABB2', 'Test User Corp', 'test@usercorp.com', 'revoked', 1, 'Testlizenz gekündigt')
ON DUPLICATE KEY UPDATE id = id;
-- Seed Initial Activations (Non-destructive)
INSERT IGNORE INTO license_activations (license_id, hardware_id, hostname, app_version, is_blocked) VALUES
(1, 'HWID-88A9-99B1-CC02', 'PROD-SERVER-01', 'v1.4.2', 0),
(1, 'HWID-3344-5566-7788', 'DESKTOP-WIN11-DEV', 'v1.4.2', 0),
(2, 'HWID-7766-5544-3322', 'TRADING-NODE-01', 'v2.0.1', 0);
-- Seed Initial Audit Logs (Non-destructive)
INSERT IGNORE INTO license_audit_log (id, actor, action, details) VALUES
(1, 'admin', 'license.create', '{"product": "myapp", "license_key": "LLAB1-98A72-B3C4D-5E6F7-89012"}'),
(2, 'api', 'api.validate.success', '{"product": "myapp", "hardware_id": "HWID-88A9-99B1-CC02"}'),
(3, 'admin', 'license.revoke', '{"license_key": "LLAB3-44556-77889-99001-AABB2", "reason": "Vertrag abgelaufen"}');
-- Seed Initial Watchdog Monitors (Non-destructive)
INSERT INTO watchdog_monitors (source, instance, type, state, expected_interval_sec, last_seen_utc, last_status, last_message, metrics_json, group_key, os) VALUES
('srv-db-01', 'default', 'host', 'up', 60, NOW(), 'ok', 'System OK - All services running', '{"cpu": 18, "ram": 42, "disk": 55}', 'Infrastructure', 'Ubuntu 24.04 LTS'),
('srv-app-01', 'default', 'host', 'up', 60, NOW(), 'ok', 'App Server Operational', '{"cpu": 34, "ram": 68, "disk": 40}', 'Infrastructure', 'Debian 12'),
('PolyTrader Worker', 'default', 'heartbeat', 'up', 60, NOW(), 'ok', 'Processing job queue #842', NULL, 'Applications', '.NET 8 Service'),
('License Server Sync', 'default', 'heartbeat', 'up', 120, NOW(), 'ok', 'Sync OK', NULL, 'Services', 'PHP 8.3 Cron'),
('Update Poller Service', 'default', 'heartbeat', 'warning', 60, NOW(), 'warning', 'High latency on remote node', NULL, 'Services', 'Python Service'),
('pve-node-01', 'default', 'hypervisor_node', 'up', 60, NOW(), 'ok', 'Hypervisor Node healthy', '{"cpu": 25, "ram": 52}', 'Proxmox Cluster', 'Proxmox VE 8.1'),
('vm-100-mail', 'default', 'guest', 'up', 60, NOW(), 'ok', 'Mail VM active', NULL, 'pve-node-01', 'Linux Mail Server'),
('vm-101-backup', 'default', 'guest', 'stopped', 300, NOW(), 'ok', 'Cold Backup VM stopped gracefully', NULL, 'pve-node-01', 'Cold Backup VM')
ON DUPLICATE KEY UPDATE source = source;
-- Seed Initial Watchdog Agent Tokens (Non-destructive)
INSERT INTO watchdog_agent_tokens (token_id, token_hash, raw_token, name, monitor_source) VALUES
('tok_infra01', '140e6c7329ecb3ea662580a1495c654f593361e64cf96ec37050dd0915f013d5', 'wd_live_token_infra_01_secure', 'Infrastructure Agent Token', 'srv-db-01')
ON DUPLICATE KEY UPDATE token_id = token_id;
-- Seed Initial Update Releases (Non-destructive)
INSERT INTO updateservice_releases (product_slug, version, release_notes, download_url, sha256_hash, is_critical) VALUES
('myapp', '1.0.0', 'Initiales Release mit Grundfunktionen', 'https://dc.mhdf.de/downloads/myapp-1.0.0.zip', 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 0),
('myapp', '1.1.0', 'Fehlerbehebungen und Performance-Optimierung', 'https://dc.mhdf.de/downloads/myapp-1.1.0.zip', '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', 0),
('polytrader', '2.0.1', 'Kritisches Sicherheits-Update für Handelsverbindungen', 'https://dc.mhdf.de/downloads/polytrader-2.0.1.zip', '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8', 1)
ON DUPLICATE KEY UPDATE product_slug = product_slug;
-- Seed Initial Tokens (Non-destructive)
INSERT INTO dc_tokens ( INSERT INTO dc_tokens (
token_id, parent_token_id, token_hash, raw_token, name, project_slug, owner_type, owner_identity, type, scopes, environment token_id, parent_token_id, token_hash, raw_token, name, project_slug, owner_type, owner_identity, type, scopes, environment
) VALUES ) VALUES
('tok_m_myapp_dev', NULL, '5a38a7c29e64e526c71c4c16a695123d6874e0d9bf0d768132049e8fa65e10aa', 'dc_master_myapp_dev_agent_001', 'MyApp Dev Workstation Master Key', 'myapp', 'dev_agent', 'DEV-WORKSTATION-01', 'master', '["bugtracker:report", "bugtracker:manage", "watchdog:ping", "updateservice:read"]', 'all'), ('tok_m_myapp_dev', NULL, '5a38a7c29e64e526c71c4c16a695123d6874e0d9bf0d768132049e8fa65e10aa', 'dc_master_myapp_dev_agent_001', 'MyApp Dev Workstation Master Key', 'myapp', 'dev_agent', 'DEV-WORKSTATION-01', 'master', '["bugtracker:report", "bugtracker:manage", "watchdog:ping", "updateservice:read"]', 'all'),
('tok_s_myapp_agent_sub1', 'tok_m_myapp_dev', '7c7bc0a5d4d3856b3e9447477c133a8a3a0e67617ab6f6d0a793a388b14a27bc', 'dc_sub_myapp_agent_live_001', 'Dev Agent Auto-Provisioned Token', 'myapp', 'dev_agent', 'DEV-WORKSTATION-01', 'sub', '["bugtracker:report", "bugtracker:manage"]', 'development') ('tok_s_myapp_agent_sub1', 'tok_m_myapp_dev', '7c7bc0a5d4d3856b3e9447477c133a8a3a0e67617ab6f6d0a793a388b14a27bc', 'dc_sub_myapp_agent_live_001', 'Dev Agent Auto-Provisioned Token', 'myapp', 'dev_agent', 'DEV-WORKSTATION-01', 'sub', '["bugtracker:report", "bugtracker:manage"]', 'development')
ON DUPLICATE KEY UPDATE name = VALUES(name); ON DUPLICATE KEY UPDATE token_id = token_id;
-- Seed Initial Bugtracker Items -- Seed Initial Bugtracker Items (Non-destructive)
INSERT INTO bugtracker_items ( INSERT INTO bugtracker_items (
id, project_slug, type, title, description, error_message, stack_trace, error_hash, build_version, environment, severity, status, occurrence_count, created_by id, project_slug, type, title, description, error_message, stack_trace, error_hash, build_version, environment, severity, status, occurrence_count, created_by
) VALUES ) VALUES
(1, 'myapp', 'bug', 'NullReferenceException in UserAuthService.cs line 42', 'Beim Login ohne gesetzte Session ist ein Unerwarteter Nullpointer-Fehler aufgetreten.', 'NullReferenceException: Object reference not set to an instance of an object.', 'at MyApp.Core.UserAuthService.ValidateToken(String token) in UserAuthService.cs:line 42\nat MyApp.Controllers.AuthController.Login() in AuthController.cs:line 18', 'e2c918a514d89a42f', 'v1.4.2-dev', 'development', 'high', 'open', 3, 'agent:dev-monitor-01'), (1, 'myapp', 'bug', 'NullReferenceException in UserAuthService.cs line 42', 'Beim Login ohne gesetzte Session ist ein Unerwarteter Nullpointer-Fehler aufgetreten.', 'NullReferenceException: Object reference not set to an instance of an object.', 'at MyApp.Core.UserAuthService.ValidateToken(String token) in UserAuthService.cs:line 42\nat MyApp.Controllers.AuthController.Login() in AuthController.cs:line 18', 'e2c918a514d89a42f', 'v1.4.2-dev', 'development', 'high', 'open', 3, 'agent:dev-monitor-01'),
(2, 'polytrader', 'bug', 'Database Connection Timeout on Order Execution', 'Unter hoher Last bricht die Verbindung zur MariaDB nach 30s ab.', 'SQLSTATE[HY000] [2002] Connection timed out', 'PDOException: SQLSTATE[HY000] [2002] Connection timed out at Db.php:24', 'f9a2b881c1092837d', 'v2.0.1', 'production', 'critical', 'in_progress', 14, 'agent:prod-watchdog'), (2, 'polytrader', 'bug', 'Database Connection Timeout on Order Execution', 'Unter hoher Last bricht die Verbindung zur MariaDB nach 30s ab.', 'SQLSTATE[HY000] [2002] Connection timed out', 'PDOException: SQLSTATE[HY000] [2002] Connection timed out at Db.php:24', 'f9a2b881c1092837d', 'v2.0.1', 'production', 'critical', 'in_progress', 14, 'agent:prod-watchdog'),
(3, 'myapp', 'feature_request', 'Unterstützung für TOTP 2FA Login erzwingen', 'KI-Agent empfiehlt die Hinzufügung einer erzwungenen Zwei-Faktor-Authentifizierung für Administrator-Konten.', NULL, NULL, NULL, 'v1.5.0-roadmap', 'development', 'medium', 'open', 1, 'agent:security-agent') (3, 'myapp', 'feature_request', 'Unterstützung für TOTP 2FA Login erzwingen', 'KI-Agent empfiehlt die Hinzufügung einer erzwungenen Zwei-Faktor-Authentifizierung für Administrator-Konten.', NULL, NULL, NULL, 'v1.5.0-roadmap', 'development', 'medium', 'open', 1, 'agent:security-agent')
ON DUPLICATE KEY UPDATE title = VALUES(title); ON DUPLICATE KEY UPDATE id = id;
-- Seed Initial Comments -- Seed Initial Comments (Non-destructive)
INSERT INTO bugtracker_comments ( INSERT INTO bugtracker_comments (
item_id, author, comment, action_taken, created_at id, item_id, author, comment, action_taken, created_at
) VALUES ) VALUES
(1, 'agent:code-fixer-01', 'Log-Analyse gestartet. Der Fehler tritt auf, wenn $_SESSION["dc_user_id"] nicht gesetzt ist.', 'investigated', NOW()), (1, 1, 'agent:code-fixer-01', 'Log-Analyse gestartet. Der Fehler tritt auf, wenn $_SESSION["dc_user_id"] nicht gesetzt ist.', 'investigated', NOW()),
(2, 'agent:db-optimizer', 'Max Connection Limit in config.php auf 100 erhöht. Connection Pool wird beobachtet.', 'added_hint', NOW()) (2, 2, 'agent:db-optimizer', 'Max Connection Limit in config.php auf 100 erhöht. Connection Pool wird beobachtet.', 'added_hint', NOW())
ON DUPLICATE KEY UPDATE comment = VALUES(comment); ON DUPLICATE KEY UPDATE id = id;