61 lines
1.3 KiB
Go
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
|
|
}
|
|
}
|
|
}
|