Skip to content

Commit

Permalink
Added logging layer
Browse files Browse the repository at this point in the history
  • Loading branch information
junajan committed Jun 13, 2016
1 parent 2353b59 commit 130fd69
Show file tree
Hide file tree
Showing 17 changed files with 208 additions and 145 deletions.
27 changes: 9 additions & 18 deletions app.js
Expand Up @@ -14,16 +14,13 @@ var config = require("./config");
var server = require(config.dirWeb+'Server');

var app = server.run(config);
app.config = config;
require("./config/app")(app, config);
app.DB = require(config.dirCore+'Mysql')(config.mysql);
app.mailer = require(config.dirCore+'Mailer')(app);

require("./config/app")(app);


var Strategy = require(config.dirStrategy+'Strategy90')(app);
var Backtest = require(config.dirCore+'Backtest')(Strategy);
var log = require('log4js').getLogger('App');
var Log = app.logger.getLogger("APP");

require(config.dirWeb+'Routes')(app);

Expand All @@ -32,11 +29,12 @@ var tickers = "AAPL,ABBV,ABT,ACN,AIG,ALL,AMGN,AMZN,APA,APC,AXP,BA,BAC,BAX,BIIB,B
// var tickers = "SPXS,LABU,LABD,UPRO".split(",");
// var tickers = "SPXS,UPRO".split(",");
// ==============================
var BACKTEST = false;
var BACKTEST = true;
var RUN_STRATEGY = false;
// ==============================

