package main import ( "context" "log" "net/http" "os" "os/signal" "time" "gitea.avt.data-center.id/othman.suseno/atlas/internal/httpapp" ) func main() { addr := env("PLUTO_HTTP_ADDR", ":8080") app, err := httpapp.New(httpapp.Config{ Addr: addr, TemplatesDir: "web/templates", StaticDir: "web/static", }) if err != nil { log.Fatalf("init app: %v", err) } srv := &http.Server{ Addr: addr, Handler: app.Router(), ReadHeaderTimeout: 5 * time.Second, } // Start server go func() { log.Printf("[pluto-api] listening on %s", addr) if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("listen: %v", err) } }() // Graceful shutdown stop := make(chan os.Signal, 1) signal.Notify(stop, os.Interrupt) <-stop log.Printf("[pluto-api] shutdown requested") ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() if err := srv.Shutdown(ctx); err != nil { log.Printf("[pluto-api] shutdown error: %v", err) } else { log.Printf("[pluto-api] shutdown complete") } } func env(key, def string) string { if v := os.Getenv(key); v != "" { return v } return def }