Some checks failed
CD Pipeline / deploy (push) Failing after 59s
- 建立 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>
805 lines
34 KiB
HTML
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>
|