Added hosts command
This commit is contained in:
		
							
								
								
									
										89
									
								
								peer/main.go
									
									
									
									
									
								
							
							
						
						
									
										89
									
								
								peer/main.go
									
									
									
									
									
								
							| @@ -22,6 +22,7 @@ func Main2() { | ||||
| Available commands: | ||||
|     run | ||||
|     status | ||||
|     hosts | ||||
| `, os.Args[0]) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| @@ -37,6 +38,8 @@ Available commands: | ||||
| 		main_run() | ||||
| 	case "status": | ||||
| 		main_status() | ||||
| 	case "hosts": | ||||
| 		main_hosts() | ||||
| 	default: | ||||
| 		printUsage() | ||||
| 	} | ||||
| @@ -100,26 +103,7 @@ func main_status() { | ||||
| 	} | ||||
|  | ||||
| 	netName := os.Args[2] | ||||
|  | ||||
| 	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) | ||||
| 	} | ||||
| 	report := fetchStatusReport(netName) | ||||
|  | ||||
| 	fmt.Printf("\n%s Status\n\n", netName) | ||||
|  | ||||
| @@ -151,3 +135,68 @@ func main_status() { | ||||
| 		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 | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user