mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-06 22:15:48 +01:00
closed #2446
This commit is contained in:
41
public/src/admin/advanced/logs.js
Normal file
41
public/src/admin/advanced/logs.js
Normal file
@@ -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;
|
||||||
|
});
|
||||||
@@ -187,14 +187,9 @@ adminController.events.get = function(req, res, next) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
adminController.logs.get = function(req, res, next) {
|
adminController.logs.get = function(req, res, next) {
|
||||||
var logPath = path.join('logs', path.sep, 'output.log');
|
meta.logs.get(function(err, logs) {
|
||||||
fs.readFile(logPath, function(err, data) {
|
|
||||||
if (err || !data) {
|
|
||||||
data = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
res.render('admin/advanced/logs', {
|
res.render('admin/advanced/logs', {
|
||||||
data: validator.escape(data.toString())
|
data: validator.escape(logs)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ var async = require('async'),
|
|||||||
require('./meta/css')(Meta);
|
require('./meta/css')(Meta);
|
||||||
require('./meta/sounds')(Meta);
|
require('./meta/sounds')(Meta);
|
||||||
require('./meta/settings')(Meta);
|
require('./meta/settings')(Meta);
|
||||||
|
require('./meta/logs')(Meta);
|
||||||
Meta.templates = require('./meta/templates');
|
Meta.templates = require('./meta/templates');
|
||||||
|
|
||||||
/* Assorted */
|
/* Assorted */
|
||||||
|
|||||||
28
src/meta/logs.js
Normal file
28
src/meta/logs.js
Normal file
@@ -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);
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -32,7 +32,8 @@ var async = require('async'),
|
|||||||
config: {},
|
config: {},
|
||||||
settings: {},
|
settings: {},
|
||||||
email: {},
|
email: {},
|
||||||
analytics: {}
|
analytics: {},
|
||||||
|
logs: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
SocketAdmin.before = function(socket, method, next) {
|
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) {
|
function getHourlyStatsForSet(set, hours, callback) {
|
||||||
var hour = new Date(),
|
var hour = new Date(),
|
||||||
terms = {},
|
terms = {},
|
||||||
|
|||||||
@@ -7,4 +7,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-lg-3">
|
||||||
|
<div class="panel panel-default affix">
|
||||||
|
<div class="panel-heading">Logs Control Panel</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<button class="btn btn-primary" data-action="reload"><i class="fa fa-refresh"></i> Reload Logs</button>
|
||||||
|
<button class="btn btn-warning" data-action="clear"><i class="fa fa-eraser"></i> Clear Logs</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user