diff --git a/src/routes/system.js b/src/routes/system.js index 10fa76b71..82bfcccf0 100644 --- a/src/routes/system.js +++ b/src/routes/system.js @@ -11,6 +11,7 @@ exports = module.exports = { getLogStream, getSystemGraphs, getBlockDevices, + getCpus }; const assert = require('assert'), @@ -143,3 +144,10 @@ async function getBlockDevices(req, res, next) { next(new HttpSuccess(200, { devices })); } + +async function getCpus(req, res, next) { + const [error, cpus] = await safe(system.getCpus()); + if (error) return next(BoxError.toHttpError(error)); + + next(new HttpSuccess(200, { cpus })); +} diff --git a/src/routes/test/system-test.js b/src/routes/test/system-test.js index 62edd69d4..861330f53 100644 --- a/src/routes/test/system-test.js +++ b/src/routes/test/system-test.js @@ -21,6 +21,18 @@ describe('System', function () { before(setup); after(cleanup); + describe('cpus', function () { + it('succeeds', async function () { + const response = await superagent.get(`${serverUrl}/api/v1/system/cpus`) + .query({ access_token: owner.token }); + + expect(response.statusCode).to.equal(200); + expect(response.body.cpus).to.be.ok(); + + expect(response.body.cpus.every(c => typeof c.model === 'string')).to.be(true); + }); + }); + describe('logs', function () { before(function () { console.log(paths.BOX_LOG_FILE); diff --git a/src/server.js b/src/server.js index de4ea39dc..95fb916bb 100644 --- a/src/server.js +++ b/src/server.js @@ -114,6 +114,7 @@ async function initializeExpressSync() { 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); + router.get ('/api/v1/system/cpus', token, authorizeAdmin, routes.system.getCpus); 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 2ee9a6271..5ba29962c 100644 --- a/src/system.js +++ b/src/system.js @@ -15,7 +15,8 @@ exports = module.exports = { getLogs, getBlockDevices, runSystemChecks, - getProvider + getProvider, + getCpus }; const apps = require('./apps.js'), @@ -364,3 +365,7 @@ function getProvider() { const provider = safe.fs.readFileSync(paths.PROVIDER_FILE, 'utf8'); return provider ? provider.trim() : 'generic'; } + +async function getCpus() { + return os.cpus(); +} diff --git a/src/test/system-test.js b/src/test/system-test.js index 545f0f03e..e1067cd8f 100644 --- a/src/test/system-test.js +++ b/src/test/system-test.js @@ -47,6 +47,12 @@ describe('System', function () { expect(memory.swap).to.be.a('number'); }); + it('can get CPUs', async function () { + const cpus = await system.getCpus(); + expect(cpus).to.be.an(Array); + expect(cpus[0].model).to.be.a('string'); + }); + it('can get diskUsage', async function () { const usage = await system.getDiskUsage(); expect(usage).to.be(null); // nothing cached