From d2cb7e8a079f2ad6d0395c4d1f1841c9634f872f Mon Sep 17 00:00:00 2001 From: Josh Harvey Date: Fri, 2 May 2014 10:25:39 -0400 Subject: [PATCH] WIP --- bin/lamassu-server | 1 + lib/app.js | 11 ++++----- lib/logger.js | 7 ++++++ lib/postgresql_interface.js | 6 ++--- lib/routes.js | 3 +++ lib/trader.js | 49 +++++++++++++++++-------------------- package.json | 3 ++- 7 files changed, 44 insertions(+), 36 deletions(-) create mode 100644 lib/logger.js diff --git a/bin/lamassu-server b/bin/lamassu-server index 86bc13d0..895d255b 100755 --- a/bin/lamassu-server +++ b/bin/lamassu-server @@ -2,6 +2,7 @@ var fs = require('fs'); var createServer = require('../lib/app.js'); var argv = require('optimist').argv; +var logger = require('../lib/logger'); var options = { postgres: process.env.DATABASE_URL diff --git a/lib/app.js b/lib/app.js index 1e6845a3..7b49e81e 100644 --- a/lib/app.js +++ b/lib/app.js @@ -2,14 +2,13 @@ var http = require('http'); var https = require('https'); -var path = require('path'); var express = require('express'); -var fs = require('fs'); var LamassuConfig = require('lamassu-config'); var routes = require('./routes'); var Trader = require('./trader'); var PostgresqlInterface = require('./postgresql_interface'); - +var logger = require('./logger'); + module.exports = function (options) { var app = express(); var connectionString; @@ -27,7 +26,7 @@ module.exports = function (options) { config.load(function (err, config) { if (err) { - console.error('Loading config failed'); + logger.error('Loading config failed'); throw err; } @@ -38,11 +37,11 @@ module.exports = function (options) { config.on('configUpdate', function () { config.load(function (err, config) { if (err) { - return console.error('Error while reloading config'); + return logger.error('Error while reloading config'); } trader.configure(config); - console.log('Config reloaded'); + logger.info('Config reloaded'); }); }); diff --git a/lib/logger.js b/lib/logger.js new file mode 100644 index 00000000..21b8df7d --- /dev/null +++ b/lib/logger.js @@ -0,0 +1,7 @@ +var bunyan = require('bunyan'); + +var logLevel = process.env.LAMASSU_ENV === 'debug' ? + 'debug' : + 'info'; + +module.exports = bunyan.createLogger({name: 'lamassu-server', level: logLevel}); \ No newline at end of file diff --git a/lib/postgresql_interface.js b/lib/postgresql_interface.js index 72e30c71..2b7885eb 100644 --- a/lib/postgresql_interface.js +++ b/lib/postgresql_interface.js @@ -1,6 +1,8 @@ 'use strict'; var pg = require('pg'); +var logger = require('./logger'); + var PG_ERRORS = { 23505: 'uniqueViolation' }; @@ -11,9 +13,7 @@ var PostgresqlInterface = function (conString) { } this.client = new pg.Client(conString); - - // TODO better logging - this.client.on('error', function (err) { console.log(err); }); + this.client.on('error', function (err) { logger.error(err); }); this.client.connect(); }; diff --git a/lib/routes.js b/lib/routes.js index 9bdfd491..9cfb7cd7 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -2,6 +2,7 @@ var _trader; var _lamassuConfig; +var logger = require('./logger'); // Make sure these are higher than polling interval // or there will be a lot of errors @@ -22,6 +23,8 @@ var poll = function(req, res) { var balanceRec = _trader.balance; var fingerprint = req.connection.getPeerCertificate().fingerprint; + logger.debug('poll request from: %s', fingerprint); + // `rateRec` and `balanceRec` are both objects, so there's no danger // of misinterpreting rate or balance === 0 as 'Server initializing'. if (!rateRec || !balanceRec) { diff --git a/lib/trader.js b/lib/trader.js index d137e00d..fa03907c 100644 --- a/lib/trader.js +++ b/lib/trader.js @@ -2,7 +2,7 @@ var path = require('path'); var async = require('async'); -var winston = require('winston'); +var logger = require('./logger'); var SATOSHI_FACTOR = Math.pow(10, 8); @@ -16,13 +16,6 @@ var Trader = module.exports = function (db) { this.db = db; this.rates = {}; - var logLevel = process.env.LAMASSU_ENV === 'debug' ? - 'debug' : - 'info'; - this.logger = new (winston.Logger)({ - transports: [new (winston.transports.Console)({level: logLevel})] - }); - this._tradeQueue = []; this._sessionInfo = {}; }; @@ -81,8 +74,12 @@ Trader.prototype._consolidateTrades = function () { Trader.prototype._purchase = function (trade, cb) { var self = this; - var rate = self.rate(trade.currency); - self.tradeExchange.purchase(trade.satoshis, rate.rate, function (err) { + var tradeCurrency = this.tradeExchange.currency(); + var rate = this.rate(tradeCurrency).rate; + console.dir(this.rates); + console.log(rate); + console.log(tradeCurrency); + this.tradeExchange.purchase(trade.satoshis, rate, function (err) { if (err) return cb(err); self.pollBalance(); cb(); @@ -233,27 +230,26 @@ Trader.prototype.trade = function (rec, deviceFingerprint) { Trader.prototype.executeTrades = function () { if (!this.tradeExchange) return; - this.logger.debug('checking for trades'); + logger.debug('checking for trades'); var trade = this._consolidateTrades(); - this.logger.debug('consolidated: ', JSON.stringify(trade)); + logger.debug('consolidated: ', JSON.stringify(trade)); if (trade.fiat === 0) { - this.logger.debug('rejecting 0 trade'); + logger.debug('rejecting 0 trade'); return; } if (trade.fiat < this.config.exchanges.settings.minimumTradeFiat) { // throw it back in the water - this.logger.debug('reject fiat too small'); + logger.debug('reject fiat too small'); this._tradeQueue.unshift(trade); return; } - this.logger.debug('making a trade: %d', trade.satoshis / Math.pow(10, 8)); - var self = this; + logger.debug('making a trade: %d', trade.satoshis / Math.pow(10, 8)); this._purchase(trade, function (err) { - if (err) self.logger.error(err); + if (err) logger.error(err); }); }; @@ -281,7 +277,7 @@ Trader.prototype.stopPolling = function () { Trader.prototype.pollBalance = function (callback) { var self = this; - self.logger.debug('collecting balance'); + logger.debug('collecting balance'); async.parallel({ transferBalance: self.transferExchange.balance.bind(self.transferExchange), @@ -298,7 +294,7 @@ Trader.prototype.pollBalance = function (callback) { } balance.timestamp = Date.now(); - self.logger.debug('Balance update:', balance); + logger.debug('Balance update:', balance); self.balance = balance; return callback && callback(null, balance); @@ -308,19 +304,20 @@ Trader.prototype.pollBalance = function (callback) { Trader.prototype.pollRate = function (callback) { var self = this; - var currency = self.config.exchanges.settings.currency; - self.logger.debug('polling for rate...'); - self.tickerExchange.ticker(currency, function(err, rate) { + logger.debug('polling for rates...'); + self.tickerExchange.ticker(function(err, resRates) { if (err) { return callback && callback(err); } - self.logger.debug('Rate update:', rate); - self.rates[currency] = {rate: rate, timestamp: new Date()}; - return callback && callback(null, self.rates[currency]); + self.rateInfo = {rates: resRates, timestamp: new Date()}; }); }; +// This is the rate in local currency quote to the user Trader.prototype.rate = function () { - return this.rates[this.config.exchanges.settings.currency]; + return { + rate: this.rateInfo.rates[this.config.exchanges.settings.currency], + timestamp: this.rateInfo.timestamp + }; }; diff --git a/package.json b/package.json index de9994be..7010488c 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ "lamassu-bitstamp": "0.0.4", "lamassu-mtgox": "~0.0.1", "lamassu-blockchain": "~0.1.0", - "morgan": "~1.0.0" + "morgan": "~1.0.0", + "bunyan": "~0.22.3" }, "repository": { "type": "git",