GNU/_PAGE/daemon/manage_db/web_tool.php
<?php
include_once('./_common.php');
if (!$is_admin) exit;

if (empty($_SERVER['DOCUMENT_ROOT'])) {
    $_SERVER['DOCUMENT_ROOT'] = '/home/www';
}
require_once $_SERVER['DOCUMENT_ROOT'] . '/DB/db_upbit.php';

$tables = [
    'daemon_coin_container',
    'daemon_coin_container_1h',
    'daemon_coin_container_4h',
    'daemon_coin_container_24h',
    'daemon_coin_container_30d',
    'daemon_coin_container_w',
];

$msg = '';
$msg_type = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['table'])) {
    $target = $_POST['table'];

    if (in_array($target, $tables, true)) {
        try {
            $db_upbit->exec("TRUNCATE TABLE `{$target}`");
            $msg = '[' . date('Y-m-d H:i:s') . "] {$target} 전체 삭제 완료.";
            $msg_type = 'success';
        } catch (Throwable $e) {
            $msg = '오류: ' . $e->getMessage();
            $msg_type = 'error';
        }
    } else {
        $msg = '허용되지 않은 테이블입니다.';
        $msg_type = 'error';
    }
}

$counts = [];
$total_rows = 0;

foreach ($tables as $table_name) {
    try {
        $row_count = $db_upbit->query("SELECT COUNT(*) FROM `{$table_name}`")->fetchColumn();
        $counts[$table_name] = $row_count;

        if (is_numeric($row_count)) {
            $total_rows += (int) $row_count;
        }
    } catch (Throwable $e) {
        $counts[$table_name] = 'ERR';
    }
}

$table_total = count($tables);

include_once(G5_PATH . '/_head.php');
include_once('./web_tool_bookmark.php');
?>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>COIN CONTAINER TRUNCATE</title>
<link href="https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Rajdhani:wght@400;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="./web_tool.css">
</head>
<body>
<div class="page-shell">
    <div class="wrap">
        <section class="hero">
            <div class="hero-panel">
                <div class="eyebrow">Database Utility</div>
                <h1><i class="fas fa-trash-alt"></i> Container Truncate</h1>
                <p>코인 히스토리 수집용 컨테이너 테이블을 빠르게 비우는 관리 페이지입니다. 테이블 구조는 유지한 채 데이터만 초기화하도록 구성했습니다.</p>

                <div class="hero-stats">
                    <div class="stat-card">
                        <div class="stat-label">Tracked Tables</div>
                        <div class="stat-value"><?= number_format($table_total) ?></div>
                    </div>
                    <div class="stat-card">
                        <div class="stat-label">Total Rows</div>
                        <div class="stat-value"><?= number_format($total_rows) ?></div>
                    </div>
                    <div class="stat-card">
                        <div class="stat-label">Last Refresh</div>
                        <div class="stat-value"><?= date('H:i:s') ?></div>
                    </div>
                </div>
            </div>

            <aside class="hero-meta">
                <div class="meta-block">
                    <strong>Palette</strong>
                    <span>#020617 / #0c1224 / #1a2436 / #232e42</span>
                </div>
                <div class="meta-block">
                    <strong>Layout</strong>
                    <span>반응형 단일 컬럼 전환</span>
                </div>
                <div class="meta-block">
                    <strong>Action Scope</strong>
                    <span>TRUNCATE TABLE 실행 / 허용된 테이블만 처리 / 오류 메시지 즉시 표시</span>
                </div>
            </aside>
        </section>

        <?php if ($msg): ?>
        <div class="msg <?= $msg_type ?>"><?= htmlspecialchars($msg) ?></div>
        <?php endif; ?>

        <div class="section-head">
            <h2>Table Queue</h2>
            <p>전체 테이블 수 <?= number_format($table_total) ?> / 현재 서버 시각 <?= date('Y-m-d H:i:s') ?></p>
        </div>

        <div class="table-list">
            <?php foreach ($tables as $table_name): ?>
            <div class="table-row">
                <div class="table-info">
                    <div class="table-name"><?= htmlspecialchars($table_name) ?></div>
                    <div class="table-count">행 수 : <span><?= is_numeric($counts[$table_name]) ? number_format($counts[$table_name]) : $counts[$table_name] ?></span></div>
                </div>
                <form method="POST" class="js-confirm-truncate" data-table-name="<?= htmlspecialchars($table_name, ENT_QUOTES) ?>">
                    <input type="hidden" name="table" value="<?= htmlspecialchars($table_name) ?>">
                    <button type="submit" class="btn-truncate">TRUNCATE</button>
                </form>
            </div>
            <?php endforeach; ?>
        </div>

        <div class="footer-bar"><?= date('Y-m-d H:i:s') ?> - COIN CONTAINER MANAGER</div>
    </div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
    var truncateForms = document.querySelectorAll('.js-confirm-truncate');

    truncateForms.forEach(function (form) {
        form.addEventListener('submit', function (event) {
            var tableName = form.getAttribute('data-table-name') || '선택한 테이블';
            var message = tableName + ' 전체 행을 삭제합니다.\n정말 계속하시겠습니까?';

            if (!window.confirm(message)) {
                event.preventDefault();
            }
        });
    });
});
</script>
</body>
</html>

<?php require_once G5_PATH . '/_PAGE/tail.php'; ?>