cml04-printer-robot/internal/app/app.go
aespinro 9dd32799d1 wip
2024-08-19 16:22:35 +02:00

61 lines
1.3 KiB
Go

package app
import (
"flag"
"os"
"os/signal"
"syscall"
"git.espin.casa/albert/cml04-printer-robot/internal/logging"
"git.espin.casa/albert/cml04-printer-robot/internal/service"
"git.espin.casa/albert/logger"
)
func Run() error {
// flags
bindAddr := flag.String("addr", "localhost:3333", "API server address")
logLevel := flag.String("level", "debug", "log level")
// parse flags
flag.Parse()
// setup logger
log := logger.New(os.Stdout, *logLevel)
// create log fields
logFields := logger.LogFields{
"app_name": "cml04-printer-robot",
"debug_legel": *logLevel,
"l2_bind_address": *bindAddr,
}
// create main service
svc := service.NewService(broker)
// add logging capabilities to main service
svc = logging.NewLoggingService(svc, log)
// start banner
log.Info("cml04 printer robot service started", logFields)
// 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
}
}
}