Skip to content

Commit 4956c4b

Browse files
authored
Merge pull request nearform#20 from thekemkid/reconnect
Reconnect counting added
2 parents f0da751 + 4fbe72e commit 4956c4b

File tree

3 files changed

+69
-2
lines changed

3 files changed

+69
-2
lines changed

anger.js

+11-2
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ function anger (opts) {
4343
const again = tryAgain(xtend(defaultAgainOpts, opts.retryOpts))
4444

4545
let timedOutResponses = 0
46+
let disconnects = 0
47+
let reconnects = -clients.length // will be 0 after connecting each client
4648

4749
for (let i = 0; i < clients.length; i++) {
4850
clients[i] = new Client(opts.url)
@@ -51,6 +53,8 @@ function anger (opts) {
5153
sender: false
5254
}
5355
retries[i] = 0
56+
clients[i].onDisconnect = () => { disconnects++ }
57+
clients[i].onConnect = () => { reconnects++ }
5458
if (i < opts.senders) {
5559
senders[i] = clients[i]
5660
clients[i].anger.sender = true
@@ -70,7 +74,10 @@ function anger (opts) {
7074
if (err) {
7175
numRetries++
7276
} else {
73-
connectLatencies.record(process.hrtime(startTime))
77+
const end = process.hrtime(startTime)
78+
const responseTime = end[0] * 1e3 + end[1] / 1e6
79+
80+
connectLatencies.record(responseTime)
7481
retries[client.anger.id] = numRetries
7582
done()
7683
}
@@ -178,7 +185,9 @@ function anger (opts) {
178185
connectLatencies: histUtil.addPercentiles(connectLatencies, histUtil.histAsObj(connectLatencies)),
179186
retriesAvg: mean(retries),
180187
connections: clients.length,
181-
senders: opts.senders
188+
senders: opts.senders,
189+
disconnects: disconnects,
190+
reconnects: reconnects
182191
})
183192
}
184193

test/backoff.test.js

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
'use strict'
2+
3+
const test = require('tap').test
4+
const anger = require('..')
5+
6+
test('backoff test', { timeout: 3000 }, (t) => {
7+
t.plan(4)
8+
9+
const startTime = process.hrtime()
10+
11+
require('./authServer')((err, server) => {
12+
t.error(err)
13+
14+
t.tearDown(server.stop.bind(server))
15+
16+
let uid = 0
17+
const instance = anger({
18+
url: server.info.uri,
19+
subscription: '/greet',
20+
senders: 1,
21+
connections: 1,
22+
requests: 1,
23+
responses: 1,
24+
identifier: (payload) => payload.meta.id,
25+
auth: { headers: { authorization: `Basic ${new Buffer('jane:jane').toString('base64')}` } },
26+
trigger: (sender) => {
27+
sender.request({
28+
method: 'POST',
29+
path: '/h',
30+
payload: {
31+
id: ++uid
32+
}
33+
})
34+
return uid
35+
},
36+
retryOpts: {
37+
retries: 3,
38+
min: 750,
39+
max: 750
40+
}
41+
})
42+
43+
instance.on('error', (err) => {
44+
t.ok(err, 'error happened')
45+
const end = process.hrtime(startTime)
46+
const elapsedTime = end[0] * 1e3 + end[1] / 1e6
47+
t.ok(elapsedTime >= 1500, 'should have taken at least a second and a half to fail')
48+
t.equal(server.failedCount, 3)
49+
})
50+
51+
instance.on('end', () => {
52+
t.fail('end never happens')
53+
})
54+
})
55+
})

test/basic.test.js

+3
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,8 @@ require('./server')((err, server) => {
6666
t.ok(result.connectLatencies.p999 >= 0, 'connectLatencies.p999 exists')
6767
t.ok(result.connectLatencies.p9999 >= 0, 'connectLatencies.p9999 exists')
6868
t.ok(result.connectLatencies.p99999 >= 0, 'connectLatencies.p99999 exists')
69+
70+
t.ok(result.disconnects >= 0, 'disconnects exist')
71+
t.ok(result.reconnects >= 0, 'reconnects exists')
6972
})
7073
})

0 commit comments

Comments
 (0)