Files
ewoooc/docker/nginx/html/monitor-index-clean.html
ogt 1b4f3a7bbe
Some checks failed
CD Pipeline / deploy (push) Failing after 59s
feat: EwoooC 初始化 — 完整專案推版至 Gitea
- 建立 Gitea Actions CD pipeline (.gitea/workflows/cd.yaml)
- 部署模式: rsync Python 檔案至 188 → docker restart (volume mount)
- Dockerfile/requirements 變動時自動重建 Docker image
- 部署通知: Telegram (開始/成功/失敗)
- 健康檢查: https://mo.wooo.work/health (最多 5 次重試)
- 同步最新 CLAUDE.md / ADR-008 / memory (2026-04-19)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 01:21:13 +08:00

805 lines
34 KiB
HTML

<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MOMO Pro - 監控中心</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" rel="stylesheet">
<style>
:root {
--primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
--success-color: #28a745;
--warning-color: #ffc107;
--danger-color: #dc3545;
--info-color: #17a2b8;
}
body {
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
min-height: 100vh;
color: #fff;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
.header {
background: var(--primary-gradient);
padding: 2rem 0;
margin-bottom: 2rem;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
}
.header h1 {
font-weight: 700;
margin-bottom: 0.5rem;
}
.header .subtitle {
opacity: 0.9;
font-size: 1.1rem;
}
.section-title {
color: #fff;
font-weight: 600;
margin-bottom: 1.5rem;
padding-bottom: 0.5rem;
border-bottom: 2px solid rgba(255, 255, 255, 0.2);
display: flex;
align-items: center;
gap: 0.75rem;
}
.section-title i {
font-size: 1.5rem;
}
.service-card {
background: rgba(255, 255, 255, 0.1);
border-radius: 12px;
padding: 1.5rem;
margin-bottom: 1rem;
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
}
.service-card:hover {
transform: translateY(-3px);
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
border-color: rgba(255, 255, 255, 0.2);
}
.service-card h5 {
font-weight: 600;
margin-bottom: 0.75rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.service-card .description {
color: rgba(255, 255, 255, 0.7);
font-size: 0.9rem;
margin-bottom: 1rem;
}
.service-card .btn {
font-size: 0.85rem;
padding: 0.5rem 1rem;
}
.status-badge {
display: inline-flex;
align-items: center;
gap: 0.3rem;
padding: 0.25rem 0.75rem;
border-radius: 20px;
font-size: 0.75rem;
font-weight: 600;
}
.status-running {
background: rgba(40, 167, 69, 0.2);
color: #28a745;
border: 1px solid rgba(40, 167, 69, 0.3);
}
.status-checking {
background: rgba(255, 193, 7, 0.2);
color: #ffc107;
border: 1px solid rgba(255, 193, 7, 0.3);
}
.env-badge {
font-size: 0.7rem;
padding: 0.2rem 0.5rem;
border-radius: 4px;
font-weight: 600;
}
.env-uat {
background: #007bff;
color: #fff;
}
.env-gcp {
background: #dc3545;
color: #fff;
}
.btn-service {
background: rgba(255, 255, 255, 0.15);
border: 1px solid rgba(255, 255, 255, 0.2);
color: #fff;
}
.btn-service:hover {
background: rgba(255, 255, 255, 0.25);
color: #fff;
border-color: rgba(255, 255, 255, 0.3);
}
.btn-primary-custom {
background: var(--primary-gradient);
border: none;
color: #fff;
}
.btn-primary-custom:hover {
opacity: 0.9;
color: #fff;
}
.footer {
text-align: center;
padding: 2rem 0;
color: rgba(255, 255, 255, 0.5);
font-size: 0.85rem;
}
.refresh-info {
font-size: 0.8rem;
color: rgba(255, 255, 255, 0.6);
}
.quick-links {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin-top: 1rem;
}
.quick-link {
background: rgba(255, 255, 255, 0.1);
padding: 0.4rem 0.8rem;
border-radius: 6px;
font-size: 0.8rem;
color: #fff;
text-decoration: none;
transition: all 0.2s;
}
.quick-link:hover {
background: rgba(255, 255, 255, 0.2);
color: #fff;
}
@media (max-width: 768px) {
.header {
padding: 1.5rem 0;
}
.service-card {
padding: 1rem;
}
}
</style>
</head>
<body>
<div class="header">
<div class="container">
<div class="d-flex justify-content-between align-items-center flex-wrap">
<div>
<h1><i class="fas fa-satellite-dish me-2"></i>MOMO Pro 監控中心</h1>
<p class="subtitle mb-0">統一監控 UAT + GCP 雙環境</p>
</div>
<div class="text-end">
<div class="refresh-info">
<i class="fas fa-sync-alt me-1"></i>
上次更新: <span id="lastUpdate">-</span>
</div>
<button class="btn btn-light btn-sm mt-2" onclick="location.reload()">
<i class="fas fa-refresh me-1"></i>重新整理
</button>
</div>
</div>
</div>
</div>
<div class="container">
<!-- 應用服務 -->
<h3 class="section-title">
<i class="fas fa-rocket text-primary"></i>
應用服務
</h3>
<div class="row">
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fas fa-store text-info"></i>
MOMO Pro System
<span class="env-badge env-uat">UAT</span>
</h5>
<p class="description">測試環境 - 商品看板與業績分析系統</p>
<div class="d-flex gap-2 flex-wrap">
<a href="https://mo.wooo.work" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟系統
</a>
<a href="https://mo.wooo.work/health" target="_blank" class="btn btn-service btn-sm">
<i class="fas fa-heartbeat me-1"></i>健康檢查
</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fas fa-store text-danger"></i>
MOMO Pro System
<span class="env-badge env-gcp">GCP</span>
</h5>
<p class="description">正式環境 - 商品看板與業績分析系統</p>
<div class="d-flex gap-2 flex-wrap">
<a href="https://momo.wooo.work" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟系統
</a>
<a href="https://momo.wooo.work/health" target="_blank" class="btn btn-service btn-sm">
<i class="fas fa-heartbeat me-1"></i>健康檢查
</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fas fa-chart-bar text-warning"></i>
Apache Superset
</h5>
<p class="description">BI 分析儀表板 - 資料視覺化平台</p>
<div class="d-flex gap-2 flex-wrap">
<a href="/superset/" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟 Superset
</a>
</div>
</div>
</div>
</div>
<!-- 開發工具 -->
<h3 class="section-title mt-4">
<i class="fas fa-code text-success"></i>
開發工具
</h3>
<div class="row">
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fab fa-gitlab text-warning"></i>
GitLab
</h5>
<p class="description">Git 版本控制 + CI/CD 自動化部署</p>
<div class="d-flex gap-2 flex-wrap">
<a href="http://192.168.0.110:8929" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟 GitLab
</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fab fa-docker text-info"></i>
Docker Registry
</h5>
<p class="description">私有容器映像倉庫</p>
<div class="d-flex gap-2 flex-wrap">
<a href="https://registry.wooo.work" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟 Registry
</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fas fa-project-diagram text-success"></i>
n8n
</h5>
<p class="description">自動化工作流程引擎 (29 個工作流程)</p>
<div class="d-flex gap-2 flex-wrap">
<a href="http://192.168.0.110:5678" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟 n8n
</a>
</div>
</div>
</div>
</div>
<!-- 監控服務 -->
<h3 class="section-title mt-4">
<i class="fas fa-chart-line text-danger"></i>
監控服務 (K8s)
</h3>
<div class="row">
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fas fa-tachometer-alt text-warning"></i>
Grafana
</h5>
<p class="description">監控儀表板 - K8s 叢集視覺化</p>
<div class="d-flex gap-2 flex-wrap">
<a href="http://192.168.0.110:30030" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟 Grafana
</a>
</div>
<div class="quick-links">
<span class="quick-link"><i class="fas fa-info-circle me-1"></i>請參考 CLAUDE.md 取得登入資訊</span>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fas fa-fire text-danger"></i>
Prometheus
</h5>
<p class="description">時序資料庫 - 指標收集與查詢</p>
<div class="d-flex gap-2 flex-wrap">
<a href="/prometheus/" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟 Prometheus
</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fas fa-bell text-info"></i>
Alertmanager
</h5>
<p class="description">告警管理 - 整合 Telegram 通知</p>
<div class="d-flex gap-2 flex-wrap">
<a href="/alertmanager/" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟 Alertmanager
</a>
</div>
</div>
</div>
</div>
<!-- 容器管理與日誌 -->
<h3 class="section-title mt-4">
<i class="fab fa-docker text-info"></i>
容器管理與日誌
</h3>
<div class="row">
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fas fa-cubes text-primary"></i>
Portainer
</h5>
<p class="description">Docker 容器管理平台</p>
<div class="d-flex gap-2 flex-wrap">
<a href="/portainer/" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟 Portainer
</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fas fa-scroll text-success"></i>
Loki
</h5>
<p class="description">日誌聚合系統 (Grafana 整合)</p>
<div class="d-flex gap-2 flex-wrap">
<a href="/loki/" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟 Loki
</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fas fa-microchip text-warning"></i>
cAdvisor
</h5>
<p class="description">容器資源監控</p>
<div class="d-flex gap-2 flex-wrap">
<a href="http://192.168.0.110:8080" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟 cAdvisor
</a>
</div>
</div>
</div>
</div>
<!-- BI 分析平台 -->
<h3 class="section-title mt-4">
<i class="fas fa-chart-pie text-warning"></i>
BI 分析平台
</h3>
<div class="row">
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fas fa-table text-info"></i>
Metabase
</h5>
<p class="description">資料分析與視覺化平台</p>
<div class="d-flex gap-2 flex-wrap">
<a href="/metabase/" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟 Metabase
</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fas fa-tachometer-alt text-success"></i>
Docker Grafana
</h5>
<p class="description">Docker 版監控儀表板</p>
<div class="d-flex gap-2 flex-wrap">
<a href="/grafana/" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟 Grafana
</a>
</div>
</div>
</div>
</div>
<!-- 檔案與協作 -->
<h3 class="section-title mt-4">
<i class="fas fa-cloud text-primary"></i>
檔案與協作
</h3>
<div class="row">
<div class="col-md-6 col-lg-4">
<div class="service-card">
<h5>
<i class="fas fa-cloud-upload-alt text-info"></i>
Nextcloud
</h5>
<p class="description">私有雲端檔案儲存</p>
<div class="d-flex gap-2 flex-wrap">
<a href="/nextcloud/" target="_blank" class="btn btn-primary-custom btn-sm">
<i class="fas fa-external-link-alt me-1"></i>開啟 Nextcloud
</a>
</div>
</div>
</div>
</div>
<!-- 系統狀態 -->
<h3 class="section-title mt-4">
<i class="fas fa-server text-info"></i>
系統狀態概覽
</h3>
<div class="row">
<div class="col-12">
<div class="service-card">
<h5><i class="fas fa-cube me-2"></i>K8s Pods 狀態</h5>
<div class="row mt-3">
<div class="col-md-6">
<h6 class="text-muted mb-2"><i class="fas fa-layer-group me-1"></i>momo namespace</h6>
<ul class="list-unstyled">
<li class="mb-1">
<span class="status-badge status-running"><i class="fas fa-circle"></i> Running</span>
momo-app
</li>
<li class="mb-1">
<span class="status-badge status-running"><i class="fas fa-circle"></i> Running</span>
momo-postgres
</li>
<li class="mb-1">
<span class="status-badge status-running"><i class="fas fa-circle"></i> Running</span>
momo-scheduler
</li>
<li class="mb-1">
<span class="status-badge status-running"><i class="fas fa-circle"></i> Running</span>
postgres-exporter
</li>
</ul>
</div>
<div class="col-md-6">
<h6 class="text-muted mb-2"><i class="fas fa-layer-group me-1"></i>monitoring namespace</h6>
<ul class="list-unstyled">
<li class="mb-1">
<span class="status-badge status-running"><i class="fas fa-circle"></i> Running</span>
prometheus-grafana
</li>
<li class="mb-1">
<span class="status-badge status-running"><i class="fas fa-circle"></i> Running</span>
alertmanager
</li>
<li class="mb-1">
<span class="status-badge status-running"><i class="fas fa-circle"></i> Running</span>
prometheus
</li>
<li class="mb-1">
<span class="status-badge status-running"><i class="fas fa-circle"></i> Running</span>
node-exporter
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- 排程任務總覽 -->
<h3 class="section-title mt-4">
<i class="fas fa-clock text-info"></i>
排程任務總覽
</h3>
<div class="row">
<!-- Cron Jobs -->
<div class="col-lg-6">
<div class="service-card">
<h5><i class="fas fa-terminal me-2 text-warning"></i>Cron 排程</h5>
<div class="table-responsive mt-3">
<table class="table table-sm table-dark table-borderless mb-0">
<thead>
<tr class="text-muted small">
<th>頻率</th>
<th>任務</th>
</tr>
</thead>
<tbody class="small">
<tr>
<td><code>*/5 * * * *</code></td>
<td><i class="fas fa-heartbeat text-success me-1"></i>域名健康監控</td>
</tr>
<tr>
<td><code>*/5 * * * *</code></td>
<td><i class="fas fa-wrench text-warning me-1"></i>主自動修復 (UAT+GCP)</td>
</tr>
<tr>
<td><code>*/5 * * * *</code></td>
<td><i class="fab fa-docker text-info me-1"></i>Docker 健康監控</td>
</tr>
<tr>
<td><code>*/5 * * * *</code></td>
<td><i class="fas fa-dharmachakra text-primary me-1"></i>K8s 健康監控</td>
</tr>
<tr>
<td><code>0 */2 * * *</code></td>
<td><i class="fas fa-newspaper text-info me-1"></i>新聞抓取 (每2小時)</td>
</tr>
<tr>
<td><code>30 */3 * * *</code></td>
<td><i class="fas fa-robot text-purple me-1"></i>AI 處理 (每3小時)</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- n8n Workflows -->
<div class="col-lg-6">
<div class="service-card">
<h5><i class="fas fa-project-diagram me-2 text-success"></i>n8n 工作流程 (29 個)</h5>
<div class="table-responsive mt-3">
<table class="table table-sm table-dark table-borderless mb-0">
<thead>
<tr class="text-muted small">
<th>頻率</th>
<th>工作流程</th>
</tr>
</thead>
<tbody class="small">
<tr>
<td><code>每 5 分鐘</code></td>
<td><i class="fas fa-shield-alt text-success me-1"></i>雙環境健康監控</td>
</tr>
<tr>
<td><code>每 10 分鐘</code></td>
<td><i class="fas fa-cube text-info me-1"></i>K8s Pod 狀態監控</td>
</tr>
<tr>
<td><code>每 15 分鐘</code></td>
<td><i class="fas fa-database text-warning me-1"></i>PostgreSQL 慢查詢監控</td>
</tr>
<tr>
<td><code>每 30 分鐘</code></td>
<td><i class="fab fa-google-drive text-primary me-1"></i>Google Drive 匯入監控</td>
</tr>
<tr>
<td><code>每小時</code></td>
<td><i class="fas fa-hdd text-danger me-1"></i>磁碟空間監控</td>
</tr>
<tr>
<td><code>每日 09:00</code></td>
<td><i class="fas fa-file-alt text-info me-1"></i>每日系統報告</td>
</tr>
<tr>
<td><code>每日 09:00</code></td>
<td><i class="fas fa-certificate text-warning me-1"></i>SSL 證書監控</td>
</tr>
<tr>
<td><code>每週一 09:00</code></td>
<td><i class="fas fa-chart-line text-success me-1"></i>每週業績摘要</td>
</tr>
</tbody>
</table>
</div>
<div class="mt-2">
<a href="http://192.168.0.110:5678" target="_blank" class="btn btn-service btn-sm">
<i class="fas fa-external-link-alt me-1"></i>查看所有工作流程
</a>
</div>
</div>
</div>
</div>
<!-- Python Scheduler -->
<div class="row mt-3">
<div class="col-12">
<div class="service-card">
<h5><i class="fab fa-python me-2 text-info"></i>Python Scheduler (momo-scheduler Pod)</h5>
<div class="row mt-3">
<div class="col-md-3">
<h6 class="text-muted small mb-2">每 30 分鐘</h6>
<ul class="list-unstyled small">
<li><i class="fab fa-google-drive text-primary me-1"></i>Google Drive 自動匯入</li>
<li><i class="fas fa-eye text-warning me-1"></i>網頁白頁監控</li>
</ul>
</div>
<div class="col-md-3">
<h6 class="text-muted small mb-2">每 1 小時</h6>
<ul class="list-unstyled small">
<li><i class="fas fa-store text-success me-1"></i>主站商品爬蟲</li>
<li><i class="fas fa-envelope text-info me-1"></i>EDM 限時搶購爬蟲</li>
</ul>
</div>
<div class="col-md-3">
<h6 class="text-muted small mb-2">每 6 小時</h6>
<ul class="list-unstyled small">
<li><i class="fas fa-gift text-danger me-1"></i>購物節活動爬蟲</li>
</ul>
</div>
<div class="col-md-3">
<h6 class="text-muted small mb-2">每日</h6>
<ul class="list-unstyled small">
<li><i class="fab fa-telegram text-info me-1"></i>每日業績 Telegram 通知</li>
<li><i class="fab fa-line text-success me-1"></i>每日業績 LINE 通知</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- 自動修復機制 -->
<h3 class="section-title mt-4">
<i class="fas fa-wrench text-warning"></i>
自動修復機制
</h3>
<div class="row">
<div class="col-md-6">
<div class="service-card">
<h5><i class="fas fa-server me-2"></i><span class="env-badge env-uat me-2">UAT</span>UAT 環境修復</h5>
<div class="mt-3">
<table class="table table-sm table-dark table-borderless mb-0">
<tbody class="small">
<tr>
<td><i class="fas fa-memory text-danger me-1"></i>OOM Handler</td>
<td>每 15 分鐘</td>
<td><span class="status-badge status-running"><i class="fas fa-circle"></i></span></td>
</tr>
<tr>
<td><i class="fas fa-database text-info me-1"></i>PostgreSQL Repair</td>
<td>每 30 分鐘</td>
<td><span class="status-badge status-running"><i class="fas fa-circle"></i></span></td>
</tr>
<tr>
<td><i class="fas fa-undo text-warning me-1"></i>Auto Rollback</td>
<td>每 5 分鐘</td>
<td><span class="status-badge status-running"><i class="fas fa-circle"></i></span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="col-md-6">
<div class="service-card">
<h5><i class="fas fa-cloud me-2"></i><span class="env-badge env-gcp me-2">GCP</span>GCP 環境修復 (遠端)</h5>
<div class="mt-3">
<table class="table table-sm table-dark table-borderless mb-0">
<tbody class="small">
<tr>
<td><i class="fas fa-memory text-danger me-1"></i>OOM Handler GCP</td>
<td>每 15 分鐘</td>
<td><span class="status-badge status-running"><i class="fas fa-circle"></i></span></td>
</tr>
<tr>
<td><i class="fas fa-database text-info me-1"></i>PostgreSQL Repair GCP</td>
<td>每 30 分鐘</td>
<td><span class="status-badge status-running"><i class="fas fa-circle"></i></span></td>
</tr>
<tr>
<td><i class="fas fa-undo text-warning me-1"></i>Auto Rollback GCP</td>
<td>每 5 分鐘</td>
<td><span class="status-badge status-running"><i class="fas fa-circle"></i></span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="row mt-3">
<div class="col-12">
<div class="service-card">
<h5><i class="fas fa-cog me-2"></i>修復能力總覽</h5>
<div class="row mt-3">
<div class="col-md-4">
<h6 class="text-muted small mb-2">記憶體問題</h6>
<p class="small mb-0"><i class="fas fa-check text-success me-1"></i>OOM 自動增加記憶體限制 +50%</p>
<p class="small mb-0"><i class="fas fa-check text-success me-1"></i>自動重啟 Pod</p>
</div>
<div class="col-md-4">
<h6 class="text-muted small mb-2">資料庫問題</h6>
<p class="small mb-0"><i class="fas fa-check text-success me-1"></i>連線失敗自動重啟</p>
<p class="small mb-0"><i class="fas fa-check text-success me-1"></i>死鎖自動終止查詢</p>
<p class="small mb-0"><i class="fas fa-check text-success me-1"></i>表膨脹自動 VACUUM</p>
</div>
<div class="col-md-4">
<h6 class="text-muted small mb-2">應用問題</h6>
<p class="small mb-0"><i class="fas fa-check text-success me-1"></i>5 次健康失敗自動回滾</p>
<p class="small mb-0"><i class="fas fa-check text-success me-1"></i>服務無回應自動重啟</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<p class="mb-1">MOMO Pro System © 2026 WOOO TECH</p>
<p class="mb-0">
<i class="fas fa-code me-1"></i>
UAT: mo.wooo.work | GCP: momo.wooo.work
</p>
</div>
</div>
<script>
// 更新時間顯示
function updateTime() {
const now = new Date();
const timeStr = now.toLocaleString('zh-TW', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
});
document.getElementById('lastUpdate').textContent = timeStr;
}
updateTime();
setInterval(updateTime, 1000);
</script>
</body>
</html>