상태 캐시 의미 테이블 전환
This commit is contained in:
+93
-7
@@ -427,20 +427,106 @@ function bootstrap_db(): void
|
||||
");
|
||||
|
||||
$pdo->exec("
|
||||
CREATE TABLE IF NOT EXISTS app_json_store (
|
||||
store_key VARCHAR(128) NOT NULL PRIMARY KEY,
|
||||
payload LONGTEXT NOT NULL,
|
||||
expires_at DATETIME NULL,
|
||||
CREATE TABLE IF NOT EXISTS power_event_states (
|
||||
event_key VARCHAR(32) NOT NULL PRIMARY KEY,
|
||||
active TINYINT(1) NOT NULL DEFAULT 0,
|
||||
active_since BIGINT NULL,
|
||||
last_detected_at BIGINT NULL,
|
||||
last_cleared_at BIGINT NULL,
|
||||
last_duration_seconds INT NOT NULL DEFAULT 0,
|
||||
event_history LONGTEXT NOT NULL,
|
||||
refreshed_at BIGINT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_expires_at (expires_at),
|
||||
INDEX idx_updated_at (updated_at)
|
||||
ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB
|
||||
DEFAULT CHARSET=utf8mb4
|
||||
COLLATE=utf8mb4_unicode_ci
|
||||
");
|
||||
|
||||
$pdo->exec("
|
||||
CREATE TABLE IF NOT EXISTS battery_profile_cache (
|
||||
days SMALLINT UNSIGNED NOT NULL PRIMARY KEY,
|
||||
created_at_epoch BIGINT NOT NULL,
|
||||
sample_rows LONGTEXT NOT NULL,
|
||||
expires_at DATETIME NOT NULL,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_expires_at (expires_at)
|
||||
) ENGINE=InnoDB
|
||||
DEFAULT CHARSET=utf8mb4
|
||||
COLLATE=utf8mb4_unicode_ci
|
||||
");
|
||||
|
||||
$pdo->exec("
|
||||
CREATE TABLE IF NOT EXISTS systemd_service_cache (
|
||||
cache_key TINYINT UNSIGNED NOT NULL PRIMARY KEY,
|
||||
captured_at BIGINT NOT NULL,
|
||||
service_rows LONGTEXT NOT NULL,
|
||||
expires_at DATETIME NOT NULL,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_expires_at (expires_at)
|
||||
) ENGINE=InnoDB
|
||||
DEFAULT CHARSET=utf8mb4
|
||||
COLLATE=utf8mb4_unicode_ci
|
||||
");
|
||||
|
||||
$legacyJsonStoreExists = (bool)$pdo->query("
|
||||
SELECT COUNT(*)
|
||||
FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'app_json_store'
|
||||
")->fetchColumn();
|
||||
|
||||
if ($legacyJsonStoreExists) {
|
||||
$pdo->exec("
|
||||
INSERT IGNORE INTO power_event_states
|
||||
(event_key, active, active_since, last_detected_at, last_cleared_at, last_duration_seconds, event_history, refreshed_at)
|
||||
SELECT
|
||||
CASE store_key
|
||||
WHEN 'file:control-low-voltage-state' THEN 'low_voltage'
|
||||
WHEN 'file:control-throttling-state' THEN 'throttling'
|
||||
ELSE store_key
|
||||
END,
|
||||
JSON_UNQUOTE(JSON_EXTRACT(payload, '$.active')) IN ('true', '1'),
|
||||
JSON_EXTRACT(payload, '$.active_since'),
|
||||
JSON_EXTRACT(payload, '$.last_detected_at'),
|
||||
JSON_EXTRACT(payload, '$.last_cleared_at'),
|
||||
COALESCE(JSON_EXTRACT(payload, '$.last_duration_seconds'), 0),
|
||||
COALESCE(JSON_EXTRACT(payload, '$.events'), JSON_ARRAY()),
|
||||
JSON_EXTRACT(payload, '$.updated_at')
|
||||
FROM app_json_store
|
||||
WHERE store_key IN ('file:control-low-voltage-state', 'file:control-throttling-state')
|
||||
");
|
||||
|
||||
$pdo->exec("
|
||||
INSERT IGNORE INTO battery_profile_cache
|
||||
(days, created_at_epoch, sample_rows, expires_at)
|
||||
SELECT
|
||||
CAST(REPLACE(REPLACE(store_key, 'battery_profile:', ''), 'd', '') AS UNSIGNED),
|
||||
COALESCE(JSON_EXTRACT(payload, '$.created_at'), UNIX_TIMESTAMP()),
|
||||
COALESCE(JSON_EXTRACT(payload, '$.rows'), JSON_ARRAY()),
|
||||
COALESCE(expires_at, DATE_ADD(NOW(), INTERVAL 6 HOUR))
|
||||
FROM app_json_store
|
||||
WHERE store_key LIKE 'battery_profile:%'
|
||||
");
|
||||
|
||||
$pdo->exec("
|
||||
INSERT IGNORE INTO systemd_service_cache
|
||||
(cache_key, captured_at, service_rows, expires_at)
|
||||
SELECT
|
||||
1,
|
||||
COALESCE(JSON_EXTRACT(payload, '$.created_at'), UNIX_TIMESTAMP()),
|
||||
COALESCE(JSON_EXTRACT(payload, '$.rows'), JSON_ARRAY()),
|
||||
COALESCE(expires_at, DATE_ADD(NOW(), INTERVAL 5 SECOND))
|
||||
FROM app_json_store
|
||||
WHERE store_key = 'custom_services'
|
||||
");
|
||||
|
||||
$pdo->exec("DROP TABLE app_json_store");
|
||||
}
|
||||
|
||||
$pdo->exec("
|
||||
CREATE TABLE IF NOT EXISTS wifi_client_aliases (
|
||||
mac VARCHAR(17) NOT NULL PRIMARY KEY,
|
||||
|
||||
Reference in New Issue
Block a user