Files
Assistant/modules/capability/domain/health.go
2026-08-16 15:22:49 +03:00

42 lines
1.0 KiB
Go

package domain
import (
"errors"
"git.cin.su/m/Assistant/contracts/capability"
)
var ErrInvalidHealth = errors.New("invalid capability health")
var ErrUnsupportedHealthVersion = errors.New("unsupported capability health semantic version")
func ValidateHealth(health capability.Health) error {
if health.CapabilityID == "" || health.Revision < 1 {
return ErrInvalidHealth
}
switch health.SemanticVersion {
case capability.HealthV1:
if health.ObservedAtUnixMillis != nil {
return ErrInvalidHealth
}
case capability.HealthV2:
if health.ObservedAtUnixMillis == nil || *health.ObservedAtUnixMillis < 1 {
return ErrInvalidHealth
}
default:
return ErrUnsupportedHealthVersion
}
switch health.State {
case capability.HealthAvailable:
if health.Reason != capability.ReasonNone {
return ErrInvalidHealth
}
case capability.HealthDegraded, capability.HealthUnavailable:
if health.Reason == capability.ReasonNone || health.Reason == "" {
return ErrInvalidHealth
}
default:
return ErrInvalidHealth
}
return nil
}