diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js index 13a2340d5f..c7a874e96a 100644 --- a/public/src/admin/admin.js +++ b/public/src/admin/admin.js @@ -124,6 +124,16 @@ } function setupRestartLinks() { + $('.reload').off('click').on('click', function () { + bootbox.confirm('Are you sure you wish to reload NodeBB?', function (confirm) { + if (confirm) { + require(['admin/modules/instance'], function (instance) { + instance.reload(); + }); + } + }); + }); + $('.restart').off('click').on('click', function () { bootbox.confirm('Are you sure you wish to restart NodeBB?', function (confirm) { if (confirm) { @@ -133,13 +143,7 @@ } }); }); - - $('.reload').off('click').on('click', function () { - require(['admin/modules/instance'], function (instance) { - instance.reload(); - }); - }); - } + }; function launchSnackbar(params) { var message = (params.title ? "" + params.title + "" : '') + (params.message ? params.message : ''); @@ -148,7 +152,7 @@ translator.translate(message, function (html) { var bar = $.snackbar({ content: html, - timeout: 3000, + timeout: params.timeout || 3000, htmlAllowed: true }); diff --git a/public/src/admin/modules/instance.js b/public/src/admin/modules/instance.js index d5c2164155..d057ff9853 100644 --- a/public/src/admin/modules/instance.js +++ b/public/src/admin/modules/instance.js @@ -14,45 +14,12 @@ define('admin/modules/instance', function () { timeout: 5000 }); - socket.emit('admin.reload', function (err) { - if (!err) { - app.alert({ - alert_id: 'instance_reload', - type: 'success', - title: ' Success', - message: 'NodeBB has successfully reloaded.', - timeout: 5000 - }); - } else { - app.alert({ - alert_id: 'instance_reload', - type: 'danger', - title: '[[global:alert.error]]', - message: '[[error:reload-failed, ' + err.message + ']]' - }); - } - - if (typeof callback === 'function') { - callback(); - } - }); - }; - - instance.restart = function (callback) { - app.alert({ - alert_id: 'instance_restart', - type: 'info', - title: 'Restarting... ', - message: 'NodeBB is restarting.', - timeout: 5000 - }); - $(window).one('action:reconnected', function () { app.alert({ - alert_id: 'instance_restart', + alert_id: 'instance_reload', type: 'success', title: ' Success', - message: 'NodeBB has successfully restarted.', + message: 'NodeBB has reloaded successfully.', timeout: 5000 }); @@ -61,7 +28,41 @@ define('admin/modules/instance', function () { } }); - socket.emit('admin.restart'); + socket.emit('admin.reload'); + }; + + instance.restart = function (callback) { + app.alert({ + alert_id: 'instance_restart', + type: 'info', + title: 'Rebuilding... ', + message: 'NodeBB is rebiulding front-end assets (css, javascript, etc).', + timeout: 10000 + }); + + $(window).one('action:reconnected', function () { + app.alert({ + alert_id: 'instance_restart', + type: 'success', + title: ' Success', + message: 'NodeBB has successfully restarted.', + timeout: 10000 + }); + + if (typeof callback === 'function') { + callback(); + } + }); + + socket.emit('admin.restart', function () { + app.alert({ + alert_id: 'instance_restart', + type: 'info', + title: 'Build Complete!... ', + message: 'NodeBB is reloading.', + timeout: 10000 + }); + }); }; return instance; diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index 8240dd8b36..7e9568f960 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -3,6 +3,7 @@ var async = require('async'); var winston = require('winston'); var nconf = require('nconf'); +var path = require('path'); var meta = require('../meta'); var plugins = require('../plugins'); @@ -49,7 +50,7 @@ SocketAdmin.before = function (socket, method, data, next) { }); }; -SocketAdmin.restart = function (socket, data, callback) { +SocketAdmin.reload = function (socket, data, callback) { events.log({ type: 'restart', uid: socket.uid, @@ -57,12 +58,33 @@ SocketAdmin.restart = function (socket, data, callback) { }); meta.restart(); callback(); -}; +} -/** - * Reload deprecated as of v1.1.2+, remove in v2.x - */ -SocketAdmin.reload = SocketAdmin.restart; +SocketAdmin.restart = function (socket, data, callback) { + // Rebuild assets and reload NodeBB + var child_process = require('child_process'); + var build_worker = child_process.fork('app.js', ['--build'], { + cwd: path.join(__dirname, '../../'), + stdio: 'pipe' + }); + + build_worker.on('exit', function() { + events.log({ + type: 'build', + uid: socket.uid, + ip: socket.ip + }); + + events.log({ + type: 'restart', + uid: socket.uid, + ip: socket.ip + }); + + meta.restart(); + callback(); + }); +}; SocketAdmin.fireEvent = function (socket, data, callback) { index.server.emit(data.name, data.payload || {}); diff --git a/src/views/admin/general/dashboard.tpl b/src/views/admin/general/dashboard.tpl index 4f7775b226..8cb0be4032 100644 --- a/src/views/admin/general/dashboard.tpl +++ b/src/views/admin/general/dashboard.tpl @@ -95,7 +95,13 @@
System Control

- +

+ + +
+

+

+ Reloading or Restarting your NodeBB will drop all existing connections for a few seconds.

Maintenance Mode diff --git a/src/views/admin/partials/menu.tpl b/src/views/admin/partials/menu.tpl index 7e4f890730..0fea719e46 100644 --- a/src/views/admin/partials/menu.tpl +++ b/src/views/admin/partials/menu.tpl @@ -122,6 +122,11 @@