diff --git a/src/services.js b/src/services.js index 626f194a5..a2bc18e5b 100644 --- a/src/services.js +++ b/src/services.js @@ -213,7 +213,7 @@ const SERVICES = { defaultMemoryLimit: 0 }, sftp: { - status: statusSftp, + status: sftp.status, restart: docker.restartContainer.bind(null, 'sftp'), defaultMemoryLimit: sftp.DEFAULT_MEMORY_LIMIT }, @@ -1882,8 +1882,12 @@ async function statusTurn() { const result = await docker.memoryUsage(container.Id); + const status = container.State.Running + ? (container.HostConfig.ReadonlyRootfs ? exports.SERVICE_STATUS_ACTIVE : exports.SERVICE_STATUS_STARTING) + : exports.SERVICE_STATUS_STOPPED; + return { - status: container.State.Running ? exports.SERVICE_STATUS_ACTIVE : exports.SERVICE_STATUS_STOPPED, + status, memoryUsed: result.memory_stats.usage, memoryPercent: parseInt(100 * result.memory_stats.usage / result.memory_stats.limit) }; @@ -1919,20 +1923,6 @@ async function restartNginx() { if (error) debug(`restartNginx: error restarting unbound. ${error.message}`); } -async function statusSftp() { - const [error, container] = await safe(docker.inspect('sftp')); - if (error && error.reason === BoxError.NOT_FOUND) return { status: exports.SERVICE_STATUS_STOPPED }; - if (error) throw error; - - const result = await docker.memoryUsage('sftp'); - - return { - status: container.State.Running ? exports.SERVICE_STATUS_ACTIVE : exports.SERVICE_STATUS_STOPPED, - memoryUsed: result.memory_stats.usage, - memoryPercent: parseInt(100 * result.memory_stats.usage / result.memory_stats.limit) - }; -} - async function statusGraphite() { const [error, container] = await safe(docker.inspect('graphite')); if (error && error.reason === BoxError.NOT_FOUND) return { status: exports.SERVICE_STATUS_STOPPED }; diff --git a/src/sftp.js b/src/sftp.js index b1ba40643..3e4892d15 100644 --- a/src/sftp.js +++ b/src/sftp.js @@ -2,6 +2,7 @@ exports = module.exports = { start, + status, DEFAULT_MEMORY_LIMIT: 256 * 1024 * 1024 }; @@ -10,11 +11,13 @@ const apps = require('./apps.js'), assert = require('assert'), BoxError = require('./boxerror.js'), debug = require('debug')('box:sftp'), + docker = require('./docker.js'), hat = require('./hat.js'), infra = require('./infra_version.js'), paths = require('./paths.js'), safe = require('safetydance'), settings = require('./settings.js'), + services = require('./services.js'), shell = require('./shell.js'), system = require('./system.js'), volumes = require('./volumes.js'); @@ -98,3 +101,21 @@ async function start(existingInfra) { await shell.promises.exec('removeSftp', 'docker rm -f sftp || true'); await shell.promises.exec('startSftp', runCmd); } + +async function status() { + const [error, container] = await safe(docker.inspect('sftp')); + if (error && error.reason === BoxError.NOT_FOUND) return { status: services.SERVICE_STATUS_STOPPED }; + if (error) throw error; + + const result = await docker.memoryUsage('sftp'); + + const status = container.State.Running + ? (container.HostConfig.ReadonlyRootfs ? services.SERVICE_STATUS_ACTIVE : services.SERVICE_STATUS_STARTING) + : services.SERVICE_STATUS_STOPPED; + + return { + status, + memoryUsed: result.memory_stats.usage, + memoryPercent: parseInt(100 * result.memory_stats.usage / result.memory_stats.limit) + }; +}