@@ -51,17 +51,21 @@ const (
51
51
52
52
// other options
53
53
_printSuccessDots = true
54
- _printFailures = true
54
+ _printHTTPErrors = true
55
+ _printGoErrors = true
55
56
)
56
57
57
58
type Counter struct {
58
59
sync.Mutex
59
60
count int64
60
61
}
61
62
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
+ )
65
69
66
70
var _client = & http.Client {
67
71
Timeout : 0 , // no timeout
@@ -83,7 +87,9 @@ func main() {
83
87
84
88
url , jsonPathOrString := mustExtractArgs ()
85
89
var jsonBytes []byte
86
- if strings .HasPrefix (jsonPathOrString , "{" ) {
90
+ if jsonPathOrString == "" {
91
+ jsonBytes = nil
92
+ } else if strings .HasPrefix (jsonPathOrString , "{" ) {
87
93
jsonBytes = []byte (jsonPathOrString )
88
94
} else {
89
95
jsonBytes = mustReadJSONBytes (jsonPathOrString )
@@ -124,7 +130,7 @@ FOR_LOOP:
124
130
125
131
elapsed := time .Since (start )
126
132
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 ())
128
134
}
129
135
130
136
func runConstantRequestsPerSecondIteration (url string , jsonBytes []byte , inFlightCount * Counter , done chan bool ) {
@@ -161,7 +167,8 @@ func runConstantInFlight(url string, jsonBytes []byte) {
161
167
162
168
var summedRequestCount uint64
163
169
var summedSuccessCount uint64
164
- var summedFailureCount uint64
170
+ var summedHTTPErrCount uint64
171
+ var summedGoErrCount uint64
165
172
166
173
start := time .Now ()
167
174
loopNum := 1
@@ -170,10 +177,13 @@ func runConstantInFlight(url string, jsonBytes []byte) {
170
177
171
178
summedRequestCount += _requestCount .Load ()
172
179
summedSuccessCount += _successCount .Load ()
173
- summedFailureCount += _failureCount .Load ()
180
+ summedHTTPErrCount += _httpErrCount .Load ()
181
+ summedGoErrCount += _goErrCount .Load ()
182
+
174
183
_requestCount .Store (0 )
175
184
_successCount .Store (0 )
176
- _failureCount .Store (0 )
185
+ _httpErrCount .Store (0 )
186
+ _goErrCount .Store (0 )
177
187
178
188
if loopNum >= _numMainLoops || wasKilled {
179
189
break
@@ -184,7 +194,7 @@ func runConstantInFlight(url string, jsonBytes []byte) {
184
194
if _numMainLoops > 1 {
185
195
elapsed := time .Since (start )
186
196
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 )
188
198
}
189
199
}
190
200
@@ -227,7 +237,7 @@ LOOP:
227
237
228
238
elapsed := time .Now ().Sub (start )
229
239
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 ())
231
241
232
242
return wasKilled
233
243
}
@@ -260,22 +270,26 @@ func makeRequest(url string, jsonBytes []byte) {
260
270
}
261
271
262
272
request .Header .Set ("Content-Type" , "application/json" )
273
+
274
+ _requestCount .Inc ()
275
+
263
276
response , err := _client .Do (request )
264
277
if err != nil {
265
- fmt .Print ("\n " + debug .Sppg (err ))
278
+ _goErrCount .Inc ()
279
+ if _printGoErrors {
280
+ fmt .Print ("\n " + debug .Sppg (err ))
281
+ }
266
282
return
267
283
}
268
284
269
285
body , bodyReadErr := ioutil .ReadAll (response .Body )
270
286
response .Body .Close ()
271
287
272
- _requestCount .Inc ()
273
-
274
288
if response .StatusCode == 200 {
275
289
_successCount .Inc ()
276
290
} else {
277
- _failureCount .Inc ()
278
- if _printFailures {
291
+ _httpErrCount .Inc ()
292
+ if _printHTTPErrors {
279
293
if bodyReadErr == nil {
280
294
fmt .Printf ("\n status code: %d; body: %s\n " , response .StatusCode , string (body ))
281
295
} else {
0 commit comments