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