From fa39b5e46bb867d4f9cbc0f1e131ad0bf3b2a24f Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 24 Nov 2014 12:20:28 -0500 Subject: [PATCH] closed #2446 --- public/src/admin/advanced/logs.js | 41 +++++++++++++++++++++++++++++++ src/controllers/admin.js | 9 ++----- src/meta.js | 1 + src/meta/logs.js | 28 +++++++++++++++++++++ src/socket.io/admin.js | 11 ++++++++- src/views/admin/advanced/logs.tpl | 9 +++++++ 6 files changed, 91 insertions(+), 8 deletions(-) create mode 100644 public/src/admin/advanced/logs.js create mode 100644 src/meta/logs.js diff --git a/public/src/admin/advanced/logs.js b/public/src/admin/advanced/logs.js new file mode 100644 index 0000000000..c44f6bf93f --- /dev/null +++ b/public/src/admin/advanced/logs.js @@ -0,0 +1,41 @@ +"use strict"; +/* global define, socket */ + +define('admin/advanced/logs', function() { + var Logs = {}; + + Logs.init = function() { + var logsEl = $('.logs pre'); + + // Affix menu + $('.affix').affix(); + + $('.logs').find('button[data-action]').on('click', function(e) { + var btnEl = $(this), + action = btnEl.attr('data-action'); + + switch(action) { + case 'reload': + socket.emit('admin.logs.get', function(err, logs) { + if (!err) { + logsEl.text(logs); + } else { + app.alertError(err.message); + } + }); + break; + + case 'clear': + socket.emit('admin.logs.clear', function(err) { + if (!err) { + app.alertSuccess('Logs Cleared!') + btnEl.prev().click(); + } + }); + break; + } + }); + }; + + return Logs; +}); diff --git a/src/controllers/admin.js b/src/controllers/admin.js index 52bb3b7f18..5a43e1ba6c 100644 --- a/src/controllers/admin.js +++ b/src/controllers/admin.js @@ -187,14 +187,9 @@ adminController.events.get = function(req, res, next) { }; adminController.logs.get = function(req, res, next) { - var logPath = path.join('logs', path.sep, 'output.log'); - fs.readFile(logPath, function(err, data) { - if (err || !data) { - data = ''; - } - + meta.logs.get(function(err, logs) { res.render('admin/advanced/logs', { - data: validator.escape(data.toString()) + data: validator.escape(logs) }); }); }; diff --git a/src/meta.js b/src/meta.js index 86f3b2ac9b..fdaa2d8107 100644 --- a/src/meta.js +++ b/src/meta.js @@ -20,6 +20,7 @@ var async = require('async'), require('./meta/css')(Meta); require('./meta/sounds')(Meta); require('./meta/settings')(Meta); + require('./meta/logs')(Meta); Meta.templates = require('./meta/templates'); /* Assorted */ diff --git a/src/meta/logs.js b/src/meta/logs.js new file mode 100644 index 0000000000..01ee677887 --- /dev/null +++ b/src/meta/logs.js @@ -0,0 +1,28 @@ +'use strict'; + +var path = require('path'), + fs = require('fs'), + winston = require('winston'); + +module.exports = function(Meta) { + + Meta.logs = { + path: path.join('logs', path.sep, 'output.log') + }; + + Meta.logs.get = function(callback) { + fs.readFile(this.path, { + encoding: 'utf-8' + }, function(err, logs) { + if (err) { + winston.error('[meta/logs] Could not retrieve logs: ' + err.message); + } + + callback(undefined, logs || ''); + }); + } + + Meta.logs.clear = function(callback) { + fs.truncate(this.path, 0, callback); + } +}; \ No newline at end of file diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index db7d62d8e3..a2f09aa8b1 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -32,7 +32,8 @@ var async = require('async'), config: {}, settings: {}, email: {}, - analytics: {} + analytics: {}, + logs: {} }; SocketAdmin.before = function(socket, method, next) { @@ -207,6 +208,14 @@ SocketAdmin.analytics.get = function(socket, data, callback) { } }; +SocketAdmin.logs.get = function(socket, data, callback) { + meta.logs.get(callback); +}; + +SocketAdmin.logs.clear = function(socket, data, callback) { + meta.logs.clear(callback); +}; + function getHourlyStatsForSet(set, hours, callback) { var hour = new Date(), terms = {}, diff --git a/src/views/admin/advanced/logs.tpl b/src/views/admin/advanced/logs.tpl index e4f8d2b2fc..0311573d25 100644 --- a/src/views/admin/advanced/logs.tpl +++ b/src/views/admin/advanced/logs.tpl @@ -7,4 +7,13 @@ +
+
+
Logs Control Panel
+
+ + +
+
+