feat: runtime manager
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"galaxy/lobby/internal/domain/engineimage"
|
||||
"galaxy/lobby/internal/telemetry"
|
||||
"galaxy/postgres"
|
||||
"galaxy/redisconn"
|
||||
@@ -49,6 +50,8 @@ const (
|
||||
raceNameDirectoryBackendEnvVar = "LOBBY_RACE_NAME_DIRECTORY_BACKEND"
|
||||
raceNameExpirationIntervalEnvVar = "LOBBY_RACE_NAME_EXPIRATION_INTERVAL"
|
||||
|
||||
engineImageTemplateEnvVar = "LOBBY_ENGINE_IMAGE_TEMPLATE"
|
||||
|
||||
otelServiceNameEnvVar = "OTEL_SERVICE_NAME"
|
||||
otelTracesExporterEnvVar = "OTEL_TRACES_EXPORTER"
|
||||
otelMetricsExporterEnvVar = "OTEL_METRICS_EXPORTER"
|
||||
@@ -78,6 +81,7 @@ const (
|
||||
defaultGMTimeout = 5 * time.Second
|
||||
defaultEnrollmentAutomationInterval = 30 * time.Second
|
||||
defaultRaceNameExpirationInterval = time.Hour
|
||||
defaultEngineImageTemplate = "galaxy/game:" + engineimage.VersionPlaceholder
|
||||
defaultOTelServiceName = "galaxy-lobby"
|
||||
|
||||
// RaceNameDirectoryBackendPostgres selects the PostgreSQL-backed
|
||||
@@ -134,6 +138,9 @@ type Config struct {
|
||||
// every pending_registration whose eligible_until has passed.
|
||||
PendingRegistration PendingRegistrationConfig
|
||||
|
||||
// RuntimeManager configures the Runtime Manager publisher contract.
|
||||
RuntimeManager RuntimeManagerConfig
|
||||
|
||||
// Telemetry configures the process-wide OpenTelemetry runtime.
|
||||
Telemetry TelemetryConfig
|
||||
}
|
||||
@@ -410,6 +417,27 @@ func (cfg PendingRegistrationConfig) Validate() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// RuntimeManagerConfig configures the Lobby-side Runtime Manager
|
||||
// publisher contract. Lobby resolves the Docker image reference it
|
||||
// publishes on `runtime:start_jobs` from a per-game
|
||||
// `target_engine_version` and the configured EngineImageTemplate.
|
||||
type RuntimeManagerConfig struct {
|
||||
// EngineImageTemplate stores the Docker reference template applied
|
||||
// to a game's `target_engine_version`. The string must contain the
|
||||
// literal placeholder `{engine_version}`; Lobby fails fast at
|
||||
// startup otherwise.
|
||||
EngineImageTemplate string
|
||||
}
|
||||
|
||||
// Validate reports whether cfg stores a usable Runtime Manager
|
||||
// publisher configuration.
|
||||
func (cfg RuntimeManagerConfig) Validate() error {
|
||||
if _, err := engineimage.NewResolver(cfg.EngineImageTemplate); err != nil {
|
||||
return fmt.Errorf("engine image template: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// TelemetryConfig configures the Game Lobby Service OpenTelemetry runtime.
|
||||
type TelemetryConfig struct {
|
||||
// ServiceName overrides the default OpenTelemetry service name.
|
||||
@@ -504,6 +532,9 @@ func DefaultConfig() Config {
|
||||
PendingRegistration: PendingRegistrationConfig{
|
||||
Interval: defaultRaceNameExpirationInterval,
|
||||
},
|
||||
RuntimeManager: RuntimeManagerConfig{
|
||||
EngineImageTemplate: defaultEngineImageTemplate,
|
||||
},
|
||||
Telemetry: TelemetryConfig{
|
||||
ServiceName: defaultOTelServiceName,
|
||||
TracesExporter: "none",
|
||||
|
||||
Reference in New Issue
Block a user