monitor-player-count/main.go
2025-07-14 19:35:50 +02:00

75 lines
1.8 KiB
Go

package main
import (
"log"
"os"
"os/signal"
"sync"
)
func main() {
logger := log.New(os.Stdout, "", log.Flags())
logger.Printf(` ___ ____ ___ _______ __ __ _ _ `)
logger.Printf(`|__ \| _ \__ \__ __| | \/ | (_) | `)
logger.Printf(` ) | |_) | ) | | | | \ / | ___ _ __ _| |_ ___ _ __ `)
logger.Printf(` / /| _ < / / | | | |\/| |/ _ \| '_ \| | __/ _ \| '__|`)
logger.Printf(` / /_| |_) / /_ | | | | | | (_) | | | | | || (_) | | `)
logger.Printf(`|____|____/____| |_| |_| |_|\___/|_| |_|_|\__\___/|_| `)
logger.Printf(` `)
submitUrl, found := os.LookupEnv("WORKER_SUBMIT_URL")
if !found {
logger.Printf("No \"WORKER_SUBMIT_URL\", exiting")
os.Exit(1)
}
token, found := os.LookupEnv("WORKER_TOKEN")
if !found {
logger.Printf("No \"WORKER_TOKEN\", exiting")
os.Exit(1)
}
poller := makePoller(logger)
logger.Printf("Submitting data to %s", submitUrl)
logger.Printf("Using poller %s", poller)
logger.Printf("")
var wg sync.WaitGroup
stop := make(chan bool)
queue := make(chan PlayerCount, 1024)
go SubmitLoop(stop, &wg, queue, logger, submitUrl, token)
go PollLoop(stop, &wg, queue, logger, poller)
notify := make(chan os.Signal, 1)
signal.Notify(notify, os.Interrupt)
<-notify
close(stop)
wg.Wait()
}
func makePoller(logger *log.Logger) (poller Poller) {
pollerType, found := os.LookupEnv("WORKER_POLLER")
if !found {
logger.Printf("No \"WORKER_POLLER\", defaulting to \"mcapi\"")
pollerType = "mcapi"
}
switch pollerType {
case "dummy":
poller = &dummyPoller{}
return
case "mcapi":
poller = &mcApiPoller{
Address: "2b2t.org",
}
return
default:
logger.Printf("Invalid poller type")
os.Exit(1)
return
}
}