feat: complete daemon operations and recovery tooling
This commit is contained in:
@@ -55,6 +55,48 @@ func Restart(ctx context.Context, socketPath string, service string, progress fu
|
||||
return submit(ctx, socketPath, request, progress)
|
||||
}
|
||||
|
||||
// Status 向守护进程查询后端当前状态,返回结构化诊断结果。
|
||||
// socketPath 守护进程 Unix Socket 的绝对路径,service 是目标服务名。
|
||||
// 当路径非法、连接失败或守护进程返回错误时返回 error。
|
||||
func Status(ctx context.Context, socketPath string, service string) (daemonapi.Diagnosis, error) {
|
||||
if !filepath.IsAbs(socketPath) {
|
||||
return daemonapi.Diagnosis{}, errors.New("daemon socket path must be absolute")
|
||||
}
|
||||
return submitDiagnosis(ctx, socketPath, daemonapi.Request{Operation: daemonapi.OperationStatus, Service: service})
|
||||
}
|
||||
|
||||
// Doctor 向守护进程提交一次只读诊断请求,返回全部漂移项与建议动作。
|
||||
// socketPath 守护进程 Unix Socket 的绝对路径,service 是目标服务名。
|
||||
// 当路径非法、连接失败或守护进程返回错误时返回 error。
|
||||
func Doctor(ctx context.Context, socketPath string, service string) (daemonapi.Diagnosis, error) {
|
||||
if !filepath.IsAbs(socketPath) {
|
||||
return daemonapi.Diagnosis{}, errors.New("daemon socket path must be absolute")
|
||||
}
|
||||
return submitDiagnosis(ctx, socketPath, daemonapi.Request{Operation: daemonapi.OperationDoctor, Service: service})
|
||||
}
|
||||
|
||||
// Reconcile 向守护进程提交对账请求,apply 为 true 时执行自动修复,否则只生成修复计划。
|
||||
// socketPath 守护进程 Unix Socket 的绝对路径,service 是目标服务名。
|
||||
// 当路径非法、连接失败或守护进程返回错误时返回 error。
|
||||
func Reconcile(ctx context.Context, socketPath string, service string, apply bool) (daemonapi.Diagnosis, error) {
|
||||
if !filepath.IsAbs(socketPath) {
|
||||
return daemonapi.Diagnosis{}, errors.New("daemon socket path must be absolute")
|
||||
}
|
||||
return submitDiagnosis(ctx, socketPath, daemonapi.Request{Operation: daemonapi.OperationReconcile, Service: service, Apply: apply})
|
||||
}
|
||||
|
||||
// submitDiagnosis 提交一次诊断类请求并解析结果中的诊断结构,供 status/doctor/reconcile 复用。
|
||||
func submitDiagnosis(ctx context.Context, socketPath string, request daemonapi.Request) (daemonapi.Diagnosis, error) {
|
||||
response, err := submit(ctx, socketPath, request, nil)
|
||||
if err != nil {
|
||||
return daemonapi.Diagnosis{}, err
|
||||
}
|
||||
if response.Diagnosis == nil {
|
||||
return daemonapi.Diagnosis{}, errors.New("daemon returned no diagnosis result")
|
||||
}
|
||||
return *response.Diagnosis, nil
|
||||
}
|
||||
|
||||
// submit 通过 Unix Socket 把 request 发送给守护进程并读取响应流,供本包各公开函数复用。
|
||||
// 它会以换行分隔的 JSON 编码请求,写完后关闭写端以向对端发送结束信号,
|
||||
// 随后循环解码响应:进度事件通过 progress 回调透传,最终结果则返回给调用方。
|
||||
|
||||
Reference in New Issue
Block a user