@@ -33,8 +33,7 @@ func doSpeedTest(c *cli.Context, servers []defs.Server, telemetryServer defs.Tel
3333 log .Infof ("Testing against %d servers" , serverCount )
3434 }
3535
36- var reps_json []report.JSONReport
37- var reps_csv []report.CSVReport
36+ var reps []report.Report
3837
3938 // fetch current user's IP info
4039 for _ , currentServer := range servers {
@@ -141,43 +140,24 @@ func doSpeedTest(c *cli.Context, servers []defs.Server, telemetryServer defs.Tel
141140 }
142141 }
143142
144- // check for --csv or --json. the program prioritize the --csv before the --json. this is the same behavior as speedtest-cli
145- if c .Bool (defs .OptionCSV ) {
146- // print csv if --csv is given
147- var rep report.CSVReport
148- rep .Timestamp = time .Now ()
149-
150- rep .Name = currentServer .Name
151- rep .Address = u .String ()
152- rep .Ping = math .Round (p * 100 ) / 100
153- rep .Jitter = math .Round (jitter * 100 ) / 100
154- rep .Download = math .Round (downloadValue * 100 ) / 100
155- rep .Upload = math .Round (uploadValue * 100 ) / 100
156- rep .Share = shareLink
157- rep .IP = ispInfo .RawISPInfo .IP
158-
159- reps_csv = append (reps_csv , rep )
160- } else if c .Bool (defs .OptionJSON ) {
161- // print json if --json is given
162- var rep report.JSONReport
163- rep .Timestamp = time .Now ()
164-
165- rep .Ping = math .Round (p * 100 ) / 100
166- rep .Jitter = math .Round (jitter * 100 ) / 100
167- rep .Download = math .Round (downloadValue * 100 ) / 100
168- rep .Upload = math .Round (uploadValue * 100 ) / 100
169- rep .BytesReceived = bytesRead
170- rep .BytesSent = bytesWritten
171- rep .Share = shareLink
172-
173- rep .Server .Name = currentServer .Name
174- rep .Server .URL = u .String ()
175-
176- rep .Client = report.Client {ispInfo .RawISPInfo }
177- rep .Client .Readme = ""
178-
179- reps_json = append (reps_json , rep )
180- }
143+ var rep report.Report
144+ rep .Timestamp = time .Now ()
145+
146+ rep .Ping = math .Round (p * 100 ) / 100
147+ rep .Jitter = math .Round (jitter * 100 ) / 100
148+ rep .Download = math .Round (downloadValue * 100 ) / 100
149+ rep .Upload = math .Round (uploadValue * 100 ) / 100
150+ rep .BytesReceived = bytesRead
151+ rep .BytesSent = bytesWritten
152+ rep .Share = shareLink
153+
154+ rep .Server .Name = currentServer .Name
155+ rep .Server .URL = u .String ()
156+
157+ rep .Client = report.Client {IPInfoResponse : ispInfo .RawISPInfo }
158+ rep .Client .Readme = ""
159+
160+ reps = append (reps , rep )
181161 } else {
182162 log .Infof ("Selected server %s (%s) is not responding at the moment, try again later" , currentServer .Name , u .Hostname ())
183163 }
@@ -191,13 +171,17 @@ func doSpeedTest(c *cli.Context, servers []defs.Server, telemetryServer defs.Tel
191171 // check for --csv or --json. the program prioritize the --csv before the --json. this is the same behavior as speedtest-cli
192172 if c .Bool (defs .OptionCSV ) {
193173 var buf bytes.Buffer
174+ var reps_csv []report.FlatReport
175+ for _ , rep := range reps {
176+ reps_csv = append (reps_csv , rep .GetFlatReport ())
177+ }
194178 if err := gocsv .MarshalWithoutHeaders (& reps_csv , & buf ); err != nil {
195179 log .Errorf ("Error generating CSV report: %s" , err )
196180 } else {
197181 os .Stdout .WriteString (buf .String ())
198182 }
199183 } else if c .Bool (defs .OptionJSON ) {
200- if b , err := json .Marshal (& reps_json ); err != nil {
184+ if b , err := json .Marshal (& reps ); err != nil {
201185 log .Errorf ("Error generating JSON report: %s" , err )
202186 } else {
203187 os .Stdout .Write (b [:])
0 commit comments