-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
57 lines (50 loc) · 1.33 KB
/
index.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
const EventEmitter = require("events");
const OriginalHttpAgent = require("agentkeepalive");
const OriginalHttpsAgent = OriginalHttpAgent.HttpsAgent;
const Poller = require("./poller");
function extendAgent(OriginalAgent) {
class DnsAgent extends OriginalAgent {
getName(options) {
const name = super.getName(options);
const key = options.lookup && options.lookup.key;
return key ? `${key}:${name}` : name;
}
}
return DnsAgent;
}
class DnsPolling extends EventEmitter {
constructor(options) {
super();
this.pollers = new Map();
this.options = options;
}
getLookup(hostname) {
let poller = this.pollers.get(hostname);
if (!poller) {
poller = new Poller(hostname, this.options).start();
this.forwardEvents(poller);
this.pollers.set(hostname, poller);
}
return poller.getLookup();
}
forwardEvents(poller) {
const events = ["resolve:success", "resolve:error"];
for (const event of events) {
const forward = payload => this.emit(event, payload);
poller.on(event, forward);
}
}
stop() {
for (const poller of this.pollers.values()) {
poller.stop();
}
}
}
const HttpAgent = extendAgent(OriginalHttpAgent);
const HttpsAgent = extendAgent(OriginalHttpsAgent);
module.exports = {
Poller,
DnsPolling,
HttpAgent,
HttpsAgent
};