Skip to content

Commit fb0e6d9

Browse files
authored
Merge pull request #17 from yuuki/connect_file_args
connect: support to pass addrs in a file as an argument
2 parents b6fb84c + 7f82063 commit fb0e6d9

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

cmd/connect.go

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
_ "net/http/pprof"
2828
"os"
2929
"os/signal"
30+
"strings"
3031
"sync"
3132
"time"
3233

@@ -57,6 +58,7 @@ var (
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+
132147
func 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

Comments
 (0)