# 設定檔

本頁說明 `.webMonitor.json` 的位置、產生時機與每個欄位的意義。

## 位置與生命週期

go-web-monitor 不讀取環境變數，所有狀態與設定都存在**當前工作目錄**的 `.webMonitor.json`（專案 `.gitignore` 已排除此檔）。

| 時機 | 行為 |
|------|------|
| 啟動時檔案不存在 | 建立空白清單，SMTP 預設 `port: 587`、`enabled: false` |
| 啟動時 | 讀取 `list[].url` 作為監控清單、`config` 作為 SMTP 設定；JSON 解析失敗則印出錯誤並結束 |
| 執行中 | 每輪檢查、`add`／`del`、`smtp` 指令後整份覆寫 |

在不同目錄啟動會使用不同的設定檔，各自獨立。

## 範例

```json
{
  "list": [
    {
      "url": "https://example.com",
      "code": 200,
      "duration": 62554917,
      "online": true,
      "last_check": "2025-01-15T23:12:29.200334+08:00",
      "expire": 87,
      "count": 0
    }
  ],
  "config": {
    "host": "smtp.gmail.com",
    "port": 587,
    "username": "your@email.com",
    "password": "your_app_password",
    "from": "your@email.com",
    "to": ["recipient@email.com"],
    "cc": "",
    "enabled": true
  }
}
```

## `list[]` 欄位（`model.Website`）

| 欄位 | 型別 | 說明 |
|------|------|------|
| `url` | string | 正規化後的網址（未以 `http` 開頭者補 `https://`） |
| `code` | int | 最近一次 HTTP 狀態碼；連線失敗為 `0` |
| `duration` | int | 回應耗時，單位奈秒（`time.Duration`） |
| `online` | bool | 狀態碼介於 200–399 為 `true` |
| `last_check` | string | 最近一次檢查時間（RFC 3339） |
| `expire` | int | SSL 憑證剩餘天數；無法取得為 `0` |
| `count` | int | 連續離線次數，範圍 0–4 |

啟動時只使用 `url`，其餘欄位是上次執行的快照，第一輪檢查後即被覆蓋。

## `config` 欄位（`model.Config`）

| 欄位 | 型別 | 預設 | 說明 |
|------|------|------|------|
| `host` | string | `""` | SMTP 主機 |
| `port` | int | `587` | `465` 走隱式 TLS、`587` 走 STARTTLS |
| `username` | string | `""` | 與 `password` 皆非空才認證 |
| `password` | string | `""` | 以明文存放於檔案中 |
| `from` | string | `""` | 寄件者 |
| `to` | []string | `[]` | 收件者清單 |
| `cc` | string | `""` | 副本地址；TUI 無對應指令，只能手動編輯 |
| `enabled` | bool | `false` | 是否寄出告警與測試信 |

`password` 以明文寫入檔案，檔案權限為 `0644`；在多人共用的主機上請自行調整權限。

## 手動編輯

程式執行中會整份覆寫設定檔，手動修改（例如 `cc`、批次匯入網址）請在程式結束後進行，下次啟動時生效。
