// 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" "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) hostname := r.URL.Query().Get("hostname") // flag := r.URL.Query().Get("flag") msg, err := ioutil.ReadAll(r.Body) // Read the body as []byte if err != nil { log.Info("ReadAll() error =", err) return } if route == "/" { return } if route == "/machine" { handleMachine(r, w, hostname, msg) return } /* if route == "/status" { var packs *zoopb.Packages packs = new(zoopb.Packages) if err := packs.Unmarshal(msg); err != nil { log.Info("/status proto.Unmarshal() failed on wire message len", len(msg), "from", hostname) return } log.Info("/status Unmarshal worked with msg len", len(msg), "from", hostname) log.Info("/status hostname", hostname, "has", packs.Len(), "packages installed") fmt.Fprintln(w, "upgrade") return } */ // list out the machines and thier version of zood /* if route == "/list" { log.HttpMode(w) defer log.HttpMode(nil) loop := me.machines.SortByHostname() for loop.Scan() { m := loop.Next() zood := m.Packages.FindByName("zood") v := me.targets["zood"] // this is the target version if zood == nil { log.Info("machine", m.Hostname, "does not have zood installed") } else { log.Info(fmt.Sprintf("zood version %s vs target version %s on machine %s", zood.Version, v, m.Hostname)) } } return } */ if route == "/uptime" { if me.zood == nil { fmt.Fprintf(w, "BAD zood == nil\n") return } var count int var bad int all := me.machines.All() for all.Scan() { m := all.Next() count += 1 if findVersion(m, "zood") != me.zood.version { bad += 1 } } if bad == 0 { fmt.Fprintf(w, "GOOD machine count=(%d) all machines are version %s\n", count, me.zood.version) } else { fmt.Fprintf(w, "BAD machine count=(%d) upgrade=(%d) to %s\n", count, bad, me.zood.version) } 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) } }