diff options
| -rw-r--r-- | gold/scex/tracer/index.js | 91 | 
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('[1;31m' + exn.stack + '[m');        }; -      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 = '[32m' + price + '[m' -            } -            if (x.price < last_price) { -              price = '[31m' + price + '[m' -            } -            last_price = x.price; - -            var c = ({ buy: '[32m', sell: '[31m' })[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: '[32m', sell: '[31m' })[x.type]; +          var m = ''; +          m += x.id +          m += ' ' + JSON.parse(JSON.stringify(x.date)) +          m += ' ' + price +          m += ' ' + c + x.amount + '[m' +          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 + '[m'              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 = '[32m' + rendered_price + '[m' +    }; +    if (price < last_price) { +      rendered_price = '[31m' + rendered_price + '[m' +    }; +  }; +  return rendered_price; +}; + +setInterval(t2, interval); | 
