42 lines
1.0 KiB
Go
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
|
|
}
|