Panel/db/resource_monitoring_schema.sql
copilot-swe-agent[bot] 57a34d3a2b Add comprehensive resource monitoring system - Phase 1: Database schema and agent functions
Co-authored-by: iaretechnician <2749183+iaretechnician@users.noreply.github.com>
2025-09-10 20:10:45 +00:00

88 lines
No EOL
4.9 KiB
SQL

-- Resource Monitoring Schema for OGP
-- This file creates the tables needed for resource monitoring and Discord alerting
-- Table structure for table `ogp_resource_monitoring`
CREATE TABLE IF NOT EXISTS `ogp_resource_monitoring` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`remote_server_id` int(11) NOT NULL,
`home_id` int(11) DEFAULT NULL COMMENT 'NULL for system-wide metrics',
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`cpu_usage` decimal(5,2) DEFAULT NULL COMMENT 'CPU usage percentage (0.00-100.00)',
`memory_usage` decimal(5,2) DEFAULT NULL COMMENT 'Memory usage percentage (0.00-100.00)',
`memory_used_mb` int(11) DEFAULT NULL COMMENT 'Memory used in MB',
`memory_total_mb` int(11) DEFAULT NULL COMMENT 'Total memory in MB',
`disk_usage` decimal(5,2) DEFAULT NULL COMMENT 'Disk usage percentage (0.00-100.00)',
`disk_used_mb` bigint(20) DEFAULT NULL COMMENT 'Disk used in MB',
`disk_total_mb` bigint(20) DEFAULT NULL COMMENT 'Total disk in MB',
`process_count` int(11) DEFAULT NULL COMMENT 'Number of processes (for game servers)',
`network_rx_mb` bigint(20) DEFAULT NULL COMMENT 'Network received in MB',
`network_tx_mb` bigint(20) DEFAULT NULL COMMENT 'Network transmitted in MB',
PRIMARY KEY (`id`),
KEY `idx_server_timestamp` (`remote_server_id`, `timestamp`),
KEY `idx_home_timestamp` (`home_id`, `timestamp`),
KEY `idx_timestamp` (`timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Resource monitoring data for servers and game instances';
-- Table structure for table `ogp_resource_alerts`
CREATE TABLE IF NOT EXISTS `ogp_resource_alerts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`remote_server_id` int(11) NOT NULL,
`home_id` int(11) DEFAULT NULL COMMENT 'NULL for system-wide alerts',
`alert_type` enum('cpu','memory','disk') NOT NULL,
`threshold_percentage` decimal(5,2) NOT NULL DEFAULT 80.00,
`duration_minutes` int(11) NOT NULL DEFAULT 30,
`is_active` tinyint(1) NOT NULL DEFAULT 1,
`discord_webhook_url` varchar(500) DEFAULT NULL,
`last_triggered` timestamp NULL DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_server_active` (`remote_server_id`, `is_active`),
KEY `idx_home_active` (`home_id`, `is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Alert configurations and state for resource monitoring';
-- Table structure for table `ogp_resource_alert_history`
CREATE TABLE IF NOT EXISTS `ogp_resource_alert_history` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`alert_id` int(11) NOT NULL,
`remote_server_id` int(11) NOT NULL,
`home_id` int(11) DEFAULT NULL,
`alert_type` enum('cpu','memory','disk') NOT NULL,
`triggered_value` decimal(5,2) NOT NULL,
`threshold_value` decimal(5,2) NOT NULL,
`duration_exceeded` int(11) NOT NULL COMMENT 'Duration in minutes that threshold was exceeded',
`message_sent` tinyint(1) NOT NULL DEFAULT 0,
`discord_response` text DEFAULT NULL,
`triggered_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_alert_triggered` (`alert_id`, `triggered_at`),
KEY `idx_server_triggered` (`remote_server_id`, `triggered_at`),
CONSTRAINT `fk_resource_alert_history_alert` FOREIGN KEY (`alert_id`) REFERENCES `ogp_resource_alerts`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='History of triggered resource alerts';
-- Table structure for table `ogp_discord_settings`
CREATE TABLE IF NOT EXISTS `ogp_discord_settings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`setting_name` varchar(100) NOT NULL,
`setting_value` text DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_setting` (`setting_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Discord integration settings';
-- Default Discord settings
INSERT INTO `ogp_discord_settings` (setting_name, setting_value, description) VALUES
('default_webhook_url', '', 'Default Discord webhook URL for alerts'),
('alert_enabled', '1', 'Enable/disable Discord alerts (1=enabled, 0=disabled)'),
('alert_format', 'json', 'Format for Discord messages (json or embed)'),
('bot_username', 'OGP Monitor', 'Username displayed for the bot in Discord'),
('alert_cooldown_minutes', '60', 'Minimum minutes between identical alerts')
ON DUPLICATE KEY UPDATE
setting_value = VALUES(setting_value),
description = VALUES(description);
-- Note: Automatic cleanup can be configured via cron job or panel cleanup script
-- Example cron job command:
-- 0 2 * * * mysql -u localuser -p panel -e "DELETE FROM ogp_resource_monitoring WHERE timestamp < DATE_SUB(NOW(), INTERVAL 30 DAY); DELETE FROM ogp_resource_alert_history WHERE triggered_at < DATE_SUB(NOW(), INTERVAL 90 DAY);"