package main import ( "context" "fmt" "net/http" "os" "os/signal" "git.licolas.net/hoffman/server/api" "git.licolas.net/hoffman/server/database" "git.licolas.net/hoffman/server/logger" "git.licolas.net/hoffman/server/logic" "github.com/gorilla/mux" "github.com/rs/zerolog" ) func main() { logger.Setup() logger.SetLogLevel(zerolog.DebugLevel) logger := logger.GetLogger("main") logger.Info().Msg("starting hoffman-server") logger.Debug().Msg("connecting to datasource") dsrc, err := database.Connect("./db.db") if err != nil { logger.Fatal().Err(err) os.Exit(1) } logger.Debug().Msg("fetching logic") lgc := logic.UseDatasource(dsrc) logger.Debug().Msg("setting http server routes") router := mux.NewRouter() apiRouter := router.PathPrefix("/api").Subrouter() api.SetLogicProvider(lgc) api.SetRoutes(apiRouter) srv := &http.Server{ Addr: "[::1]:8080", Handler: router, } logger.Info().Str("addr", srv.Addr).Msg("starting http server") go func() { if err := srv.ListenAndServe(); err != nil { logger.Error().Err(err) } }() c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) <-c fmt.Println() ctx, cancel := context.WithTimeout(context.Background(), 10) defer cancel() logger.Info().Msg("shutting down") srv.Shutdown(ctx) dsrc.Disconnect() }