cml04-falcon-system/labeler/app/app.go

83 lines
1.9 KiB
Go
Raw Normal View History

2024-10-21 21:03:22 +02:00
package app
import (
2024-10-21 21:49:06 +02:00
"context"
2024-10-21 21:03:22 +02:00
"os"
"os/signal"
"syscall"
2024-10-21 21:49:06 +02:00
"git.espin.casa/albert/cml04-falcon-system/labeler/server"
2024-10-21 21:03:22 +02:00
"git.espin.casa/albert/cml04-falcon-system/labeler/service"
"git.espin.casa/albert/logger"
"github.com/spf13/cobra"
)
func Run(cmd *cobra.Command, args []string) {
// read flags
logLevel, _ := cmd.Flags().GetString("log-level")
2024-10-22 09:56:39 +02:00
bindAddr, _ := cmd.Flags().GetString("bind-addr")
2024-10-21 21:03:22 +02:00
userName, _ := cmd.Flags().GetString("db-username")
userPass, _ := cmd.Flags().GetString("db-password")
dbHost, _ := cmd.Flags().GetString("db-host")
dbPort, _ := cmd.Flags().GetInt("db-port")
dbName, _ := cmd.Flags().GetString("db-name")
natsHost, _ := cmd.Flags().GetString("nats-host")
natsPort, _ := cmd.Flags().GetInt("nats-port")
2024-10-21 21:49:06 +02:00
// create context
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
2024-10-21 21:03:22 +02:00
// setup logger
log := logger.New(os.Stdout, logLevel)
// log fields
logFields := logger.LogFields{
"nats_host": natsHost,
"nats_port": natsPort,
"log_level": logLevel,
}
// create service
svc, err := service.New(&service.DBConfig{
Username: userName,
Password: userPass,
Host: dbHost,
Port: dbPort,
Name: dbName,
}, &service.NATSconfig{
Host: natsHost,
Port: natsPort,
})
2024-10-21 21:49:06 +02:00
// check error
2024-10-21 21:03:22 +02:00
if err != nil {
log.Error("create service failed", err, logFields)
return
}
2024-10-21 21:49:06 +02:00
defer svc.Close(ctx)
// create server
2024-10-22 09:56:39 +02:00
server := server.New(bindAddr, svc, log)
2024-10-22 17:34:07 +02:00
go server.Run()
2024-10-21 21:03:22 +02:00
// info banner
log.Info("started cml04-falcon-labeler service", logFields)
// wait signal to finish
signal := WaitSignal()
log.Info("signal received", logFields.Add(logger.LogFields{
"signal": signal,
}))
}
// 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
}
}
}