fix: complete target diagnostics and reset inspection
This commit is contained in:
@@ -80,9 +80,9 @@ func (m *Maintenance) Doctor(ctx context.Context, applicationChecks []target.Che
|
||||
active := activeFromState(m.state)
|
||||
for _, adapter := range m.targets {
|
||||
availability := adapter.Availability(ctx)
|
||||
report.Diagnostics = append(report.Diagnostics, Diagnostic{TargetID: adapter.ID(), Check: target.Check{Name: "Target availability", OK: availability.Available, Evidence: availability.Evidence}})
|
||||
report.Diagnostics = append(report.Diagnostics, Diagnostic{TargetID: adapter.ID(), Check: target.Check{Name: "Target availability", OK: availability.Available, Evidence: profile.RedactText(availability.Evidence)}})
|
||||
inspection := adapter.Inspect(ctx, active)
|
||||
report.Diagnostics = append(report.Diagnostics, Diagnostic{TargetID: adapter.ID(), Check: target.Check{Name: "detected state", OK: inspection.State != target.Drifted, Evidence: string(inspection.State) + ": " + inspection.Evidence}})
|
||||
report.Diagnostics = append(report.Diagnostics, Diagnostic{TargetID: adapter.ID(), Check: target.Check{Name: "detected state", OK: inspection.State != target.Drifted, Evidence: profile.RedactText(string(inspection.State) + ": " + inspection.Evidence)}})
|
||||
if diagnosable, ok := adapter.(target.Diagnosable); ok {
|
||||
for _, check := range diagnosable.DiagnosticChecks(ctx, active) {
|
||||
check.Evidence = profile.RedactText(check.Evidence)
|
||||
@@ -126,17 +126,22 @@ func (m *Maintenance) Reset(ctx context.Context, confirmed bool) ResetResult {
|
||||
continue
|
||||
}
|
||||
operation := adapter.SetDesired(ctx, false, active)
|
||||
detail, outcome := operation.Inspection.Evidence, "success"
|
||||
finalInspection := operation.Inspection
|
||||
detail, outcome := finalInspection.Evidence, "success"
|
||||
if operation.Err != nil {
|
||||
// OperationResult inspection is explicitly advisory on failure. Reset
|
||||
// must publish and log a fresh observation just like interactive
|
||||
// Target operations do.
|
||||
finalInspection = adapter.Inspect(ctx, active)
|
||||
outcome = "failure"
|
||||
detail = operation.Err.Error()
|
||||
detail = fmt.Sprintf("%v; fresh inspection %s: %s", operation.Err, finalInspection.State, finalInspection.Evidence)
|
||||
result.Err = errors.Join(result.Err, fmt.Errorf("reset %s Target: %w", adapter.ID(), redactError(operation.Err)))
|
||||
}
|
||||
detail = RedactLogDetail(detail)
|
||||
if m.logger != nil {
|
||||
_ = m.logger.Write(LogEntry{Time: time.Now(), Operation: "reset", Target: adapter.ID(), Result: outcome, Detail: detail})
|
||||
}
|
||||
result.Targets = append(result.Targets, ResetTargetResult{TargetID: adapter.ID(), Inspection: operation.Inspection, Err: redactError(operation.Err)})
|
||||
result.Targets = append(result.Targets, ResetTargetResult{TargetID: adapter.ID(), Inspection: finalInspection, Err: redactError(operation.Err)})
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user