2b2t-queue-tracker/worker/main.go
2025-06-29 12:42:19 +02:00

77 lines
1.8 KiB
Go

package main
import (
"log"
"os"
"os/signal"
"sync"
"git.1e99.eu/1e99/2b2t/models"
)
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 models.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
}
}