80 lines
2.3 KiB
JavaScript
80 lines
2.3 KiB
JavaScript
|
const { Injectable } = require('flitter-di')
|
||
|
const ImplementationError = require('libflitter/errors/ImplementationError')
|
||
|
const ServiceConfig = require('./ServiceConfig')
|
||
|
|
||
|
class ServiceManager extends Injectable {
|
||
|
static SERVICE_STATE_STOPPED = 'stopped'
|
||
|
static SERVICE_STATE_ERROR = 'error'
|
||
|
static SERVICE_STATE_RUNNING = 'running'
|
||
|
|
||
|
_command_restart_service = '%%SERVICE%%'
|
||
|
_command_start_service = '%%SERVICE%%'
|
||
|
_command_stop_service = '%%SERVICE%%'
|
||
|
_command_reload_service = '%%SERVICE%%'
|
||
|
_command_enable_service = '%%SERVICE%%'
|
||
|
_command_disable_service = '%%SERVICE%%'
|
||
|
_command_daemon_reload = ''
|
||
|
|
||
|
_group_services_by = ' '
|
||
|
|
||
|
constructor(host) {
|
||
|
super()
|
||
|
this._host = host
|
||
|
}
|
||
|
|
||
|
async status(...services) {
|
||
|
throw new ImplementationError()
|
||
|
}
|
||
|
|
||
|
async install(config) {
|
||
|
throw new ImplementationError()
|
||
|
}
|
||
|
|
||
|
new_config() {
|
||
|
return new ServiceConfig()
|
||
|
}
|
||
|
|
||
|
async start(...services) {
|
||
|
await this._standard_format_execution(services, this._command_start_service)
|
||
|
}
|
||
|
|
||
|
async stop(...services) {
|
||
|
await this._standard_format_execution(services, this._command_stop_service)
|
||
|
}
|
||
|
|
||
|
async restart(...services) {
|
||
|
await this._standard_format_execution(services, this._command_restart_service)
|
||
|
}
|
||
|
|
||
|
async reload(...services) {
|
||
|
await this._standard_format_execution(services, this._command_reload_service)
|
||
|
}
|
||
|
|
||
|
async enable(...services) {
|
||
|
await this._standard_format_execution(services, this._command_enable_service)
|
||
|
}
|
||
|
|
||
|
async disable(...services) {
|
||
|
await this._standard_format_execution(services, this._command_disable_service)
|
||
|
}
|
||
|
|
||
|
async daemon_reload() {
|
||
|
await this._host.run_line_result(this._command_daemon_reload)
|
||
|
}
|
||
|
|
||
|
async _standard_format_execution(items, command, replace = '%%SERVICE%%') {
|
||
|
if ( this._group_services_by ) {
|
||
|
items = [items.join(this._group_services_by)]
|
||
|
}
|
||
|
|
||
|
for ( const item of items ) {
|
||
|
const result = await this._host.execute(command.replace(replace, item))
|
||
|
if ( result.exit_code !== 0 ) {
|
||
|
throw new Error('Error encountered while executing command: '+result.stderr.join('\n'))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = exports = ServiceManager
|