@@ -51,17 +51,21 @@ const (
5151
5252 // other options
5353 _printSuccessDots = true
54- _printFailures = true
54+ _printHTTPErrors = true
55+ _printGoErrors = true
5556)
5657
5758type Counter struct {
5859 sync.Mutex
5960 count int64
6061}
6162
62- var _requestCount = atomic.Uint64 {}
63- var _successCount = atomic.Uint64 {}
64- var _failureCount = atomic.Uint64 {}
63+ var (
64+ _requestCount = atomic.Uint64 {}
65+ _successCount = atomic.Uint64 {}
66+ _httpErrCount = atomic.Uint64 {} // HTTP error response codes
67+ _goErrCount = atomic.Uint64 {} // actual errors in go (includes "connection reset by peer")
68+ )
6569
6670var _client = & http.Client {
6771 Timeout : 0 , // no timeout
@@ -83,7 +87,9 @@ func main() {
8387
8488 url , jsonPathOrString := mustExtractArgs ()
8589 var jsonBytes []byte
86- if strings .HasPrefix (jsonPathOrString , "{" ) {
90+ if jsonPathOrString == "" {
91+ jsonBytes = nil
92+ } else if strings .HasPrefix (jsonPathOrString , "{" ) {
8793 jsonBytes = []byte (jsonPathOrString )
8894 } else {
8995 jsonBytes = mustReadJSONBytes (jsonPathOrString )
@@ -124,7 +130,7 @@ FOR_LOOP:
124130
125131 elapsed := time .Since (start )
126132 requestRate := float64 (_requestCount .Load ()) / elapsed .Seconds ()
127- fmt .Printf ("\n elapsed time: %s | %d requests @ %f req/s | %d succeeded | %d failed \n " , elapsed , _requestCount .Load (), requestRate , _successCount .Load (), _failureCount .Load ())
133+ fmt .Printf ("\n elapsed time: %s | %d requests @ %f req/s | %d succeeded | %d http errors | %d go errors \n " , elapsed , _requestCount .Load (), requestRate , _successCount .Load (), _httpErrCount . Load (), _goErrCount .Load ())
128134}
129135
130136func runConstantRequestsPerSecondIteration (url string , jsonBytes []byte , inFlightCount * Counter , done chan bool ) {
@@ -161,7 +167,8 @@ func runConstantInFlight(url string, jsonBytes []byte) {
161167
162168 var summedRequestCount uint64
163169 var summedSuccessCount uint64
164- var summedFailureCount uint64
170+ var summedHTTPErrCount uint64
171+ var summedGoErrCount uint64
165172
166173 start := time .Now ()
167174 loopNum := 1
@@ -170,10 +177,13 @@ func runConstantInFlight(url string, jsonBytes []byte) {
170177
171178 summedRequestCount += _requestCount .Load ()
172179 summedSuccessCount += _successCount .Load ()
173- summedFailureCount += _failureCount .Load ()
180+ summedHTTPErrCount += _httpErrCount .Load ()
181+ summedGoErrCount += _goErrCount .Load ()
182+
174183 _requestCount .Store (0 )
175184 _successCount .Store (0 )
176- _failureCount .Store (0 )
185+ _httpErrCount .Store (0 )
186+ _goErrCount .Store (0 )
177187
178188 if loopNum >= _numMainLoops || wasKilled {
179189 break
@@ -184,7 +194,7 @@ func runConstantInFlight(url string, jsonBytes []byte) {
184194 if _numMainLoops > 1 {
185195 elapsed := time .Since (start )
186196 requestRate := float64 (summedRequestCount ) / elapsed .Seconds ()
187- fmt .Printf ("\n total elapsed time: %s | %d requests @ %f req/s | %d succeeded | %d failed \n " , elapsed , summedRequestCount , requestRate , summedSuccessCount , summedFailureCount )
197+ fmt .Printf ("\n total elapsed time: %s | %d requests @ %f req/s | %d succeeded | %d http errors | %d go errors \n " , elapsed , summedRequestCount , requestRate , summedSuccessCount , summedHTTPErrCount , summedGoErrCount )
188198 }
189199}
190200
@@ -227,7 +237,7 @@ LOOP:
227237
228238 elapsed := time .Now ().Sub (start )
229239 requestRate := float64 (_requestCount .Load ()) / elapsed .Seconds ()
230- fmt .Printf ("\n elapsed time: %s | %d requests @ %f req/s | %d succeeded | %d failed \n " , elapsed , _requestCount .Load (), requestRate , _successCount .Load (), _failureCount .Load ())
240+ fmt .Printf ("\n elapsed time: %s | %d requests @ %f req/s | %d succeeded | %d http errors | %d go errors \n " , elapsed , _requestCount .Load (), requestRate , _successCount .Load (), _httpErrCount . Load (), _goErrCount .Load ())
231241
232242 return wasKilled
233243}
@@ -260,22 +270,26 @@ func makeRequest(url string, jsonBytes []byte) {
260270 }
261271
262272 request .Header .Set ("Content-Type" , "application/json" )
273+
274+ _requestCount .Inc ()
275+
263276 response , err := _client .Do (request )
264277 if err != nil {
265- fmt .Print ("\n " + debug .Sppg (err ))
278+ _goErrCount .Inc ()
279+ if _printGoErrors {
280+ fmt .Print ("\n " + debug .Sppg (err ))
281+ }
266282 return
267283 }
268284
269285 body , bodyReadErr := ioutil .ReadAll (response .Body )
270286 response .Body .Close ()
271287
272- _requestCount .Inc ()
273-
274288 if response .StatusCode == 200 {
275289 _successCount .Inc ()
276290 } else {
277- _failureCount .Inc ()
278- if _printFailures {
291+ _httpErrCount .Inc ()
292+ if _printHTTPErrors {
279293 if bodyReadErr == nil {
280294 fmt .Printf ("\n status code: %d; body: %s\n " , response .StatusCode , string (body ))
281295 } else {
0 commit comments