zookeeper/http.go

113 lines
2.5 KiB
Go
Raw Normal View History

2025-02-15 09:11:45 -06:00
// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
// Use of this source code is governed by the GPL 3.0
2024-11-15 18:49:52 -06:00
package main
import (
"fmt"
"io/ioutil"
"net/http"
"strings"
"go.wit.com/lib/protobuf/zoopb"
2024-11-15 18:49:52 -06:00
"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)
2024-11-15 18:49:52 -06:00
route := cleanURL(r.URL.Path)
2024-11-15 19:24:57 -06:00
hostname := r.URL.Query().Get("hostname")
flag := r.URL.Query().Get("flag")
2025-03-12 13:16:05 -05:00
// packname := r.URL.Query().Get("package")
// version := r.URL.Query().Get("version")
2024-11-15 18:49:52 -06:00
msg, err := ioutil.ReadAll(r.Body) // Read the body as []byte
if err != nil {
2024-11-15 19:24:57 -06:00
log.Info("ReadAll() error =", err)
2024-11-15 18:49:52 -06:00
return
}
if route == "/" {
return
}
2024-11-15 20:59:23 -06:00
if route == "/machine" {
2025-02-16 12:02:09 -06:00
handleMachine(r, w, hostname, msg)
return
2024-11-15 20:59:23 -06:00
}
2024-11-15 19:24:57 -06:00
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")
2024-11-15 20:59:23 -06:00
fmt.Fprintln(w, "upgrade")
2024-11-15 18:49:52 -06:00
return
}
// list out the machines and thier version of zood
if route == "/list" {
log.HttpMode(w)
defer log.HttpMode(nil)
2024-12-04 02:25:46 -06:00
loop := me.machines.SortByHostname()
for loop.Scan() {
2024-12-04 02:25:46 -06:00
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
}
// toggle logging flags
if route == "/flag" {
log.HttpMode(w)
defer log.HttpMode(nil)
log.Info("going to toggle flag:", flag)
switch flag {
case "ZOOD":
2025-02-07 04:41:04 -06:00
if ZOOD.Enabled() {
log.Log(NOW, "toogle ZOOD false")
ZOOD.SetBool(false)
} else {
log.Log(NOW, "toogle ZOOD true")
ZOOD.SetBool(true)
}
default:
log.Info("unknown looging flag:", flag)
}
return
}
2024-11-15 18:49:52 -06:00
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)
}
}