cml04-mediciones/internal/app/app.go

75 lines
1.8 KiB
Go
Raw Normal View History

2024-08-20 09:11:15 +02:00
package app
import (
"flag"
"net/http"
"os"
"os/signal"
"syscall"
"git.espin.casa/albert/cml04-mediciones/internal/client"
"git.espin.casa/albert/cml04-mediciones/internal/routes"
"git.espin.casa/albert/logger"
"github.com/julienschmidt/httprouter"
)
func Run() error {
// setup flags
httpAddr := flag.String("bind-addr", "0.0.0.0:9100", "HTTP server address")
2024-10-22 14:53:46 +02:00
//apiAddr := flag.String("api-addr", "mediciones-service", "REST API server address")
//apiPort := flag.Int("api-port", 3000, "REST API server port")
apiAddr := flag.String("api-addr", "10.1.152.13", "REST API server address")
apiPort := flag.Int("api-port", 9210, "REST API server port")
2024-08-20 09:11:15 +02:00
logLevel := flag.String("level", "debug", "Log level")
flag.Parse()
// setup logger
log := logger.New(os.Stdout, *logLevel)
// create router
router := httprouter.New()
// create api client
client := client.NewClient(&client.ClientConfig{
Host: *apiAddr,
Port: *apiPort,
Base: "api/v1",
})
// create routes
routes.CreateRoutes(router, client)
// serve static files
router.ServeFiles("/assets/*filepath", http.Dir("assets"))
// start the http server
go func() {
http.ListenAndServe(*httpAddr, router)
}()
// info banner
log.Info("started cml04-mediciones service", logger.LogFields{
"http_bind_address": *httpAddr,
"api_address": *apiAddr,
"api_port": *apiPort,
"log_level": *logLevel,
})
// wait signal to finish
signal := WaitSignal()
log.Info("signal received", 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
}
}
}