package main import ( "context" "errors" "log/slog" "net/http" "os" "os/signal" "syscall" "github.com/Wei-Shaw/sub2api/internal/pkg/lspool" ) func main() { server, err := lspool.NewWorkerServerFromEnv() if err != nil { slog.Error("failed to initialize lsworker", "err", err) os.Exit(1) } defer server.Close() httpServer := &http.Server{ Addr: envOrDefault("LSWORKER_LISTEN_ADDR", "0.0.0.0:18081"), Handler: server.Handler(), ReadHeaderTimeout: 10 * 1e9, } ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() go func() { <-ctx.Done() _ = httpServer.Shutdown(context.Background()) }() slog.Info("lsworker listening", "addr", httpServer.Addr) if err := httpServer.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { slog.Error("lsworker exited with error", "err", err) os.Exit(1) } } func envOrDefault(key, fallback string) string { if value := os.Getenv(key); value != "" { return value } return fallback }