zookeeper/http.go

95 lines
2.1 KiB
Go

// 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"
"net/http"
"time"
"go.wit.com/lib/protobuf/httppb"
"go.wit.com/log"
)
/*
if strings.HasPrefix(route, "/repos/") {
pb := gitpb.NewRepos()
if err := pb.Unmarshal(reqPB.ClientData); err == nil {
reqPB.Log("Repos Unmarshal() len=%d", pb.Len())
} else {
reqPB.Logf("Repos Unmarshal() err=%v", err)
}
result := gitpb.NewRepos()
switch route {
case "/repos/check":
result = addRequest(pb, reqPB)
reqPB.Logf("repos check result.Len()=%d pb.Len()=%d\n", result.Len(), pb.Len())
case "/repos/pull":
result = pullRequest(pb, reqPB)
case "/repos/add":
result = addRequest(pb, reqPB)
default:
reqPB.Logf("repos check result.Len()=%d pb.Len()=%d\n", result.Len(), pb.Len())
log.Info("repos", route, "unknown")
}
if err := result.SendReply(w, reqPB); err != nil {
reqPB.Logf("Oh well, Send to client failed. err=%v", err)
}
// todo: logReq(reqPB)
logReqPB(reqPB)
return
}
*/
func okHandler(w http.ResponseWriter, r *http.Request) {
reqPB, err := httppb.ReqToPB(r)
reqPB.Logf("START: Got %d bytes from the client", len(reqPB.ClientData))
if err != nil {
reqPB.Logf("httppb err %v", err)
}
route := reqPB.Route
if route == "/" {
return
}
if route == "/machine" {
handleMachine(w, reqPB)
return
}
if route == "/uptime" {
doUptime(w)
return
}
log.Warn("BAD URL =", route)
}
func doUptime(w io.Writer) {
if me.zood == nil {
fmt.Fprintf(w, "BAD zood == nil\n")
return
}
var count int
var bad int
for m := range me.machines.IterAll() {
count += 1
if m.FindVersion("zood") != me.zood.version {
if m.SinceLastUpdate() > 10*time.Minute {
// skip machines that have not been updated in the last 10 minutes
log.Info("ignoring old machine", m.Hostname)
continue
}
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)
}
}