blob: 7ee6de1b301d484d1de1f1fc1d6572891743aa93 (
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
#! /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');
var options = {
host: 'scexchange.bitparking.com',
port: 8080,
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 {
data = JSON.parse(data);
} catch (exn) {
return console.error('[1;31m' + exn.stack + '[m');
};
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
console.log(m);
last_output = now;
};
};
};
});
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
};
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);
|