package main import ( "context" "log" "net/http" "os" "os/signal" "syscall" "time" "git.nixc.us/a250/ss-atlas/internal/config" "git.nixc.us/a250/ss-atlas/internal/handlers" "git.nixc.us/a250/ss-atlas/internal/ldap" ssstripe "git.nixc.us/a250/ss-atlas/internal/stripe" "git.nixc.us/a250/ss-atlas/internal/swarm" "git.nixc.us/a250/ss-atlas/internal/version" ) func main() { log.Printf("ss-atlas %s", version.String()) cfg := config.Load() stripeClient := ssstripe.New(cfg) ldapClient := ldap.New(cfg) swarmClient := swarm.New(cfg) router := handlers.NewRouter(cfg, stripeClient, ldapClient, swarmClient) srv := &http.Server{ Addr: ":" + cfg.Port, Handler: router, ReadTimeout: 15 * time.Second, WriteTimeout: 15 * time.Second, IdleTimeout: 60 * time.Second, } go func() { log.Printf("ss-atlas listening on :%s", cfg.Port) if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("server error: %v", err) } }() quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit log.Println("shutting down...") ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() if err := srv.Shutdown(ctx); err != nil { log.Fatalf("forced shutdown: %v", err) } }