summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortv <tv@iiso>2011-09-22 09:45:16 +0200
committertv <tv@iiso>2011-09-22 09:45:16 +0200
commit01274307ee0723a293772bd226ea0e880a3b8e8c (patch)
treef38bfb003a160402fba89188a17c938229fb262d
parent32ddd0b2dec60ac99e30e26819e4653ccc47690e (diff)
//hyper/influx/http: initial commit
-rw-r--r--hyper/README.md11
-rwxr-xr-xhyper/influx/http/index.js57
2 files changed, 68 insertions, 0 deletions
diff --git a/hyper/README.md b/hyper/README.md
index 07fa1de5..d1a2bc0c 100644
--- a/hyper/README.md
+++ b/hyper/README.md
@@ -13,3 +13,14 @@
## send data for calculation
echo 9000+2^42 | curl -fvsS --data-binary @- $url/{path}
+
+## spawn process with http influx and local efflux
+
+hint: maybe run each command in some separate terminal.
+
+ id=dummy sh -x //hyper/process/spawn stdbuf -o 0 sed 's/[^0-9 ]//g'
+ port=3 node //hyper/influx/http //proc/dummy/0
+ cat //proc/dummy/1
+ cat //proc/dummy/2
+ date | curl -fvsS --data-binary @- http://localhost:3
+
diff --git a/hyper/influx/http/index.js b/hyper/influx/http/index.js
new file mode 100755
index 00000000..346dde3b
--- /dev/null
+++ b/hyper/influx/http/index.js
@@ -0,0 +1,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 + '/');
+ });
+});