Added hosts command

This commit is contained in:
jdl 2025-09-16 14:18:18 +02:00
parent 650c74c013
commit a90ab3f5d6

View File

@ -22,6 +22,7 @@ func Main2() {
Available commands: Available commands:
run run
status status
hosts
`, os.Args[0]) `, os.Args[0])
os.Exit(1) os.Exit(1)
} }
@ -37,6 +38,8 @@ Available commands:
main_run() main_run()
case "status": case "status":
main_status() main_status()
case "hosts":
main_hosts()
default: default:
printUsage() printUsage()
} }
@ -100,26 +103,7 @@ func main_status() {
} }
netName := os.Args[2] netName := os.Args[2]
report := fetchStatusReport(netName)
client := http.Client{
Transport: &http.Transport{
Dial: func(_, _ string) (net.Conn, error) {
return net.Dial("unix", statusSocketPath(netName))
},
},
Timeout: 8 * time.Second,
}
getURL := "http://unix" + statusSocketPath(netName)
resp, err := client.Get(getURL)
if err != nil {
log.Fatalf("Failed to get response: %v", err)
}
report := StatusReport{}
if err := json.NewDecoder(resp.Body).Decode(&report); err != nil {
log.Fatalf("Failed to decode status report: %v", err)
}
fmt.Printf("\n%s Status\n\n", netName) fmt.Printf("\n%s Status\n\n", netName)
@ -151,3 +135,68 @@ func main_status() {
fmt.Println("") fmt.Println("")
} }
} }
// ----------------------------------------------------------------------------
func main_hosts() {
printUsage := func() {
fmt.Fprintf(os.Stderr, `Usage: %s hosts NETWORK_NAME
NETWORK_NAME
Unique name of the network interface created.
`, os.Args[0])
os.Exit(1)
}
if len(os.Args) != 3 {
printUsage()
}
netName := os.Args[2]
state, err := loadNetworkState(netName)
if err != nil {
log.Fatalf("Failed to load network state: %v", err)
}
config, err := loadPeerConfig(netName)
if err != nil {
log.Fatalf("Failed to load config: %v", err)
}
nw := config.Network
for _, peer := range state.Peers {
if peer == nil {
continue
}
fmt.Printf("%d.%d.%d.%d %s\n",
nw[0], nw[1], nw[2], peer.PeerIP, peer.Name)
}
fmt.Println("")
}
// ----------------------------------------------------------------------------
func fetchStatusReport(netName string) StatusReport {
client := http.Client{
Transport: &http.Transport{
Dial: func(_, _ string) (net.Conn, error) {
return net.Dial("unix", statusSocketPath(netName))
},
},
Timeout: 8 * time.Second,
}
getURL := "http://unix" + statusSocketPath(netName)
resp, err := client.Get(getURL)
if err != nil {
log.Fatalf("Failed to get response: %v", err)
}
report := StatusReport{}
if err := json.NewDecoder(resp.Body).Decode(&report); err != nil {
log.Fatalf("Failed to decode status report: %v", err)
}
return report
}