diff --git a/src/routes/system.js b/src/routes/system.js index be0839b11..d6553784d 100644 --- a/src/routes/system.js +++ b/src/routes/system.js @@ -12,7 +12,6 @@ exports = module.exports = { getSystemGraphs, getBlockDevices, getCpus, - getDmi }; const assert = require('assert'), @@ -152,10 +151,3 @@ async function getCpus(req, res, next) { next(new HttpSuccess(200, { cpus })); } - -async function getDmi(req, res, next) { - const [error, dmi] = await safe(system.getDmi()); - if (error) return next(BoxError.toHttpError(error)); - - next(new HttpSuccess(200, { dmi })); -} diff --git a/src/routes/test/system-test.js b/src/routes/test/system-test.js index d8885b654..b7d8e2e48 100644 --- a/src/routes/test/system-test.js +++ b/src/routes/test/system-test.js @@ -33,16 +33,18 @@ describe('System', function () { }); }); - describe('dmi', function () { + describe('info', function () { it('succeeds', async function () { - const response = await superagent.get(`${serverUrl}/api/v1/system/dmi`) + const response = await superagent.get(`${serverUrl}/api/v1/system/info`) .query({ access_token: owner.token }); expect(response.statusCode).to.equal(200); - expect(response.body.dmi).to.be.ok(); + expect(response.body.info).to.be.ok(); - expect(response.body.dmi.sysVendor).to.be.a('string'); - expect(response.body.dmi.productName).to.be.a('string'); + expect(response.body.info.sysVendor).to.be.a('string'); + expect(response.body.info.productName).to.be.a('string'); + expect(response.body.info.uptimeSecs).to.be.a('number'); + expect(response.body.info.rebootRequired).to.be.a('boolean'); }); }); diff --git a/src/server.js b/src/server.js index ae0dc7c8b..6fe892a1e 100644 --- a/src/server.js +++ b/src/server.js @@ -115,7 +115,6 @@ async function initializeExpressSync() { router.get ('/api/v1/system/graphs', token, authorizeAdmin, routes.system.getSystemGraphs); router.get ('/api/v1/system/disks', token, authorizeAdmin, routes.system.getDisks); router.get ('/api/v1/system/cpus', token, authorizeAdmin, routes.system.getCpus); - router.get ('/api/v1/system/dmi', token, authorizeAdmin, routes.system.getDmi); router.get ('/api/v1/system/disk_usage', token, authorizeAdmin, routes.system.getDiskUsage); router.post('/api/v1/system/disk_usage', token, authorizeAdmin, routes.system.updateDiskUsage); router.get ('/api/v1/system/block_devices', token, authorizeAdmin, routes.system.getBlockDevices); diff --git a/src/system.js b/src/system.js index 7acb7554d..f5bd04601 100644 --- a/src/system.js +++ b/src/system.js @@ -17,7 +17,6 @@ exports = module.exports = { runSystemChecks, getProvider, getCpus, - getDmi }; const apps = require('./apps.js'), @@ -282,10 +281,16 @@ async function reboot() { async function getInfo() { // https://serverfault.com/questions/92932/how-does-ubuntu-keep-track-of-the-system-restart-required-flag-in-motd const rebootRequired = fs.existsSync('/var/run/reboot-required'); - const uptime = safe.child_process.execSync('uptime -s', { encoding: 'utf8' }); + const uptime = safe.fs.readFileSync('/proc/uptime', 'utf8'); + const uptimeSecs = parseInt(uptime.split(' ')[0], 10); + + const sysVendor = safe.fs.readFileSync('/sys/devices/virtual/dmi/id/sys_vendor', 'utf8'); + const productName = safe.fs.readFileSync('/sys/devices/virtual/dmi/id/product_name', 'utf8'); return { - uptime, + sysVendor, + productName, + uptimeSecs, rebootRequired }; } @@ -376,13 +381,3 @@ function getProvider() { async function getCpus() { return os.cpus(); } - -async function getDmi() { - const sysVendor = safe.fs.readFileSync('/sys/devices/virtual/dmi/id/sys_vendor', 'utf8'); - const productName = safe.fs.readFileSync('/sys/devices/virtual/dmi/id/product_name', 'utf8'); - - return { - sysVendor, - productName - }; -} diff --git a/src/test/system-test.js b/src/test/system-test.js index b50655446..b2034424a 100644 --- a/src/test/system-test.js +++ b/src/test/system-test.js @@ -53,11 +53,13 @@ describe('System', function () { expect(cpus[0].model).to.be.a('string'); }); - it('can get DMI', async function () { - const dmi = await system.getDmi(); + it('can get info', async function () { + const info = await system.getInfo(); - expect(dmi.sysVendor).to.be.a('string'); - expect(dmi.productName).to.be.a('string'); + expect(info.sysVendor).to.be.a('string'); + expect(info.productName).to.be.a('string'); + expect(info.uptimeSecs).to.be.a('number'); + expect(info.rebootRequired).to.be.a('boolean'); }); it('can get diskUsage', async function () {