summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormakefu <github@syntax-fehler.de>2011-09-22 20:14:08 +0200
committermakefu <github@syntax-fehler.de>2011-09-22 20:14:08 +0200
commit3232213019d7552d64467fcb9a16538621455656 (patch)
tree0a5adcb578820ec381312d2607a8f7319734bf09
parentf07f13ee00e3d2ab56bacba51e0b6dab5a238e8a (diff)
parenta4fbd7d77c3b9a0fd202de9883bd8e07019a79e7 (diff)
Merge branch 'master' of github.com:krebscode/painload
-rw-r--r--hyper/README.md21
-rwxr-xr-xhyper/influx/http/index.js57
2 files changed, 78 insertions, 0 deletions
diff --git a/hyper/README.md b/hyper/README.md
index 07fa1de5..d8fe9d67 100644
--- a/hyper/README.md
+++ b/hyper/README.md
@@ -13,3 +13,24 @@
## 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
+
+## calculate the square of the current year in a little local hyper sewer system
+
+hint: maybe run each command in some separate terminal.
+
+ id=sqr sh -x //hyper/process/spawn stdbuf -o 0 sed 's/[^0-9]//g;s/.*/(&)^2/'
+ id=bc sh -x //hyper/process/spawn bc
+ port=42 node //hyper/influx/http //proc/sqr/0
+ cat //proc/sqr/1 > //proc/bc/0
+ cat //proc/bc/1
+ date +%Y | curl -fvsS --data-binary @- http://localhost:42
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 + '/');
+ });
+});