From 9ba2a6628db6d85bb7891ff45ec60d822e7b07bc Mon Sep 17 00:00:00 2001 From: Pierre Date: Fri, 5 Feb 2016 10:59:56 +0100 Subject: [PATCH] generateGlobalCpuReport: average CPU usage for each host --- packages/xo-server-usage-report/package.json | 1 + packages/xo-server-usage-report/src/index.js | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/xo-server-usage-report/package.json b/packages/xo-server-usage-report/package.json index 4e88641be..19a4f8237 100644 --- a/packages/xo-server-usage-report/package.json +++ b/packages/xo-server-usage-report/package.json @@ -35,6 +35,7 @@ "babel-preset-stage-0": "^6.3.13", "clarify": "^1.0.5", "dependency-check": "^2.5.1", + "lodash.foreach": "^4.0.0", "mocha": "^2.3.4", "must": "^0.13.1", "nyc": "^5.2.0", diff --git a/packages/xo-server-usage-report/src/index.js b/packages/xo-server-usage-report/src/index.js index 4738cc458..aad8a19ec 100644 --- a/packages/xo-server-usage-report/src/index.js +++ b/packages/xo-server-usage-report/src/index.js @@ -1,3 +1,5 @@ +import forEach from 'lodash.foreach' + export const configurationSchema = { type: 'object', @@ -23,7 +25,7 @@ function computeMean (values) { let sum = 0 for (let i = 0; i < values.length; i++) { - sum += values[i] + sum += values[i] || 0 } return sum / values.length @@ -119,6 +121,19 @@ class UsageReportPlugin { })) // ============================================================================= // STATS min, max, mean + this._unsets.push(this._xo.api.addMethod('generateGlobalCpuReport', async ({ machines, granularity }) => { + machines = machines.split(',') + const hostMean = {} + for (let machine of machines) { + const machineStats = await this_._xo.getXapiHostStats(this_._xo.getObject(machine), granularity) + const cpusMean = [] + forEach(machineStats.stats.cpus, (cpu) => { + cpusMean.push(computeMean(cpu)) + }) + hostMean[machine] = computeMean(cpusMean) + } + return hostMean + })) // Cpus this._unsets.push(this._xo.api.addMethod('generateCpuReport', async ({ machine, granularity }) => {