From 0e8bf17ff030547c1096256336ae51c8f1552266 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 18 Nov 2016 12:53:26 -0500 Subject: [PATCH] re: #5211, bringing back the RELOAD BUTTON :rage2: --- public/src/admin/admin.js | 20 +++++++----- public/src/admin/modules/instance.js | 45 ++++++++++++++------------- src/socket.io/admin.js | 34 ++++++++++++++++---- src/views/admin/general/dashboard.tpl | 8 ++++- src/views/admin/partials/menu.tpl | 5 +++ 5 files changed, 75 insertions(+), 37 deletions(-) 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,22 +124,26 @@ } function setupRestartLinks() { - $('.restart').off('click').on('click', function () { - bootbox.confirm('Are you sure you wish to restart NodeBB?', function (confirm) { + $('.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.restart(); + instance.reload(); }); } }); }); - $('.reload').off('click').on('click', function () { - 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) { + require(['admin/modules/instance'], function (instance) { + instance.restart(); + }); + } }); }); - } + }; 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,37 +14,30 @@ 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 + ']]' - }); - } + $(window).one('action:reconnected', function () { + app.alert({ + alert_id: 'instance_reload', + type: 'success', + title: ' Success', + message: 'NodeBB has reloaded successfully.', + timeout: 5000 + }); if (typeof callback === 'function') { callback(); } }); + + socket.emit('admin.reload'); }; instance.restart = function (callback) { app.alert({ alert_id: 'instance_restart', type: 'info', - title: 'Restarting... ', - message: 'NodeBB is restarting.', - timeout: 5000 + title: 'Rebuilding... ', + message: 'NodeBB is rebiulding front-end assets (css, javascript, etc).', + timeout: 10000 }); $(window).one('action:reconnected', function () { @@ -53,7 +46,7 @@ define('admin/modules/instance', function () { type: 'success', title: ' Success', message: 'NodeBB has successfully restarted.', - timeout: 5000 + timeout: 10000 }); if (typeof callback === 'function') { @@ -61,7 +54,15 @@ define('admin/modules/instance', function () { } }); - socket.emit('admin.restart'); + 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(); -}; +} + +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 + }); -/** - * Reload deprecated as of v1.1.2+, remove in v2.x - */ -SocketAdmin.reload = SocketAdmin.restart; + 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 @@