This commit is contained in:
jdl 2025-09-15 04:56:23 +02:00
parent c6d35856bc
commit fccc4f7d57
2 changed files with 35 additions and 29 deletions

View File

@ -6,8 +6,8 @@ import (
"log" "log"
"net" "net"
"net/http" "net/http"
"net/netip"
"os" "os"
"strings"
) )
// Usage: // Usage:
@ -119,35 +119,32 @@ func main_status() {
log.Fatalf("Failed to decode status report: %v", err) 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 { if len(report.Network) != 4 {
b.WriteString(fmt.Sprintf("%3d ", status.PeerIP)) fmt.Printf("Network: %v\n\n", report.Network)
if status.Up { } else {
b.WriteString("UP ") nw := report.Network
} else { fmt.Printf("Network: %d.%d.%d.%d/24\n\n", nw[0], nw[1], nw[2], nw[3])
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")
} }
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("")
}
} }

View File

@ -10,6 +10,7 @@ import (
) )
type StatusReport struct { type StatusReport struct {
Network []byte
RelayPeerIP byte RelayPeerIP byte
Remotes []RemoteStatus Remotes []RemoteStatus
} }
@ -31,8 +32,15 @@ func runStatusServer(g Globals, socketPath string) {
handler := func(w http.ResponseWriter, r *http.Request) { handler := func(w http.ResponseWriter, r *http.Request) {
report := StatusReport{ report := StatusReport{
Network: g.Network,
Remotes: make([]RemoteStatus, 0, 255), Remotes: make([]RemoteStatus, 0, 255),
} }
relayStatus, ok := g.RelayHandler.Load().Status()
if ok {
report.RelayPeerIP = relayStatus.PeerIP
}
for i := range g.RemotePeers { for i := range g.RemotePeers {
remote := g.RemotePeers[i].Load() remote := g.RemotePeers[i].Load()
status, ok := remote.Status() status, ok := remote.Status()
@ -41,6 +49,7 @@ func runStatusServer(g Globals, socketPath string) {
} }
report.Remotes = append(report.Remotes, status) report.Remotes = append(report.Remotes, status)
} }
json.NewEncoder(w).Encode(report) json.NewEncoder(w).Encode(report)
} }