"go.fuhry.dev/runtime/machines"
"go.fuhry.dev/runtime/metrics/metricbus/mbclient"
+ "go.fuhry.dev/runtime/utils/daemon"
"go.fuhry.dev/runtime/utils/log"
)
return
}
- ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
+ err = daemon.Detach()
+ if err != nil {
+ logger.Errorf("failed to daemonize: %v", err)
+ }
+
+ shutdownChan := make(chan struct{}, 1)
+ defer (func() { shutdownChan <- struct{}{} })()
+
+ if err = daemon.WritePidFile(); err != nil {
+ logger.Errorf("failed to write pid file: %v", err)
+ } else {
+ defer daemon.CleanupPidFile()
+ }
+
+ ctx, cancel := context.WithCancel(context.Background())
defer cancel()
+ signalChan := make(chan os.Signal, 1)
+ signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
+ go (func() {
+ for sig := range signalChan {
+ logger.Criticalf("Received signal: %d, %s", sig, sig.String())
+ cancel()
+ <-shutdownChan
+ os.Exit(0)
+ }
+ })()
+
metrics := mbclient.NewService(ctx)
eventsProcessed := metrics.DefineCounter("machines_agent_events",
cancel()
}
- logger.Info("successfully created event monitor, listening for events")
+ logger.Noticef("starting main event loop")
+ defer logger.Critical("stopping xx0r-machines-agent")
+
mainLoop:
for {
select {