92 lines
2.4 KiB
JavaScript
92 lines
2.4 KiB
JavaScript
import defaults from './defaults.mjs'
|
|
|
|
export function safeWrap(log, name, fn) {
|
|
return function(data, cb) {
|
|
try {
|
|
let out = fn(data, cb)
|
|
if (out && out.then) {
|
|
out.then(function() {}, function(err) {
|
|
log.error(err, 'Unknown error in ' + name)
|
|
log.event.error('Unknown error occured in ' + name + ': ' + err.message)
|
|
})
|
|
}
|
|
} catch (err) {
|
|
log.error(err, 'Unknown error in ' + name)
|
|
log.event.error('Unknown error occured in ' + name + ': ' + err.message)
|
|
}
|
|
}
|
|
}
|
|
|
|
export function getConfig(ctx) {
|
|
let merge = {
|
|
applications: []
|
|
}
|
|
for (let app of ctx.core.applications) {
|
|
merge[app.name] = app.config
|
|
merge.applications.push(app.name)
|
|
}
|
|
return defaults(ctx.db.config, merge)
|
|
}
|
|
|
|
export function getApp(ctx, name, action) {
|
|
let app = ctx.core.applicationMap.get(name)
|
|
|
|
if (!app) {
|
|
ctx.log.warn(`Invalid action ${action} on non-existing app ${name}`)
|
|
ctx.log.event.warn(`Invalid action ${action} on non-existing app ${name}`)
|
|
return null
|
|
}
|
|
if (action === 'start' && !app.config.scAllowStop && app.running) {
|
|
ctx.log.warn(`Invalid action ${action} on existing app ${name}`)
|
|
ctx.log.event.warn(`Invalid action ${action} on existing app ${name}`)
|
|
return null
|
|
}
|
|
return app
|
|
}
|
|
|
|
const lastAction = {
|
|
|
|
}
|
|
|
|
export function stopSpam(ctx, action, name) {
|
|
let key = name + '.' + action
|
|
var d = new Date()
|
|
if (!lastAction[key]) {
|
|
lastAction[key] = d
|
|
return false
|
|
}
|
|
if (d - lastAction[key] < 1000 * 60 * 1) {
|
|
ctx.log.warn(`${action} called too fast on ${name}`)
|
|
ctx.log.event.warn(`${action} called too fast on ${name}`)
|
|
return lastAction[key]
|
|
}
|
|
lastAction[key] = d
|
|
return false
|
|
}
|
|
|
|
export function getStatus(ctx) {
|
|
let status = {}
|
|
for (let app of ctx.core.applications) {
|
|
if (app.provider.static) {
|
|
status[app.name] = {
|
|
active: 'static',
|
|
latestInstalled: 'static',
|
|
updated: '',
|
|
running: app.running,
|
|
updating: false,
|
|
}
|
|
} else {
|
|
let appDb = ctx.db.data.core[app.name]
|
|
let active = ctx.db.get(appDb.versions, appDb.active)
|
|
let installed = ctx.db.get(appDb.versions, appDb.latestInstalled)
|
|
status[app.name] = {
|
|
active: active,
|
|
latestInstalled: installed,
|
|
updated: appDb.updater,
|
|
running: app.running,
|
|
updating: app.updating,
|
|
}
|
|
}
|
|
}
|
|
return status
|
|
}
|