go-telecom/internal/core/core.go
2025-04-30 20:59:07 +02:00

54 lines
994 B
Go

package core
import (
"os"
"os/signal"
"syscall"
"git.espin.casa/albert/go-telecom/internal/trace"
"github.com/spf13/cobra"
)
func Run(cmd *cobra.Command, args []string) {
tp, err := trace.InitTrace()
if err != nil {
panic(err)
}
defer func() {
if err := tp.Shutdown(cmd.Context()); err != nil {
panic(err)
}
}()
// wait signal to finish
signal := WaitSignal()
switch signal {
case syscall.SIGINT:
cmd.Println("Received SIGINT, shutting down...")
case syscall.SIGQUIT:
cmd.Println("Received SIGQUIT, shutting down...")
case syscall.SIGTERM:
cmd.Println("Received SIGTERM, shutting down...")
default:
cmd.Println("Received unknown signal, shutting down...")
}
}
// 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
}
}
}