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
|
#! /usr/bin/env node
name = '//hyper/influx/http'
port = process.env.port || 1337
host = process.env.host || '127.0.0.1'
console.info(name);
fs = require('fs');
path = require('path');
http = require('http');
fifo_path = path.resolve(process.argv[2] || path.join(process.cwd(), '0'));
// check configuration
try {
(function (stat) {
if ((stat.mode & 0010000) === 0) {
throw { code: 'E_not_fifo', path: fifo_path };
};
})(fs.statSync(fifo_path));
} catch (exn) {
console.error(exn);
process.exit(23);
};
process.stdin.destroy();
fifo = fs.createWriteStream(fifo_path);
fifo.on('open', function (fd) {
console.info('fifo open as fd', fd);
http.createServer(function (req, res) {
var rhost = req.connection.remoteAddress;
var rport = req.connection.remotePort;
var id = rhost + ':' + rport;
console.info(id, 'request', req.method, req.url);
req.on('data', function (data) {
console.info(id, 'data', data.length);
});
req.on('end', function (data) {
console.info(id, 'end');
res.writeHead(202, {
'Content-Length': 0,
'Connection': 'close'
});
res.end();
});
req.pipe(fifo, { end: false });
}).listen(port, host, function () {
console.info('server running at http://' + host + ':' + port + '/');
});
});
|