lyrics

lyrics
git clone git://brookjeynes.dev/bjeynes/lyrics.git
Log | Files | Refs

main.go (1085B)


      1 package main
      2 
      3 import (
      4 	"context"
      5 	"lyrics/internal/config"
      6 	"lyrics/internal/log"
      7 	"lyrics/internal/server"
      8 	"net/http"
      9 	"os"
     10 	"time"
     11 )
     12 
     13 func main() {
     14 	ctx := context.Background()
     15 	logger := log.New("appview")
     16 	ctx = log.IntoContext(ctx, logger)
     17 
     18 	config, err := config.LoadConfig(ctx)
     19 	if err != nil {
     20 		logger.Error("failed to load config", "err", err)
     21 		os.Exit(1)
     22 	}
     23 
     24 	state, err := server.New(ctx, config)
     25 	if err != nil {
     26 		logger.Error("failed to start server", "err", err)
     27 		os.Exit(1)
     28 	}
     29 	defer func() {
     30 		if err := state.Close(); err != nil {
     31 			logger.Error("failed to close state", "err", err)
     32 		}
     33 	}()
     34 
     35 	logger.Info("Starting server", "addr", config.Core.ListenAddr)
     36 
     37 	srv := &http.Server{
     38 		Addr:              config.Core.ListenAddr,
     39 		Handler:           state.Router(),
     40 		ReadHeaderTimeout: 5 * time.Second,
     41 		ReadTimeout:       10 * time.Second,
     42 		WriteTimeout:      30 * time.Second,
     43 		IdleTimeout:       120 * time.Second,
     44 	}
     45 
     46 	err = srv.ListenAndServe()
     47 	if err != nil {
     48 		logger.Error("failed to start server", "err", err)
     49 	}
     50 
     51 	logger.Info("Shutdown complete.")
     52 }