first commit
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package validator
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"browser.local/platform/domain"
|
||||
)
|
||||
|
||||
func ValidateRunControlHello(hello domain.RunControlHello) error {
|
||||
var violations []string
|
||||
violations = appendRequired(violations, "registrationToken", hello.RegistrationToken)
|
||||
violations = appendRequired(violations, "runEndpointId", hello.RunEndpointID)
|
||||
violations = appendRequired(violations, "displayName", hello.DisplayName)
|
||||
violations = appendRequired(violations, "version", hello.Version)
|
||||
violations = appendRequired(violations, "capabilityReport.fingerprint", hello.CapabilityReport.Fingerprint)
|
||||
if !validRunControlStatus(hello.Status) {
|
||||
violations = append(violations, "status is invalid")
|
||||
}
|
||||
violations = appendCapacityViolations(violations, hello.Capacity)
|
||||
violations = appendCapabilitiesViolations(violations, "capabilityReport.capabilities", hello.CapabilityReport.Capabilities)
|
||||
return finish(violations)
|
||||
}
|
||||
|
||||
func ValidateRunControlHeartbeat(heartbeat domain.RunControlHeartbeat) error {
|
||||
var violations []string
|
||||
violations = appendRequired(violations, "runEndpointId", heartbeat.RunEndpointID)
|
||||
violations = appendRequired(violations, "sessionToken", heartbeat.SessionToken)
|
||||
violations = appendRequired(violations, "version", heartbeat.Version)
|
||||
violations = appendRequired(violations, "capabilityFingerprint", heartbeat.CapabilityFingerprint)
|
||||
if !validRunControlStatus(heartbeat.Status) {
|
||||
violations = append(violations, "status is invalid")
|
||||
}
|
||||
violations = appendCapacityViolations(violations, heartbeat.Capacity)
|
||||
return finish(violations)
|
||||
}
|
||||
|
||||
func appendCapacityViolations(violations []string, capacity domain.RunCapacity) []string {
|
||||
if capacity.MaxJobs < 0 || capacity.RunningJobs < 0 || capacity.QueuedJobs < 0 {
|
||||
violations = append(violations, "capacity counts must not be negative")
|
||||
}
|
||||
if capacity.MaxJobs > 0 && capacity.RunningJobs > capacity.MaxJobs {
|
||||
violations = append(violations, "runningJobs must not exceed maxJobs")
|
||||
}
|
||||
return violations
|
||||
}
|
||||
|
||||
func appendCapabilitiesViolations(violations []string, field string, capabilities []string) []string {
|
||||
if len(capabilities) == 0 {
|
||||
violations = append(violations, field+" must not be empty")
|
||||
}
|
||||
for i, capability := range capabilities {
|
||||
if strings.TrimSpace(capability) == "" {
|
||||
violations = append(violations, fmt.Sprintf("%s[%d] is required", field, i))
|
||||
}
|
||||
}
|
||||
return violations
|
||||
}
|
||||
|
||||
func validRunControlStatus(status domain.RunEndpointStatus) bool {
|
||||
switch status {
|
||||
case domain.RunEndpointStatusOnline, domain.RunEndpointStatusDegraded, domain.RunEndpointStatusOffline:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user