Files
homelab-frontend/cmd/gateway/main.go
T

87 lines
2.1 KiB
Go
Raw Normal View History

2026-08-19 20:52:13 -07:00
package main
import (
"fmt"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"time"
"forgejo.riotpiao.com/rock/homelab-frontend/internal/config"
"forgejo.riotpiao.com/rock/homelab-frontend/internal/proxy"
"forgejo.riotpiao.com/rock/homelab-frontend/internal/server"
"forgejo.riotpiao.com/rock/homelab-frontend/internal/serviceadapter"
"forgejo.riotpiao.com/rock/homelab-frontend/internal/temporal"
2026-08-19 20:52:13 -07:00
)
func main() {
cfg, err := config.Load()
if err != nil {
fmt.Fprintf(os.Stderr, "failed to load config: %v\n", err)
os.Exit(1)
}
authEnabled := false
for _, route := range cfg.Routes {
if route.Upstream.AuthRequired {
authEnabled = true
break
}
}
upstreamHandler := proxy.New(cfg)
2026-08-19 20:52:13 -07:00
temporalHostPort := os.Getenv("TEMPORAL_HOST_PORT")
if temporalHostPort == "" {
temporalHostPort = "localhost:7233"
}
log.Printf("Temporal server: %s", temporalHostPort)
temporalHandler := temporal.NewHandler(temporalHostPort)
2026-08-19 20:52:13 -07:00
srv := server.New(cfg.ListenAddr, cfg.ShutdownTimeout, nil)
healthChecker := server.NewHealthChecker(true, authEnabled)
srv.SetHealthChecker(healthChecker)
// ServiceAdapter: registry + loader + dispatcher
registry := serviceadapter.NewRegistry(nil)
dispatcher := serviceadapter.NewDispatcher(registry)
var loader *serviceadapter.Loader
if l, err := serviceadapter.NewLoader(registry, "api"); err != nil {
log.Printf("ServiceAdapter loader disabled: %v", err)
} else {
l.Start(30 * time.Second)
loader = l
log.Printf("ServiceAdapter loader started (background)")
}
router := server.NewRouter(healthChecker, dispatcher, temporalHandler, upstreamHandler)
2026-08-19 20:52:13 -07:00
srv.SetHandler(router)
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGTERM, syscall.SIGINT)
go func() {
log.Printf("gateway listening on %s", srv.Addr())
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Printf("server error: %v", err)
2026-08-19 20:52:13 -07:00
}
}()
sig := <-sigChan
log.Printf("received signal: %v", sig)
if loader != nil {
loader.Stop()
}
if err := srv.Shutdown(nil); err != nil {
2026-08-19 20:52:13 -07:00
fmt.Fprintf(os.Stderr, "shutdown error: %v\n", err)
os.Exit(1)
}
log.Printf("gateway shutdown complete")
}