diff --git a/dashboard/src/js/client.js b/dashboard/src/js/client.js index 48339bb1a..95a48161b 100644 --- a/dashboard/src/js/client.js +++ b/dashboard/src/js/client.js @@ -2057,7 +2057,7 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout }; Client.prototype.isRebootRequired = function (callback) { - get('/api/v1/system/reboot', null, function (error, data, status) { + get('/api/v1/system/info', null, function (error, data, status) { if (error) return callback(error); if (status !== 200) return callback(new ClientError(status, data)); diff --git a/src/routes/system.js b/src/routes/system.js index aad997394..be0839b11 100644 --- a/src/routes/system.js +++ b/src/routes/system.js @@ -2,7 +2,7 @@ exports = module.exports = { reboot, - isRebootRequired, + getInfo, getDisks, getDiskUsage, updateDiskUsage, @@ -30,11 +30,11 @@ async function reboot(req, res, next) { await safe(system.reboot()); } -async function isRebootRequired(req, res, next) { - const [error, rebootRequired] = await safe(system.isRebootRequired()); +async function getInfo(req, res, next) { + const [error, info] = await safe(system.getInfo()); if (error) return next(BoxError.toHttpError(error)); - next(new HttpSuccess(200, { rebootRequired })); + next(new HttpSuccess(200, { info })); } async function getDisks(req, res, next) { diff --git a/src/server.js b/src/server.js index d4ffc4b58..ae0dc7c8b 100644 --- a/src/server.js +++ b/src/server.js @@ -110,7 +110,7 @@ async function initializeExpressSync() { router.post('/api/v1/dashboard/location', json, token, authorizeAdmin, routes.dashboard.changeLocation); // system (vm/server) - router.get ('/api/v1/system/reboot', token, authorizeAdmin, routes.system.isRebootRequired); + router.get ('/api/v1/system/info', token, authorizeAdmin, routes.system.getInfo); router.post('/api/v1/system/reboot', json, token, authorizeAdmin, routes.system.reboot); router.get ('/api/v1/system/graphs', token, authorizeAdmin, routes.system.getSystemGraphs); router.get ('/api/v1/system/disks', token, authorizeAdmin, routes.system.getDisks); diff --git a/src/system.js b/src/system.js index 407de2f15..7acb7554d 100644 --- a/src/system.js +++ b/src/system.js @@ -2,7 +2,7 @@ exports = module.exports = { reboot, - isRebootRequired, + getInfo, getUbuntuVersion, getDisks, getSwaps, @@ -279,9 +279,15 @@ async function reboot() { if (error) debug('reboot: could not reboot. %o', error); } -async function isRebootRequired() { +async function getInfo() { // https://serverfault.com/questions/92932/how-does-ubuntu-keep-track-of-the-system-restart-required-flag-in-motd - return fs.existsSync('/var/run/reboot-required'); + const rebootRequired = fs.existsSync('/var/run/reboot-required'); + const uptime = safe.child_process.execSync('uptime -s', { encoding: 'utf8' }); + + return { + uptime, + rebootRequired + }; } async function startUpdateDiskUsage() { @@ -330,7 +336,7 @@ async function getBlockDevices() { } async function checkRebootRequired() { - const rebootRequired = await isRebootRequired(); + const { rebootRequired } = await getInfo(); if (rebootRequired) { await notifications.alert(notifications.ALERT_REBOOT, 'Reboot Required', 'To finish ubuntu security updates, a reboot is necessary.', { persist: true }); } else {