From cb52298c7a445ea5f88c7d1759c38a90b517336a Mon Sep 17 00:00:00 2001 From: Deploymentcenter Bot Date: Thu, 6 Aug 2026 13:10:20 +0200 Subject: [PATCH] fix(ui): remove extra closing div causing bugtracker layout shift & enforce non-destructive SQL schema migrations --- public/index.php | 2 - .../004_unified_tokens_and_bugtracker.sql | 40 ++-- sql/schema.sql | 211 ++++++++---------- 3 files changed, 106 insertions(+), 147 deletions(-) diff --git a/public/index.php b/public/index.php index 404448e..d0050f4 100644 --- a/public/index.php +++ b/public/index.php @@ -1834,8 +1834,6 @@ $baseUrl = $protocol . '://' . $host; - -
diff --git a/sql/migrations/004_unified_tokens_and_bugtracker.sql b/sql/migrations/004_unified_tokens_and_bugtracker.sql index 01de2c1..4217892 100644 --- a/sql/migrations/004_unified_tokens_and_bugtracker.sql +++ b/sql/migrations/004_unified_tokens_and_bugtracker.sql @@ -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; -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 -CREATE TABLE dc_tokens ( +CREATE TABLE IF NOT EXISTS dc_tokens ( id BIGINT AUTO_INCREMENT PRIMARY KEY, token_id VARCHAR(64) NOT NULL UNIQUE, parent_token_id VARCHAR(64) NULL, @@ -31,7 +25,7 @@ CREATE TABLE dc_tokens ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 2. Unified Bugtracker & Feature Request Items -CREATE TABLE bugtracker_items ( +CREATE TABLE IF NOT EXISTS bugtracker_items ( id BIGINT AUTO_INCREMENT PRIMARY KEY, project_id INT NULL, project_slug VARCHAR(64) NOT NULL, @@ -59,7 +53,7 @@ CREATE TABLE bugtracker_items ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 3. Diagnostic Comments & Timeline Table -CREATE TABLE bugtracker_comments ( +CREATE TABLE IF NOT EXISTS bugtracker_comments ( id BIGINT AUTO_INCREMENT PRIMARY KEY, item_id BIGINT 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 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; --- Seed Sample Master Token --- Raw Master Token: dc_master_myapp_dev_agent_001 --- Hash: SHA256 of 'dc_master_myapp_dev_agent_001' +SET FOREIGN_KEY_CHECKS = 1; + +-- Seed Sample Master Token (Non-destructive) INSERT INTO dc_tokens ( token_id, parent_token_id, token_hash, raw_token, name, project_slug, owner_type, owner_identity, type, scopes, environment ) VALUES ( @@ -83,9 +77,9 @@ INSERT INTO dc_tokens ( 'myapp', 'dev_agent', 'DEV-WORKSTATION-01', 'master', '["bugtracker:report", "bugtracker:manage", "watchdog:ping", "updateservice:read"]', '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 ( token_id, parent_token_id, token_hash, raw_token, name, project_slug, owner_type, owner_identity, type, scopes, environment ) VALUES ( @@ -96,19 +90,21 @@ INSERT INTO dc_tokens ( 'myapp', 'dev_agent', 'DEV-WORKSTATION-01', 'sub', '["bugtracker:report", "bugtracker:manage"]', '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 ( id, project_slug, type, title, description, error_message, stack_trace, error_hash, build_version, environment, severity, status, occurrence_count, created_by ) 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'), (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 ( - item_id, author, comment, action_taken, created_at + id, item_id, author, comment, action_taken, created_at ) VALUES -(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()); +(1, 1, 'agent:code-fixer-01', 'Log-Analyse gestartet. Der Fehler tritt auf, wenn $_SESSION["dc_user_id"] nicht gesetzt ist.', 'investigated', 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; diff --git a/sql/schema.sql b/sql/schema.sql index ab4e1f2..baa2262 100644 --- a/sql/schema.sql +++ b/sql/schema.sql @@ -1,39 +1,10 @@ --- Deploymentcenter Unified Database Schema & Test Data +-- Deploymentcenter Unified Database Schema & Non-Destructive Migrations -- UTF-8 (utf8mb4) & InnoDB 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 -CREATE TABLE dc_users ( +CREATE TABLE IF NOT EXISTS dc_users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(64) NOT NULL UNIQUE, password_hash VARCHAR(255) NOT NULL, @@ -41,13 +12,13 @@ CREATE TABLE dc_users ( created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ) 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, svalue TEXT NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 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, slug VARCHAR(64) NOT NULL UNIQUE, name VARCHAR(190) NOT NULL, @@ -57,7 +28,7 @@ CREATE TABLE dc_projects ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 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, product_id INT NOT NULL, 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 ) 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, license_id INT 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 ) 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, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, actor VARCHAR(64) NOT NULL, @@ -95,7 +66,7 @@ CREATE TABLE license_audit_log ( details TEXT NULL ) 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, window_start DATETIME NOT NULL, 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; -- 3. Watchdog Module Tables -CREATE TABLE watchdog_monitors ( +CREATE TABLE IF NOT EXISTS watchdog_monitors ( id BIGINT AUTO_INCREMENT PRIMARY KEY, source VARCHAR(100) NOT NULL, instance VARCHAR(100) NOT NULL DEFAULT 'default', @@ -136,7 +107,7 @@ CREATE TABLE watchdog_monitors ( UNIQUE KEY uq_monitor (source, instance) ) 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, source VARCHAR(100) NOT NULL, instance VARCHAR(100) NOT NULL DEFAULT 'default', @@ -156,7 +127,7 @@ CREATE TABLE watchdog_event_log ( KEY ix_evt_time (at_utc) ) 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, interval_sec INT NOT NULL, last_run_utc DATETIME NULL, @@ -167,7 +138,7 @@ CREATE TABLE watchdog_cron_jobs ( enabled TINYINT(1) NOT NULL DEFAULT 1 ) 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_hash VARCHAR(128) NOT NULL, raw_token VARCHAR(128) NULL, @@ -179,7 +150,7 @@ CREATE TABLE watchdog_agent_tokens ( revoked TINYINT(1) NOT NULL DEFAULT 0 ) 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, name VARCHAR(100) 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; -- 4. UpdateService Module Tables -CREATE TABLE updateservice_releases ( +CREATE TABLE IF NOT EXISTS updateservice_releases ( id INT AUTO_INCREMENT PRIMARY KEY, product_slug VARCHAR(64) 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) ) 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 -CREATE TABLE dc_tokens ( +CREATE TABLE IF NOT EXISTS dc_tokens ( id BIGINT AUTO_INCREMENT PRIMARY KEY, token_id VARCHAR(64) NOT NULL UNIQUE, 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 ) 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, project_id INT NULL, project_slug VARCHAR(64) NOT NULL, @@ -324,7 +228,7 @@ CREATE TABLE bugtracker_items ( KEY ix_bt_hash (error_hash) ) 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, item_id BIGINT 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 ) 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 ( token_id, parent_token_id, token_hash, raw_token, name, project_slug, owner_type, owner_identity, type, scopes, environment ) 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_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 ( id, project_slug, type, title, description, error_message, stack_trace, error_hash, build_version, environment, severity, status, occurrence_count, created_by ) 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'), (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') -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 ( - item_id, author, comment, action_taken, created_at + id, item_id, author, comment, action_taken, created_at ) VALUES -(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()) -ON DUPLICATE KEY UPDATE comment = VALUES(comment); - +(1, 1, 'agent:code-fixer-01', 'Log-Analyse gestartet. Der Fehler tritt auf, wenn $_SESSION["dc_user_id"] nicht gesetzt ist.', 'investigated', 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;