상태 캐시 의미 테이블 전환

This commit is contained in:
seo
2026-07-23 02:41:25 +09:00
parent 1947b31c87
commit a473e70dfc
3 changed files with 237 additions and 109 deletions
+93 -7
View File
@@ -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,