-
Notifications
You must be signed in to change notification settings - Fork 35
/
slave-circuit.js
79 lines (66 loc) · 1.66 KB
/
slave-circuit.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
'use strict';
const Brakes = require('../lib/Brakes');
const timer = 100;
let successRate = 2;
let iterations = 0;
function unreliableServiceCall() {
return new Promise((resolve, reject) => {
setTimeout(() => {
iterations++;
if (iterations === 10) {
successRate = 0.6;
}
else if (iterations === 100) {
successRate = 0.1;
}
else if (iterations === 200) {
successRate = 1;
}
if (Math.random() <= successRate) {
resolve();
}
else {
reject();
}
}, timer);
});
}
// Create a master brakes instance with no main function
const brake = new Brakes({
statInterval: 2500,
threshold: 0.5,
circuitDuration: 15000,
timeout: 250,
fallback: () => Promise.resolve('Fallback data')
});
// create slave circuits
const circuit1 = brake.slaveCircuit(unreliableServiceCall, { timeout: 500 });
const circuit2 = brake.slaveCircuit(unreliableServiceCall, { timeout: 1000 });
brake.on('snapshot', snapshot => {
console.log('Running at:', snapshot.stats.successful / snapshot.stats.total);
console.log(snapshot);
});
brake.on('circuitOpen', () => {
console.log('----------Circuit Opened--------------');
});
brake.on('circuitClosed', () => {
console.log('----------Circuit Closed--------------');
});
setInterval(() => {
circuit1.exec()
.then(data => {
console.log(data || 'C1 Succesful');
})
.catch(err => {
console.log('C1 Failure', err || '');
});
}, 100);
setInterval(() => {
circuit2.exec()
.then(data => {
console.log(data || 'C2 Succesful');
})
.catch(err => {
console.log('C2 Failure', err || '');
});
}, 500);