in Stable-Diffusion-UI-Agones/agones-sidecar/main.go [39:141]
func main() {
sigCtx, _ := signals.NewSigKillContext()
port := flag.String("port", "7654", "The port to listen to traffic on")
passthrough := flag.Bool("passthrough", false, "Get listening port from the SDK, rather than use the 'port' value")
readyOnStart := flag.Bool("ready", true, "Mark this GameServer as Ready on startup")
shutdownDelayMin := flag.Int("automaticShutdownDelayMin", 0, "[Deprecated] If greater than zero, automatically shut down the server this many minutes after the server becomes allocated (please use automaticShutdownDelaySec instead)")
shutdownDelaySec := flag.Int("automaticShutdownDelaySec", 0, "If greater than zero, automatically shut down the server this many seconds after the server becomes allocated (cannot be used if automaticShutdownDelayMin is set)")
readyDelaySec := flag.Int("readyDelaySec", 0, "If greater than zero, wait this many seconds each time before marking the game server as ready")
readyIterations := flag.Int("readyIterations", 0, "If greater than zero, return to a ready state this number of times before shutting down")
udp := flag.Bool("udp", true, "Server will listen on UDP")
tcp := flag.Bool("tcp", false, "Server will listen on TCP")
flag.Parse()
if ep := os.Getenv("PORT"); ep != "" {
port = &ep
}
if epass := os.Getenv("PASSTHROUGH"); epass != "" {
p := strings.ToUpper(epass) == "TRUE"
passthrough = &p
}
if eready := os.Getenv("READY"); eready != "" {
r := strings.ToUpper(eready) == "TRUE"
readyOnStart = &r
}
if eudp := os.Getenv("UDP"); eudp != "" {
u := strings.ToUpper(eudp) == "TRUE"
udp = &u
}
if etcp := os.Getenv("TCP"); etcp != "" {
t := strings.ToUpper(etcp) == "TRUE"
tcp = &t
}
// Check for incompatible flags.
if *shutdownDelayMin > 0 && *shutdownDelaySec > 0 {
log.Fatalf("Cannot set both --automaticShutdownDelayMin and --automaticShutdownDelaySec")
}
if *readyIterations > 0 && *shutdownDelayMin <= 0 && *shutdownDelaySec <= 0 {
log.Fatalf("Must set a shutdown delay if using ready iterations")
}
log.Print("Creating SDK instance")
s, err := sdk.NewSDK()
if err != nil {
log.Fatalf("Could not connect to sdk: %v", err)
}
log.Print("Starting Health Ping")
ctx, cancel := context.WithCancel(context.Background())
go doHealth(s, ctx)
if *passthrough {
var gs *coresdk.GameServer
gs, err = s.GameServer()
if err != nil {
log.Fatalf("Could not get gameserver port details: %s", err)
}
p := strconv.FormatInt(int64(gs.Status.Ports[0].Port), 10)
port = &p
}
if *tcp {
go tcpListener(port, s, cancel)
}
if *udp {
go udpListener(port, s, cancel)
}
if *shutdownDelaySec > 0 {
shutdownAfterNAllocations(s, *readyIterations, *shutdownDelaySec)
} else if *shutdownDelayMin > 0 {
shutdownAfterNAllocations(s, *readyIterations, *shutdownDelayMin*60)
}
if *readyOnStart {
if *readyDelaySec > 0 {
log.Printf("Waiting %d seconds before moving to ready", *readyDelaySec)
time.Sleep(time.Duration(*readyDelaySec) * time.Second)
}
for {
r, err := http.Get("http://127.0.0.1:7860")
if err != nil {
log.Print("SD-WebUI not ready yet")
time.Sleep(2 * time.Second)
continue
}
if r.StatusCode != 200 {
log.Print("SD-WebUI not ready yet")
time.Sleep(2 * time.Second)
continue
}
break
}
log.Print("Marking this server as ready")
ready(s)
}
<-sigCtx.Done()
os.Exit(0)
}