robocar-base/cli/cli.go

49 lines
817 B
Go

package cli
import (
"log"
"os"
"os/signal"
"strconv"
"syscall"
)
func SetDefaultValueFromEnv(value *string, key string, defaultValue string) {
if os.Getenv(key) != "" {
*value = os.Getenv(key)
} else {
*value = defaultValue
}
}
func SetIntDefaultValueFromEnv(value *int, key string, defaultValue int) error {
var sVal string
if os.Getenv(key) != "" {
sVal = os.Getenv(key)
val, err := strconv.Atoi(sVal)
if err != nil {
log.Printf("unable to convert string to int: %v", err)
return err
}
*value = val
} else {
*value = defaultValue
}
return nil
}
type Part interface {
Start() error
Stop()
}
func HandleExit(p Part) {
signals := make(chan os.Signal, 1)
signal.Notify(signals, os.Kill, os.Interrupt, syscall.SIGTERM)
go func() {
<-signals
p.Stop()
os.Exit(0)
}()
}