v0.1.0

架構

本頁以一張圖呈現 go-web-monitor 各套件的層級關係,並列出每層的職責與跨層共用的設計原則。

系統概覽

graph TB
    Main[cmd/tui<br/>main] -->|util.Read / util.Save| Store[(.webMonitor.json)]
    Main -->|service.New| Monitor[service.Monitor]
    Main -->|service.NewUI| UI[service.UI]
    UI -->|Ticker 每分鐘 / refresh| Monitor
    UI -->|指令方法| Monitor
    Monitor -->|Check: HEAD → GET| Site[目標網站]
    Monitor -->|util.CheckExpire| TLS[目標網站 :443]
    Monitor -->|sendEmail / TestEmail| SMTP[service.SMTP]
    SMTP --> Mail[郵件伺服器]
    Monitor -->|Save| Store

分層

層 套件/檔案 職責
入口 cmd/tui/main.go 建立或讀取 .webMonitor.json,組裝 Monitor 與 UI 後執行
介面 internal/service/ui.go tview 介面、每分鐘排程、指令解析、表格與面板渲染
監控核心 internal/service/monitor.go 監控清單與狀態表、HTTP 探測、失敗計數、告警觸發、SMTP 設定管理
寄信 internal/service/smtp.go 依 port 選擇明文/隱式 TLS/STARTTLS,寄出 HTML 信件
工具 internal/util/ JSON 設定檔讀寫、SSL 憑證剩餘天數
資料模型 internal/model/model.go Website、Config、MonitorData

跨層原則

原則 實作
單一持久化檔案 所有狀態與設定都寫在當前目錄的 .webMonitor.json,沒有資料庫或外部服務
狀態集中於 Monitor UI 不持有資料,只透過 Monitor 的 getter 與指令方法讀寫
共享狀態以 sync.RWMutex 保護 list、status、config、isShow 由同一把鎖保護(覆蓋範圍不完整,見 已知限制)
無外部相依的網路層 HTTP、TLS、SMTP 全用標準庫;第三方套件只有 tview 與 tcell

延伸閱讀

EN