guvnor
Version:
A node process manager that isn't spanners all the way down
116 lines (113 loc) • 2.94 kB
JavaScript
var AmpersandModel = require('ampersand-model')
var moment = require('moment')
var prettysize = require('prettysize')
var Processes = require('./processes')
var Apps = require('./apps')
var Users = require('./users')
var semver = require('semver')
module.exports = AmpersandModel.extend({
idAttribute: 'name',
props: {
name: 'string',
lastUpdated: 'date',
status: {
type: 'string',
values: [
'connecting', 'connected', 'connectionrefused', 'connectionreset',
'hostnotfound', 'connectiontimedout', 'error', 'incompatible',
'timeout', 'badsignature', 'networkdown']
},
host: 'string', // this is set from config
hostname: 'string', // this is set from os.hostname()
type: 'string',
platform: 'string',
arch: 'string',
release: 'string',
guvnor: 'string',
os: 'string',
versions: ['object', true, function () {
return {}
}],
time: 'number',
uptime: 'number',
freeMemory: 'number',
totalMemory: 'number',
debuggerPort: 'number',
cpus: ['array', true, function () {
return [{
model: 'string',
speed: 'number',
times: ['object', false, function () {
return {
idle: 'number',
irq: 'number',
nice: 'number',
sys: 'number',
user: 'number'
}
}],
load: ['object', false, function () {
return {
cpu: 'number',
idle: 'number',
irq: 'number',
nice: 'number',
sys: 'number',
user: 'number'
}
}]
}]
}]
},
session: {
selected: ['boolean', true, false],
selectedProcess: ['any', false, null]
},
derived: {
timeFormatted: {
deps: ['time'],
fn: function () {
return moment(this.time).format('YYYY-MM-DD HH:mm:ss Z')
}
},
uptimeFormatted: {
deps: ['uptime'],
fn: function () {
// uptime is reported in seconds
return moment.duration(this.uptime * 1000).humanize()
}
},
cpuSpeed: {
deps: ['cpus'],
fn: function () {
if (!this.cpus[0]) {
return ''
}
return this.cpus.length + 'x ' + (this.cpus[0].speed / 1000).toFixed(2) + 'GHz'
}
},
usedMemory: {
deps: ['freeMemory', 'totalMemory'],
fn: function () {
return ~~(((this.totalMemory - this.freeMemory) / this.totalMemory) * 100)
}
},
totalMemoryFormatted: {
deps: ['totalMemory'],
fn: function () {
return prettysize(this.totalMemory, true)
}
},
engine: {
deps: ['versions'],
fn: function () {
return (semver.satisfies(this.versions.node, '>=1.0.0') ? 'io.js' : 'node.js') + ' ' + this.versions.node
}
}
},
collections: {
processes: Processes,
apps: Apps,
users: Users
}
})