94 lines
1.8 KiB
Go
94 lines
1.8 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"net"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
// Validate reports whether cfg stores a usable Runtime Manager process
|
|
// configuration.
|
|
func (cfg Config) Validate() error {
|
|
if cfg.ShutdownTimeout <= 0 {
|
|
return fmt.Errorf("%s must be positive", shutdownTimeoutEnvVar)
|
|
}
|
|
if err := validateSlogLevel(cfg.Logging.Level); err != nil {
|
|
return fmt.Errorf("%s: %w", logLevelEnvVar, err)
|
|
}
|
|
if err := cfg.InternalHTTP.Validate(); err != nil {
|
|
return err
|
|
}
|
|
if err := cfg.Docker.Validate(); err != nil {
|
|
return err
|
|
}
|
|
if err := cfg.Postgres.Validate(); err != nil {
|
|
return err
|
|
}
|
|
if err := cfg.Redis.Validate(); err != nil {
|
|
return err
|
|
}
|
|
if err := cfg.Streams.Validate(); err != nil {
|
|
return err
|
|
}
|
|
if err := cfg.Container.Validate(); err != nil {
|
|
return err
|
|
}
|
|
if err := cfg.Health.Validate(); err != nil {
|
|
return err
|
|
}
|
|
if err := cfg.Cleanup.Validate(); err != nil {
|
|
return err
|
|
}
|
|
if err := cfg.Coordination.Validate(); err != nil {
|
|
return err
|
|
}
|
|
if err := cfg.Lobby.Validate(); err != nil {
|
|
return err
|
|
}
|
|
if err := cfg.Telemetry.Validate(); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func validateSlogLevel(level string) error {
|
|
var slogLevel slog.Level
|
|
if err := slogLevel.UnmarshalText([]byte(strings.TrimSpace(level))); err != nil {
|
|
return fmt.Errorf("invalid slog level %q: %w", level, err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func isTCPAddr(value string) bool {
|
|
host, port, err := net.SplitHostPort(strings.TrimSpace(value))
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
if port == "" {
|
|
return false
|
|
}
|
|
if host == "" {
|
|
return true
|
|
}
|
|
|
|
return !strings.Contains(host, " ")
|
|
}
|
|
|
|
func isHTTPURL(value string) bool {
|
|
parsed, err := url.Parse(strings.TrimSpace(value))
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
if parsed.Scheme != "http" && parsed.Scheme != "https" {
|
|
return false
|
|
}
|
|
|
|
return parsed.Host != ""
|
|
}
|