54 lines
994 B
Go
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
|
|
}
|
|
}
|
|
}
|