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"
"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("")
}
}

View File

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