// 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) } }