diff --git a/src/docker.js b/src/docker.js index 764a5f3a2..6965539c2 100644 --- a/src/docker.js +++ b/src/docker.js @@ -660,12 +660,13 @@ async function getEvents(options) { return stream; } -async function getStats(containerId) { +async function getStats(containerId, options) { assert.strictEqual(typeof containerId, 'string'); + assert.strictEqual(typeof options, 'object'); const container = gConnection.getContainer(containerId); - const [error, result] = await safe(container.stats({ stream: false })); + const [error, result] = await safe(container.stats({ stream: !!options.stream })); if (error && error.statusCode === 404) throw new BoxError(BoxError.NOT_FOUND, `Container ${containerId} not found`); if (error) throw new BoxError(BoxError.DOCKER_ERROR, error); diff --git a/src/metrics.js b/src/metrics.js index d0ac3b87a..1057b692a 100644 --- a/src/metrics.js +++ b/src/metrics.js @@ -28,7 +28,7 @@ const apps = require('./apps.js'), async function readContainerMetric(name) { assert.strictEqual(typeof name, 'string'); - const [error, stats] = await safe(docker.getStats(name)); + const [error, stats] = await safe(docker.getStats(name, { stream: false })); if (error || Object.keys(stats.memory_stats).length === 0) return null; // the container is missing or stopped. better not to inspect and check State since a race is possible const networkRead = stats.networks ? stats.networks.eth0.rx_bytes : 0; // in host mode (turn), networks is missing diff --git a/src/services.js b/src/services.js index b074cbb1f..fd93a26f7 100644 --- a/src/services.js +++ b/src/services.js @@ -342,7 +342,7 @@ async function containerStatus(containerName) { if (networkError) return { status: exports.SERVICE_STATUS_STARTING, error: `Error waiting for ${containerName}: ${networkError.message}` }; if (response.status !== 200 || !response.body.status) return { status: exports.SERVICE_STATUS_STARTING, error: `Error waiting for ${containerName}. Status code: ${response.status} message: ${response.body.message}` }; - const result = await docker.getStats(containerName); + const result = await docker.getStats(containerName, { stream: false }); const stats = result.memory_stats || { usage: 0, limit: 1 }; return { @@ -2045,7 +2045,7 @@ async function statusTurn() { if (error && error.reason === BoxError.NOT_FOUND) return { status: exports.SERVICE_STATUS_STOPPED }; if (error) throw error; - const result = await docker.getStats(container.Id); + const result = await docker.getStats(container.Id, { stream: false }); const status = container.State.Running ? (container.HostConfig.ReadonlyRootfs ? exports.SERVICE_STATUS_ACTIVE : exports.SERVICE_STATUS_STARTING) @@ -2110,7 +2110,7 @@ async function statusGraphite() { if (networkError) return { status: exports.SERVICE_STATUS_STARTING, error: `Error waiting for graphite: ${networkError.message}` }; if (response.status !== 200) return { status: exports.SERVICE_STATUS_STARTING, error: `Error waiting for graphite. Status code: ${response.status} message: ${response.body.message}` }; - const result = await docker.getStats('graphite'); + const result = await docker.getStats('graphite', { stream: false }); const stats = result.memory_stats || { usage: 0, limit: 1 }; return {