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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|