diff --git a/watchdog/main.go b/watchdog/main.go index dfcde9a2b01ea8d964bea236a915bde14c64c6b0..9ecf1fec6d642ccd27db9f223799d3cab327facd 100644 --- a/watchdog/main.go +++ b/watchdog/main.go @@ -7,23 +7,53 @@ import ( "net/http" "os" "os/exec" + "strconv" "strings" "time" ) func main() { + readTimeoutStr := os.Getenv("read_timeout") + writeTimeoutStr := os.Getenv("write_timeout") + writeDebugStr := os.Getenv("write_debug") + process := os.Getenv("fprocess") + + readTimeout := 5 * time.Second + writeTimeout := 5 * time.Second + writeDebug := true + + if len(process) == 0 { + log.Panicln("Provide a valid process via fprocess environmental variable.") + return + } + + if len(writeDebugStr) > 0 && writeDebugStr == "false" { + writeDebug = false + } + + if len(readTimeoutStr) > 0 { + parsedVal, parseErr := strconv.Atoi(readTimeoutStr) + if parseErr == nil && parsedVal > 0 { + readTimeout = time.Duration(parsedVal) * time.Second + } + } + + if len(writeTimeoutStr) > 0 { + parsedVal, parseErr := strconv.Atoi(writeTimeoutStr) + if parseErr == nil && parsedVal > 0 { + writeTimeout = time.Duration(parsedVal) * time.Second + } + } + s := &http.Server{ Addr: ":8080", - ReadTimeout: 5 * time.Second, - WriteTimeout: 5 * time.Second, + ReadTimeout: readTimeout, + WriteTimeout: writeTimeout, MaxHeaderBytes: 1 << 20, } http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { if r.Method == "POST" { - - process := os.Getenv("fprocess") - parts := strings.Split(process, " ") targetCmd := exec.Command(parts[0], parts[1:]...) @@ -34,10 +64,13 @@ func main() { writer.Write(res) writer.Close() - out, err := targetCmd.Output() - targetCmd.CombinedOutput() + out, err := targetCmd.CombinedOutput() + if err != nil { - log.Println(targetCmd, err) + if writeDebug == true { + log.Println(targetCmd, err) + } + w.WriteHeader(500) response := bytes.NewBufferString(err.Error()) w.Write(response.Bytes()) @@ -45,8 +78,10 @@ func main() { } w.WriteHeader(200) - // TODO: consider stdout to container as configurable via env-variable. - os.Stdout.Write(out) + if writeDebug == true { + os.Stdout.Write(out) + } + w.Write(out) } })