package main import ( "context" "flag" "go/weather/internal/web" "go/weather/pkg/logger" "log" "os" "os/signal" "time" "go.uber.org/zap" ) const ( apiPrefix = "/api" apiRouterName = "api" ) func main() { var wait time.Duration flag.DurationVar(&wait, "graceful-timeout", time.Second*15, "the duration for which the server gracefully wait for existing connections to finish - e.g. 15s or 1m") flag.Parse() //logger loggerLevel := zap.NewAtomicLevel() defaultLogger := logger.NewLogger("default", "weather.log", loggerLevel) defer defaultLogger.Sync() //http addr := web.NewListenAddr("127.0.0.1", 8080) defaultLogger.Sugar().Infof("Weather server is listening on %s", addr) server := web.New(defaultLogger, addr). WithTLSConfigure(). WithHandler(). WithHTTPLogging(). WithErrorLogging() go func() { if err := server.Serve(); err != nil { defaultLogger.Sugar().Info(err) } }() c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) <-c ctx, cancel := context.WithTimeout(context.Background(), wait) defer cancel() server.Shutdown(ctx) log.Println("shutting down") os.Exit(0) }