if(BACKTEST) {
Log.info("Running Backtest");

var config = {
tickers: tickers,
Expand All @@ -60,6 +58,7 @@ if(BACKTEST) {
});

} else if(RUN_STRATEGY) {
Log.info("Running strategy");

var config = {
internalHistory: true,
Expand All @@ -70,28 +69,20 @@ if(BACKTEST) {

console.time("Initing finished");
Strategy.init(config, function(err, res) {
if(err) return log.error("Strategy init returned error:", err);
if(err) return Log.error("Strategy init returned error:", err);
console.timeEnd("Initing finished");

log.info(("Running strategy at:"+ moment().format('LT')).green);
Log.info(("Running strategy at:"+ moment().format('LT')).green);
console.time("Processing finished");

Strategy.process(res, function(err, res) {
console.timeEnd("Processing finished");
console.log("======== PROCESS RESULT ========");
if(err) console.log("ERROR: ", err);
else {
console.log({
positions: res.postions,
closePositions: res.closePositions,
openPositions: res.openPositions,
state: res.newState
});
}
if(err) Log.error("Strategy process returned error:", err);
});
});

} else {
Log.info("Running scheduler for automated trading");

var Robot = require(config.dirCore+"Robot")(app);
// Strategy.initClear(config);
Expand Down
13 changes: 10 additions & 3 deletions config/app.js
Expand Up @@ -6,7 +6,7 @@ var session = require('express-session');
var FileStore = require('session-file-store')(session);


module.exports = function(app) {
module.exports = function(app, config) {
app.set('views', __dirname + '/../web/views');
app.set('view engine', 'ejs');
app.set('view options', {
Expand All @@ -19,14 +19,21 @@ module.exports = function(app) {
saveUninitialized: true,
resave: false,
store: new FileStore({
path: app.config.root+"/sessions",
path: config.root+"/sessions",
reapInterval: 800
}),
saveUninitialized: false,
cookie: { maxAge: 31 * 24 * 60 * 60 * 1000 }
}));

app.use(bodyParser.urlencoded({extended:false}));


app.config = config;
app.logger = config.logger;
app.memLogger = config.memLogger;
app.getLogger = function (type) {
return app.logger.getLogger(type);
};

return app;
};
45 changes: 44 additions & 1 deletion config/config.js
@@ -1,6 +1,14 @@
var _ = require('lodash');

var modules = __dirname+"/../modules/";
// var log4js = require('log4js');
var config = require("./env");
var log4js = require('log4js');
var log4jsMemAppender = require(modules+"Core/Log4jsMemmoryAdapter");
var memLogger = log4jsMemAppender({ maxBufferSize : 100000 });

log4js.loadAppender('file');
log4js.loadAppender('memory', memLogger);

var _config = {
scheduleHour: 5,
Expand All @@ -15,6 +23,41 @@ var _config = {
dirConnector: modules+"Connector/",
};

module.exports = _.merge(_config, require("./env"));
var appenders = [];

if(config.log.console) {
appenders.push({
"level": config.log.consoleLogLevel,
"type": "logLevelFilter",
"appender": {
"type": "console"
}
});
}

if(config.log.file) {
appenders.push({
"level": config.log.fileLogLevel,
"type": "logLevelFilter",
"appender": {
"type": "file",
"filename": config.log.file,
"layout": {
}
}
});
}

log4js.configure({
"appenders": appenders
});
log4js.addAppender(log4js.appenders.memory());


_config = _.merge(_config, config);
_config.logger = log4js;
_config.memLogger = memLogger;

module.exports = _config;


13 changes: 13 additions & 0 deletions logtest.js
@@ -0,0 +1,13 @@
"use strict";

require('colors');
var _ = require('lodash');
// load configuration
var app = {};
var config = require("./config");

var Log = config.logger.getLogger("TEST");

Log.info("INFO");

console.log(config.memLogger.getBuffer());
4 changes: 2 additions & 2 deletions modules/Auth.js
Expand Up @@ -41,8 +41,8 @@ var Auth = function(app) {
};

return this;
}
};

module.exports = function(app) {
return new Auth(app);
}
};
49 changes: 49 additions & 0 deletions modules/Core/Log4jsMemmoryAdapter.js
@@ -0,0 +1,49 @@
"use strict";

module.exports = function(options){
var layouts = require('log4js').layouts;
var buffer = null;
var maxBufferSize = null;

options = options || {};
buffer = options.buffer || [];
maxBufferSize = options.maxBufferSize || 100;

var memoryAppender = function(layout, timezoneOffset) {
layout = layout || layouts.basicLayout;
return function(loggingEvent) {
if((buffer.length + 1) > maxBufferSize)
{
var numtoRemove = (buffer.length - maxBufferSize) + 1;
if(numtoRemove > 0){ buffer.splice(0, numtoRemove); }
}
buffer.push(layout(loggingEvent, timezoneOffset));
};
};

var configure = function(config) {
var layout = null;
if (config.layout) {
layout = layouts.layout(config.layout.type, config.layout);
}
if(config.maxBufferSize){
maxBufferSize = config.maxBufferSize;
}
return memoryAppender(layout, config.timezoneOffset);
};

var getBuffer = function(){
return(buffer.slice());
};

var flushBuffer = function(){
buffer = [];
};

return({
appender: memoryAppender,
configure: configure,
getBuffer: getBuffer,
flushBuffer: flushBuffer
});
};
8 changes: 5 additions & 3 deletions modules/Core/Mailer.js
@@ -1,9 +1,11 @@
var moment = require("moment");
var async = require("async");
var stripAnsi = require("strip-ansi");
var nodemailer = require('nodemailer');

var Mailer = function(app) {
var self = this;
var Log = app.getLogger("MAILER");
var config = app.config;
var emailConf = config.email;

Expand All @@ -19,9 +21,9 @@ var Mailer = function(app) {
var msg = '<b>Sandy bot - daily log for '+getFullDate(moment())+"</b>";

msg += '<br /><br />';
msg += log;
msg += stripAnsi(log);

console.log('Sending daily log by email');
Log.info('Sending daily log by email');
self.send(title, msg, null, true);
};

Expand Down Expand Up @@ -52,7 +54,7 @@ var Mailer = function(app) {
var title = config.env+" sandy was stared";
var msg = 'Sandy bot was started at '+getFullDate(moment());

console.log('Sending welcome email');
Log.info('Sending welcome email');
self.send(title, msg);
};

Expand Down
20 changes: 10 additions & 10 deletions modules/Core/OrderManager.js
Expand Up @@ -6,6 +6,7 @@ var OrderManager = function(app) {
var self = this;
var config = app.config;
var DB = app.DB;
var Log = app.getLogger("ORDER-MGMT");

var Broker = require(config.dirConnector+config.connector.driver)(config.connector.config, app);

Expand All @@ -20,7 +21,7 @@ var OrderManager = function(app) {
data.push([ticker, info.price, info.origin, info.yahooPrice, JSON.stringify(info)]);
});

console.log("Saving actual prices for "+ data.length+ " tickers");
Log.info("Saving actual prices for "+ data.length+ " tickers");
DB.insertValues('stock_actual (symbol, price, origin, yahoo_price, data) ', data, function(err, res) {
if(err) console.error(err);
done(err, res);
Expand Down Expand Up @@ -63,25 +64,24 @@ var OrderManager = function(app) {
self.printPositions = function () {
self.getPositions(function (err, positions) {
if(err)
return console.error("Opened Orders returned ERROR:".red, err);
console.log("Opened position:".yellow);
return Log.error("Opened Orders returned ERROR:".red, err);
Log.info("Opened position:".yellow);
positions.forEach(function(item) {
console.log(JSON.stringify(item));
Log.info(JSON.stringify(item));
});
if(!positions.length) console.log("-- empty --");
if(!positions.length) Log.info("-- empty --");
});
};

self.printOrders = function () {
self.getOrders(function (err, orders) {
if(err)
return console.error("Positions returned ERROR:".red, err);
console.log("Opened orders:".yellow);
console.dir(orders);
return Log.error("Positions returned ERROR:".red, err);
Log.info("Opened orders:".yellow);
orders.forEach(function(item) {
console.log(JSON.stringify(item));
Log.info(JSON.stringify(item));
});
if(!orders.length) console.log("-- empty --");
if(!orders.length) Log.info("-- empty --");
});
};

Expand Down

0 comments on commit 130fd69

Please sign in to comment.