summaryrefslogtreecommitdiff
path: root/http.go
diff options
context:
space:
mode:
Diffstat (limited to 'http.go')
-rw-r--r--http.go95
1 files changed, 95 insertions, 0 deletions
diff --git a/http.go b/http.go
new file mode 100644
index 0000000..b884187
--- /dev/null
+++ b/http.go
@@ -0,0 +1,95 @@
+// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
+// Use of this source code is governed by the GPL 3.0
+
+package main
+
+import (
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "os"
+ "strings"
+
+ "go.wit.com/log"
+)
+
+// remove '?' part and trailing '/'
+func cleanURL(url string) string {
+ url = "/" + strings.Trim(url, "/")
+ return url
+}
+
+func okHandler(w http.ResponseWriter, r *http.Request) {
+ log.Info("Got URL Path: ", r.URL.Path)
+ route := cleanURL(r.URL.Path)
+
+ domname := r.URL.Query().Get("domain")
+ flag := r.URL.Query().Get("flag")
+
+ msg, err := ioutil.ReadAll(r.Body) // Read the body as []byte
+ if err != nil {
+ fmt.Fprintln(w, "ReadAll() error =", err)
+ return
+ }
+
+ log.Info("Got URL msg:", string(msg))
+ if route == "/" {
+ fmt.Fprintln(w, "OK")
+ return
+ }
+
+ // exit the virtigo daemon & have systemd restart it
+ // this can happen & when it does, access to
+ // to libvirtd will hang (aka: virsh list will hang)
+ // One way to trigger this is to not properly close
+ // domain sockets opened from go-qemu/hypervisor
+ // it's a good idea in any case so leave it here
+ if route == "/kill" {
+ log.Warn("KILLED")
+ fmt.Fprintln(w, "KILLED")
+ os.Exit(-1)
+ return
+ }
+
+ // curl http://localhost:2520/import?domain=foo.bar.com
+ if route == "/import" {
+ fmt.Fprint(w, "import domain:", domname)
+
+ return
+ }
+
+ // toggle logging flags
+ if route == "/flag" {
+ log.HttpMode(w)
+ defer log.HttpMode(nil)
+ log.Info("going to toggle flag:", flag)
+ switch flag {
+ case "PING":
+ if PING.Enabled() {
+ log.Log(NOW, "toogle PING false")
+ PING.SetBool(false)
+ } else {
+ log.Log(NOW, "toogle PING true")
+ PING.SetBool(true)
+ }
+ default:
+ log.Info("unknown looging flag:", flag)
+ }
+ return
+ }
+
+ log.Warn("BAD URL =", route)
+}
+
+// starts and sits waiting for HTTP requests
+func startHTTP() {
+ http.HandleFunc("/", okHandler)
+
+ p := fmt.Sprintf(":%d", argv.Port)
+ log.Println("Running on port", p)
+
+ err := http.ListenAndServe(p, nil)
+ if err != nil {
+ log.Println("Error starting server:", err)
+ }
+}