zookeeper/http.go

117 lines
2.6 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/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")
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
}
/*
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
}
*/
2024-11-15 18:49:52 -06:00
// 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
}
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)
}
}