guvnor
Version:
A node process manager that isn't spanners all the way down
134 lines (124 loc) • 3.34 kB
JavaScript
var AmpersandModel = require('ampersand-model')
var moment = require('moment')
var prettysize = require('prettysize')
var Logs = require('./logs')
var Exceptions = require('./exceptions')
var Snapshots = require('./snapshots')
module.exports = AmpersandModel.extend({
props: {
id: 'string',
debugPort: 'number',
gid: ['number', true, '?'],
group: ['string', true, '?'],
pid: ['number', true, '?'],
restarts: ['number', true, '?'],
name: ['string', true, '?'],
uid: ['number', true, '?'],
uptime: ['number', true, '?'],
user: ['string', true, '?'],
script: ['string', true, '?'],
cwd: ['string', false, ''],
language: ['string', false, ''],
env: ['object', true, function () {
return {}
}],
argv: ['array', true, function () {
return []
}],
execArgv: ['array', true, function () {
return []
}],
status: {
type: 'string',
values: [
'uninitialised', 'starting', 'started', 'running', 'restarting', 'stopping',
'stopped', 'errored', 'failed', 'aborted', 'paused', 'unresponsive'
]
},
cluster: ['boolean', false, false],
clusterManager: ['string', false, null],
canAddWorkers: ['boolean', false, false],
canRemoveWorkers: ['boolean', false, false],
cpu: ['array', true, function () {
return []
}],
residentSize: ['array', true, function () {
return []
}],
heapTotal: ['array', true, function () {
return []
}],
heapUsed: ['array', true, function () {
return []
}],
latency: ['array', true, function () {
return []
}]
},
session: {
isGc: ['boolean', true, false],
isHeapDump: ['boolean', true, false],
isStarting: ['boolean', true, false],
isRestarting: ['boolean', true, false],
isStopping: ['boolean', true, false],
isRemoving: ['boolean', true, false],
areLogsPinned: ['boolean', true, false],
shouldShowTimes: ['boolean', true, true],
areExceptionsPinned: ['boolean', true, false]
},
derived: {
cpuFormatted: {
deps: ['uptime'],
fn: function () {
if (this.cpu.length === 0) {
return '?'
}
var last = this.cpu[this.cpu.length - 1]
if (!last) {
return '?'
}
return last.y + ' %'
}
},
memoryFormatted: {
deps: ['uptime'],
fn: function () {
if (this.heapUsed.length === 0) {
return '?'
}
var last = this.heapUsed[this.heapUsed.length - 1]
if (!last) {
return '?'
}
return prettysize(last.y)
}
},
uptimeFormatted: {
deps: ['uptime'],
fn: function () {
if (this.uptime === '?') {
return this.uptime
}
// uptime is reported in seconds
return moment.duration(this.uptime * 1000).humanize()
}
},
isRunning: {
deps: ['status'],
fn: function () {
return ['starting', 'started', 'running', 'restarting', 'stopping', 'paused', 'unresponsive'].indexOf(this.status) !== -1
}
},
isPaused: {
deps: ['status'],
fn: function () {
return this.status === 'paused'
}
}
},
collections: {
logs: Logs,
exceptions: Exceptions,
snapshots: Snapshots
}
})