Files
assist/templates/monitor-contents.md
T
jiantw83 2b7176a644 feat(patrol): 一輪巡檢落地,心跳改由巡檢跑完才寫
What:
- 新增 tools/patrol.sh,三個子命令:collect 收集、finish 收尾、abort 中止。這一輪的巡檢項目是四項純讀取:使用統計、版本落差與重啟閘門、階段鎖與工作包鎖、心跳自述。
- 心跳的寫入從排程移到巡檢收尾。排程只呼叫巡檢,不再直接寫心跳。
- 排程週期由心跳門檻推導,不再寫死。install heartbeat 這個工作代號改為拒絕。

Why:
- 排程直接寫心跳的話,心跳新鮮只證明排程活著。巡檢整個壞掉、每輪都失敗,心跳照樣新鮮,閘門照樣放行,而且沒有任何錯誤訊息——這是無聲失效,是最難發現的一種。
- 改成巡檢寫,心跳新鮮才等於上一輪真的跑完了。閘門判的才是工作訊號,不是行程存活訊號。
- 門檻是讀取端的設定,心跳檔裡不存它。所以週期與門檻各寫死一個數字一定會撞:門檻五分鐘、巡檢十五分鐘,心跳永遠是過期的。

How:
- 週期取「滿足漏掉一輪還算新鮮、漏掉兩輪才過期」的最大值,並且要能整除一小時。要拉長巡檢週期就調大門檻,週期自動跟著長,兩個數字不會各走各的。
- 心跳只看「這一輪有沒有把結果記下來」,不看四項的成敗。四項有失敗但監控頁寫成了就寫心跳,頁上判定標警示;頁寫不成就中止,一定不寫,讓心跳自己過期。頁每輪都寫失敗卻照樣寫心跳,等於把這次要修掉的缺陷原封不動搬過去。
- 整輪拿一把目錄鎖,搶不到就讓開,不排隊也不並行。並行兩輪會在同一頁附兩節,還會互相蓋掉用量快照。鎖逾時可被下一輪搶走,被搶走的那一輪收尾時對不上就不寫心跳——它沒跑到底,不該蓋章。
- 任一項失敗不影響其餘項目。失敗要在監控頁上看得出來是失敗,不是沒資料;來源是空的則明寫「那是零次,不是故障」。
- 版本盤點照抄腳本原字。抄到查詢失敗就寫查詢失敗,不改寫成相符、也不自己補查遠端版本——查不到是沒有證據,不是版本沒問題。

Who:
助理落地的第四塊。排程那一輪留下的問題在這裡解掉了。
2026-09-01 15:06:10 +08:00

2.6 KiB

助理巡檢目錄

由 jsc-assist 維護。這是目錄頁 MONITOR_CONTENTS。 一列代表一台機器。雜湊來源是 {主機名}/{登入帳號},所以一台機器一列、一頁,換一支 CLI 不另開列。 MONITOR_{HASH} 的 {HASH} 交給 jsc-gitea/tools/hash-id 產生,雜湊來源見 jsc-meta 的 references/guidelines.md「Wiki 頁命名總表」。

監控頁 主機 帳號 心跳 最後巡檢 待辦筆數 連續失敗項
MONITOR_{HASH} {主機名} {登入帳號} {新鮮、過期、不存在 三選一} {yyyy-MM-dd HH:mm} {n} {n}

欄位說明

欄位 內容 為什麼留這一欄
監控頁 指向 MONITOR_{HASH} 的同 wiki 連結 少了連結就要人自己算雜湊才翻得到內容頁
主機 這台機器的主機名,與雜湊第一段相同 比對用的兩欄之一,決定要更新哪一列
帳號 助理執行時的登入帳號,與雜湊第二段相同 比對用的兩欄之一。同一台機器換帳號就是另一個巡檢對象
心跳 巡檢當下(本輪寫入前)的心跳判定,判準只看 ts 距現在有沒有超過門檻,預設 300 秒 一眼看出這台機器上一輪巡檢有沒有跑完,不必逐頁翻
最後巡檢 該頁最新一節的時間戳 心跳由巡檢寫,兩欄理當一致;差很多就代表有一輪寫了心跳卻沒寫頁,那是缺陷
待辦筆數 待辦簿現有筆數 心跳新鮮而筆數為 0,代表助理空轉,沒有東西可跑
連續失敗項 該頁最新一節裡 fail_count 大於 0 的筆數 待辦簿的項目失敗不會自動暫停,每輪都重試。這一欄讓壞掉的項目在目錄頁就現形

寫入規則

這一頁是共用目錄,別台機器的列一律原樣保留。

flowchart TD
  A[整頁讀回來] --> B{讀得到舊內容}
  B -- 否 --> C[中止:不新增列,也不寫入]
  B -- 是 --> D{主機與帳號兩欄都對得上}
  D -- 是 --> E[只覆寫那一列的其餘欄位]
  D -- 否 --> F[新增一列]
  E --> G[其他機器的列原樣送回]
  F --> G
  • 先整頁讀回來,再比對主機與帳號兩欄。
  • 兩欄都相同就更新那一列,其餘欄位覆寫成本次巡檢結果。
  • 找不到兩欄都相同的列,才新增一列。
  • 只動自己那一列,別台機器的列一個字都不改。
  • 禁止整頁覆蓋。整頁覆蓋等於刪掉別台機器的紀錄。
  • 讀不到舊內容就中止,不新增列,也不寫入。
  • 內容頁 MONITOR_{HASH} 的寫入語意相反,那頁只附加一節、不覆寫,兩者不要混用。