mercadona/cmd/mercadona.go
2025-03-02 14:10:17 +01:00

62 lines
1.2 KiB
Go

package cmd
import (
"flag"
"net/http"
"os"
"os/signal"
"syscall"
"github.com/julienschmidt/httprouter"
"git.espin.casa/albert/logger"
"git.espin.casa/albert/mercadona/internal/client"
"git.espin.casa/albert/mercadona/internal/routes"
)
func Run() error {
// setup flags
apiAddr := flag.String("api-addr", "localhost:3000", "REST API server address")
logLevel := flag.String("level", "debug", "Log level")
flag.Parse()
// logfields
logFields := logger.LogFields{}
// setup logger
log := logger.New(os.Stdout, *logLevel)
// create router
router := httprouter.New()
client := client.NewClient()
routes.CreateRoutes(router, client)
// start http server
go func() {
http.ListenAndServe(*apiAddr, router)
}()
// info banner
log.Info("started Mercadona api service", logFields)
// wait signal to finish
signal := WaitSignal()
log.Info("signal received", logFields.Add(logger.LogFields{
"signal": signal,
}))
return nil
}
// WaitSignal catching exit signal
func WaitSignal() os.Signal {
ch := make(chan os.Signal, 2)
signal.Notify(
ch,
syscall.SIGINT,
syscall.SIGQUIT,
syscall.SIGTERM,
)
for {
sig := <-ch
switch sig {
case syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM:
return sig
}
}
}