-
Notifications
You must be signed in to change notification settings - Fork 1
/
server.js
51 lines (39 loc) · 1.49 KB
/
server.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
var dgram = require("dgram"),
logger = require('./lib/logger')
errorparser = require('./lib/errorparser')
config = require('./lib/config')
statsd = require('./lib/statsd')
RateLimiter = require('limiter').RateLimiter
reassembler = require('./lib/reassembler');
config.configFile(process.argv[2], function (config, oldConfig) {
l = new logger.Logger(config.log || {});
statsdClient = new statsd.StatsdClient(config.statsd);
Reassembler = new reassembler.Reassembler(statsdClient);
parser = new errorparser.ErrorParser(config, l, statsdClient);
var server = dgram.createSocket("udp4");
var limiter = new RateLimiter(config.maxrequestsperminute, 'minute', true);
server.on("error", function (err) {
l.log("server error:\n" + err.stack, 'ERROR');
server.close();
});
server.on("message", function (msg, rinfo) {
limiter.removeTokens(1, function(err, remainingRequests) {
if (remainingRequests < 0) {
l.log("Ratelimit has been reached, a msessage has been discarded", 'ERROR');
} else {
parser.forwardError(msg, Reassembler);
}
});
});
server.on("listening", function () {
var address = server.address();
l.log("server listening " +
address.address + ":" + address.port, 'INFO');
});
server.bind(config.daemonport || 9999);
var the_interval = (config.purgerinterval || 60) * 1000;
setInterval(function() {
l.log("Clearing incomplete objects from reassembler cache", 'INFO');
Reassembler.cleanmemory();
}, the_interval);
});