diff --git a/html/fruitvote/main.go b/html/fruitvote/main.go index 73c1c17..b41c88f 100644 --- a/html/fruitvote/main.go +++ b/html/fruitvote/main.go @@ -3,11 +3,14 @@ package main import ( "flag" "fmt" + "log" "net" "net/http" "os" "os/exec" + "os/signal" "strings" + "syscall" ) func indexHandler(w http.ResponseWriter, r *http.Request) { @@ -15,6 +18,11 @@ func indexHandler(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello, this is a Unix socket HTTP server in Go!")) } +func healthCheckHandler(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + w.Write([]byte("healthy")) +} + func main() { socketPath, users := getArgs() os.Remove(socketPath) @@ -24,6 +32,17 @@ func main() { panic(err) } os.Chmod(socketPath, 0700) + + sigc := make(chan os.Signal, 1) + signal.Notify(sigc, os.Interrupt, os.Kill, syscall.SIGTERM) + go func(c chan os.Signal) { + // Wait for a SIGINT or SIGKILL: + sig := <-c + log.Printf("Caught signal %s: shutting down.", sig) + + listener.Close() + os.Exit(0) + }(sigc) defer listener.Close() for _, user := range strings.Split(users, ",") { @@ -32,6 +51,7 @@ func main() { mux := http.NewServeMux() mux.HandleFunc("/", indexHandler) + mux.HandleFunc("/health", healthCheckHandler) http.Serve(listener, mux) } diff --git a/html/fruitvote/start.sh b/html/fruitvote/start.sh index 3c274a8..dd3036b 100755 --- a/html/fruitvote/start.sh +++ b/html/fruitvote/start.sh @@ -3,5 +3,5 @@ nice -n 19 /home/simponic/fruitvote/fruitvote \ --users simponic,nginx \ --socket-path /home/simponic/fruitvote/http.sock \ - --database /home/simponic/fruitvote/db.sqlite \ - & + & +# --database /home/simponic/fruitvote/db.sqlite \ diff --git a/html/public/fruitvote/GoPage.php b/html/public/fruitvote/GoPage.php index b6e205a..27fc361 100644 --- a/html/public/fruitvote/GoPage.php +++ b/html/public/fruitvote/GoPage.php @@ -29,53 +29,13 @@ class GoPage { public function go() { $ch = curl_init(); $url = "http://localhost".$this->page; - curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_UNIX_SOCKET_PATH, $this->socket); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - // forward headers - $headers = array(); - foreach ($_SERVER as $key => $value) { - if (substr($key, 0, 5) == "HTTP_") { - $key = str_replace(" ", "-", ucwords(strtolower(str_replace("_", " ", substr($key, 5))))); - $headers[] = "$key: $value"; - } - } - curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); - - // forward params depending on http method - if ($_SERVER['REQUEST_METHOD'] == "POST" || $_SERVER['REQUEST_METHOD'] == "PUT" || $_SERVER['REQUEST_METHOD'] == "DELETE") { - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents('php://input')); - } else { - $url .= "?".$_SERVER['QUERY_STRING']; - } - - // forward cookies - $cookie = array(); - foreach ($_COOKIE as $key => $value) { - $cookie[] = "$key=$value"; - } - $output = curl_exec($ch); curl_close($ch); - - // forward headers back to client - $headers = explode("\n", $output); - foreach ($headers as $header) { - if (strpos($header, "HTTP/") === false) { - header($header); - } - } - - // forward cookies back to client - $cookie = explode("\n", $output); - foreach ($cookie as $cookie) { - if (strpos($cookie, "Set-Cookie:") !== false) { - header($cookie); - } - } + // todo: get headers / cookies, forward back response return $output; }