From fccc4f7d57cfed6a444e6e4fc77e0b7b179c1740 Mon Sep 17 00:00:00 2001 From: jdl Date: Mon, 15 Sep 2025 04:56:23 +0200 Subject: [PATCH] WIP --- peer/main2.go | 55 +++++++++++++++++++++----------------------- peer/statusserver.go | 9 ++++++++ 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/peer/main2.go b/peer/main2.go index 52bcf21..87d6b29 100644 --- a/peer/main2.go +++ b/peer/main2.go @@ -6,8 +6,8 @@ import ( "log" "net" "net/http" + "net/netip" "os" - "strings" ) // Usage: @@ -119,35 +119,32 @@ func main_status() { log.Fatalf("Failed to decode status report: %v", err) } - b := strings.Builder{} + fmt.Printf("\n%s Status\n\n", netName) - for _, status := range report.Remotes { - b.WriteString(fmt.Sprintf("%3d ", status.PeerIP)) - if status.Up { - b.WriteString("UP ") - } else { - b.WriteString("DOWN ") - } - if status.Relay && status.Direct { - b.WriteString("RELAY ") - } else if status.Server { - b.WriteString("SERVER ") - } else { - b.WriteString("CLIENT ") - } - - if status.Direct { - b.WriteString("DIRECT ") - } else { - b.WriteString("RELAYED ") - } - - b.WriteString(fmt.Sprintf("%45s ", status.DirectAddr)) - - b.WriteString(status.Name) - - b.WriteString("\n") + if len(report.Network) != 4 { + fmt.Printf("Network: %v\n\n", report.Network) + } else { + nw := report.Network + fmt.Printf("Network: %d.%d.%d.%d/24\n\n", nw[0], nw[1], nw[2], nw[3]) } - fmt.Print(b.String()) + for _, status := range report.Remotes { + fmt.Printf("%3d %s\n", status.PeerIP, status.Name) + fmt.Printf(" %-11s %v\n", "Up", status.Up) + + pubIP, ok := netip.AddrFromSlice(status.PublicIP) + if ok { + fmt.Printf(" %-11s %v\n", "Public IP", pubIP) + } else { + fmt.Printf(" %-11s\n", "Public IP") + } + fmt.Printf(" %-11s %d\n", "Port", status.Port) + fmt.Printf(" %-11s %v\n", "Relay", status.Relay) + fmt.Printf(" %-11s %v\n", "Server", status.Server) + fmt.Printf(" %-11s %v\n", "Direct", status.Direct) + if status.DirectAddr.IsValid() { + fmt.Printf(" %-11s %v\n", "Address", status.DirectAddr) + } + fmt.Println("") + } } diff --git a/peer/statusserver.go b/peer/statusserver.go index 6d9b002..d0e6afd 100644 --- a/peer/statusserver.go +++ b/peer/statusserver.go @@ -10,6 +10,7 @@ import ( ) type StatusReport struct { + Network []byte RelayPeerIP byte Remotes []RemoteStatus } @@ -31,8 +32,15 @@ func runStatusServer(g Globals, socketPath string) { handler := func(w http.ResponseWriter, r *http.Request) { report := StatusReport{ + Network: g.Network, Remotes: make([]RemoteStatus, 0, 255), } + + relayStatus, ok := g.RelayHandler.Load().Status() + if ok { + report.RelayPeerIP = relayStatus.PeerIP + } + for i := range g.RemotePeers { remote := g.RemotePeers[i].Load() status, ok := remote.Status() @@ -41,6 +49,7 @@ func runStatusServer(g Globals, socketPath string) { } report.Remotes = append(report.Remotes, status) } + json.NewEncoder(w).Encode(report) }