summaryrefslogtreecommitdiffstats
path: root/sandbox/hyper/influx/http/index.js
blob: 346dde3b862e901d96797a1ebd05f90069838dfe (plain)
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 + '/');
  });
});