-- File to conrol FusionPBX Lua services/monitors -- @usage: -- # stop `call_flow_subscribe` monitor -- fs_cli -x "lua service flow stop" -- # stop `mwi_subscribe` monitor -- fs_cli -x "lua service mwi stop" require "resources.functions.config" local log = require "resources.functions.log".service local file = require "resources.functions.file" local destination = assert(argv[1], "No service name") local command = assert(argv[2], "No command") local function service_status(name) local pid_file = scripts_dir .. "/run/" .. name .. ".tmp" return not not file.exists(pid_file) end local function send_control(name, cmd) local event = freeswitch.Event("CUSTOM", "fusion::service::control") event:addHeader('service-name', name) event:addHeader('service-command', cmd) event:fire() end local known_commands = {} known_commands.status = function() log.noticef( 'service %s: %s', destination, service_status(destination) and 'RUNNING' or 'STOPPED' ) end; known_commands.start = function() if service_status(destination) then log.warningf('service %s already started', destination) return end --! @todo implemnt start command log.err('Not implemted yet') end; known_commands.restart = function() if not service_status(destination) then log.warningf('service %s not started', destination) return end --! @todo implemnt start command log.err('Not implemted yet') end; known_commands.stop = function() if not service_status(destination) then log.warningf('service %s not started', destination) return end log.noticef('stopping service: %s', destination) send_control(destination, 'stop') end; -- try handle known commands local cmd = known_commands[command] if cmd then return cmd() end log.warningf('send raw command `%s` to service %s', command, destination) -- forward command to service itself send_control(destination, command)