summaryrefslogtreecommitdiffstats
path: root/gold/scex/tracer/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'gold/scex/tracer/index.js')
-rw-r--r--gold/scex/tracer/index.js91
1 files changed, 61 insertions, 30 deletions
diff --git a/gold/scex/tracer/index.js b/gold/scex/tracer/index.js
index e0c706e7..7ee6de1b 100644
--- a/gold/scex/tracer/index.js
+++ b/gold/scex/tracer/index.js
@@ -1,3 +1,10 @@
+#! /usr/bin/env node
+//
+// usage: [idle_mark=N] tracer
+//
+// Where the optional idle_mark tells the tracer to output idle marks every N
+// seconds.
+//
var http = require('http');
var slurp = require('./slurp');
@@ -7,9 +14,14 @@ var options = {
path: '/api/t2'
};
+var interval = 1000;
+var idle_mark = Number(process.env.idle_mark) * interval;
+
var last_id = 0;
var last_price = 0;
+var last_output = new Date(0);
function t2 () {
+ var now = new Date()
http.get(options, function(res) {
slurp(res, function (data) {
try {
@@ -17,42 +29,61 @@ function t2 () {
} catch (exn) {
return console.error('' + exn.stack + '');
};
- data
- .sort(function (a, b) {
- return a.id - b.id;
- })
- .forEach(function (x) {
- if (x.id > last_id) {
- last_id = x.id;
-
- x.date = new Date(Number(x.date) * 1000);
-
- var price = x.price.toString();
- while (price.length < 'x.xxxxxxxx'.length) {
- price += 0;
- }
- if (x.price > last_price) {
- price = '' + price + ''
- }
- if (x.price < last_price) {
- price = '' + price + ''
- }
- last_price = x.price;
-
- var c = ({ buy: '', sell: '' })[x.type];
- var m = '';
- m += x.id
- m += ' ' + JSON.parse(JSON.stringify(x.date))
+ data = data.sort(function (a, b) {
+ return a.id - b.id;
+ }).filter(function (x) {
+ return x.id > last_id;
+ });
+ if (data.length > 0) {
+ data.forEach(function (x) {
+ last_id = x.id;
+
+ x.date = new Date(Number(x.date) * 1000);
+
+ var price = render_price(x.price, last_price);
+ last_price = x.price;
+
+ var c = ({ buy: '', sell: '' })[x.type];
+ var m = '';
+ m += x.id
+ m += ' ' + JSON.parse(JSON.stringify(x.date))
+ m += ' ' + price
+ m += ' ' + c + x.amount + ''
+ console.log(m);
+ last_output = now;
+ });
+ } else {
+ if (idle_mark) {
+ if (now - last_output >= idle_mark) {
+ var price = render_price(last_price);
+ var m = last_id
+ m += ' ' + JSON.parse(JSON.stringify(now));
m += ' ' + price
- m += ' ' + c + x.amount + ''
console.log(m);
-
+ last_output = now;
};
- });
+ };
+ };
});
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
};
-setInterval(t2, 1000);
+function render_price(price, last_price) {
+ var rendered_price = price.toString();
+ while (rendered_price.length < 'x.xxxxxxxx'.length) {
+ rendered_price += 0;
+ };
+ if (last_price) {
+ if (price > last_price) {
+ rendered_price = '' + rendered_price + ''
+ };
+ if (price < last_price) {
+ rendered_price = '' + rendered_price + ''
+ };
+ };
+ return rendered_price;
+};
+
+setInterval(t2, interval);