Bug 报告 (用户排查后提出):
- main.go:61-68 在 normal 模式下 LoadRuntimeConfig 失败只打 log.Printf
- TTSConfigErr 被设, /v1/audio/speech 返 503
- 但服务进程继续跑, 监听端口
- 运维看到"服务在跑", 排查成本高
- /health 虽然 503 + body 有 config_error:true, 但普通用户不会看 body
- 没 metric 计数, 监控告警配不出来
修法 (P0+P1+P2 一起):
P0 - main.go: mode 区分
- setup mode + 失败 = WARN (没装正常)
- normal mode + 失败 = log.Fatalf (进程退出, K8s 拉起, 触发告警)
P1 - dto/health.go + controller/tts.go:
- ConfigStatusResponse 加 Error 字段 (omitempty)
- 错误时填 setting.TTSConfigErr.Error()
- /health body 运维一眼看出原因
P2 - metrics/metrics.go:
- 加 tts_config_load_failures_total counter, labeled by mode
- 不管 fail-fast 还是 warn 都计数, 但 mode 区分
- Prometheus 告警: rate(tts_config_load_failures_total{mode="normal"}[5m]) > 0
e2e 验证 (本机, 3 场景):
- 空 DB / setup 模式 → /health 200 + body error 字段 + 进程不退出 ✓
- 装好 OK / normal 模式 → /health 200, body 无 error 字段 ✓
- 装完 + default_resource_id='' (损坏) / normal 模式 →
log 出现 [FATAL] "service cannot start in normal mode..."
进程退出, K8s 拉起会循环触发, 直到 DB 修好 ✓
副作用:
- fail-fast 后, 自愈回退逻辑不变 (installer.Detect 仍把损坏 db
备份 + 转 setup mode), 但用户已正常装过的 db 不会被自愈删除
- 不影响启动日志, LogStartupSummary() 仍照常打印
- 不影响 setup 模式, 该 WARN 还是 WARN
未 push (待用户)
26 lines
1.1 KiB
Go
26 lines
1.1 KiB
Go
package dto
|
|
|
|
// HealthResponse 是 /health 端点的 JSON 响应。
|
|
// 数值类信息(请求统计、错误)迁移到 /metrics 端点,
|
|
// 这里只保留运行期最关键的状态。
|
|
type HealthResponse struct {
|
|
Status string `json:"status"`
|
|
Service string `json:"service"`
|
|
Version string `json:"version"`
|
|
Commit string `json:"commit"`
|
|
Uptime string `json:"uptime"`
|
|
StartTime string `json:"start_time"`
|
|
Memory map[string]interface{} `json:"memory"`
|
|
ConfigStatus ConfigStatusResponse `json:"config_status"`
|
|
// M1 新增:反映 installer 模式,便于部署探针/运维识别未初始化状态
|
|
Installed bool `json:"installed"`
|
|
Mode string `json:"mode"`
|
|
}
|
|
|
|
type ConfigStatusResponse struct {
|
|
AllRequiredVarsSet bool `json:"all_required_vars_set"`
|
|
ConfigError bool `json:"config_error"`
|
|
// Error 仅在 ConfigError=true 时填充, 给出原始 error message, 方便运维 / curl 一眼看出原因
|
|
Error string `json:"error,omitempty"`
|
|
}
|