diff --git a/src/api/api.go b/src/api/api.go index 063d5d6..371e514 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -347,6 +347,12 @@ func runSignalCli(wait bool, args []string, stdin string) (string, error) { log.Debug("*) su signal-api") log.Debug("*) ", fullCmd) + cmdTimeout, err := utils.GetIntEnv("SIGNAL_CLI_CMD_TIMEOUT", 60) + if err != nil { + log.Error("Env variable 'SIGNAL_CLI_CMD_TIMEOUT' contains an invalid timeout...falling back to default timeout (60 seconds)") + cmdTimeout = 60 + } + cmd := exec.Command(signalCliBinary, args...) if stdin != "" { cmd.Stdin = strings.NewReader(stdin) @@ -367,7 +373,7 @@ func runSignalCli(wait bool, args []string, stdin string) (string, error) { done <- cmd.Wait() }() select { - case <-time.After(60 * time.Second): + case <-time.After(time.Duration(cmdTimeout) * time.Second): err := cmd.Process.Kill() if err != nil { return "", err diff --git a/src/utils/utils.go b/src/utils/utils.go index 14087bf..9616c75 100644 --- a/src/utils/utils.go +++ b/src/utils/utils.go @@ -2,6 +2,7 @@ package utils import ( "os" + "strconv" ) func GetEnv(key string, defaultVal string) string { @@ -10,3 +11,14 @@ func GetEnv(key string, defaultVal string) string { } return defaultVal } + +func GetIntEnv(key string, defaultVal int) (int, error) { + if value, exists := os.LookupEnv(key); exists { + intValue, err := strconv.Atoi(value) + if err != nil { + return 0, err + } + return intValue, nil + } + return defaultVal, nil +}