@@ -27,6 +27,7 @@ import (
2727 _ "net/http/pprof"
2828 "os"
2929 "os/signal"
30+ "strings"
3031 "sync"
3132 "time"
3233
5758 mergeResultsEachHost bool
5859 pprof bool
5960 pprofAddr string
61+ addrsFile bool
6062)
6163
6264// connectCmd represents the connect command
@@ -82,6 +84,10 @@ var connectCmd = &cobra.Command{
8284 return fmt .Errorf ("required addresses" )
8385 }
8486
87+ if addrsFile && len (args ) != 1 {
88+ return fmt .Errorf ("the number of addresses file must be one" )
89+ }
90+
8591 if mergeResultsEachHost && ! showOnlyResults {
8692 return fmt .Errorf ("--merge-results-each-host flag requires --show-only-results flag" )
8793 }
@@ -115,6 +121,7 @@ func init() {
115121 connectCmd .Flags ().Int32Var (& messageBytes , "message-bytes" , 64 , "TCP/UDP message size (bytes)" )
116122 connectCmd .Flags ().BoolVar (& showOnlyResults , "show-only-results" , false , "print only results of measurement stats" )
117123 connectCmd .Flags ().BoolVar (& mergeResultsEachHost , "merge-results-each-host" , false , "merge results of each host (with --show-only-results)" )
124+ connectCmd .Flags ().BoolVar (& addrsFile , "addrs-file" , false , "enable to pass a file including a pair of addresses and ports to an argument" )
118125
119126 connectCmd .Flags ().BoolVar (& pprof , "enable-pprof" , false , "a flag of pprof" )
120127 connectCmd .Flags ().StringVar (& pprofAddr , "pporf" , "localhost:6060" , "pprof listening address:port" )
@@ -129,6 +136,14 @@ func setPprofServer() {
129136 }()
130137}
131138
139+ func getAddrsFromFile (path string ) ([]string , error ) {
140+ data , err := os .ReadFile (path )
141+ if err != nil {
142+ return []string {}, err
143+ }
144+ return strings .Fields (string (data )), nil
145+ }
146+
132147func waitLim (ctx context.Context , rl ratelimit.Limiter ) error {
133148 // Check if ctx is already cancelled
134149 select {
@@ -187,12 +202,21 @@ func runConnectCmd(cmd *cobra.Command, args []string) error {
187202 return err
188203 }
189204
205+ addrs := args
206+ if addrsFile {
207+ var err error
208+ addrs , err = getAddrsFromFile (args [0 ])
209+ if err != nil {
210+ return err
211+ }
212+ }
213+
190214 printStatHeader (cmd .OutOrStdout ())
191215
192216 done := make (chan error )
193217 go func () {
194218 eg , ctx := errgroup .WithContext (ctx )
195- for _ , addr := range args {
219+ for _ , addr := range addrs {
196220 addr := addr
197221 eg .Go (func () error {
198222 if showOnlyResults {
@@ -219,7 +243,7 @@ func runConnectCmd(cmd *cobra.Command, args []string) error {
219243 return err
220244 }
221245 }
222- printReport (cmd .OutOrStdout (), args )
246+ printReport (cmd .OutOrStdout (), addrs )
223247
224248 return nil
225249}
0 commit comments