From 46f4f2cc29677cde77d85edc02ed3369c5f2d21e Mon Sep 17 00:00:00 2001 From: Mark Crane Date: Thu, 22 Nov 2012 19:36:09 +0000 Subject: [PATCH] Add a script to monitor sip profiles and restart them if necessary. --- includes/install/scripts/monitor.lua | 92 ++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 includes/install/scripts/monitor.lua diff --git a/includes/install/scripts/monitor.lua b/includes/install/scripts/monitor.lua new file mode 100644 index 0000000000..0b86958a93 --- /dev/null +++ b/includes/install/scripts/monitor.lua @@ -0,0 +1,92 @@ +-- monitor.lua +-- Part of FusionPBX +-- Copyright (C) 2010 Mark J Crane +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- 1. Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- 2. Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +-- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +-- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +-- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. + +--define general settings + tmp_file = "/usr/local/freeswitch/log/monitor.tmp"; + +--used to stop the lua service + local file = assert(io.open(tmp_file, "w")); + file:write("remove this file to stop the script"); + +--add the trim function + function trim(s) + return s:gsub("^%s+", ""):gsub("%s+$", "") + end + +--check if a file exists + function file_exists(name) + local f=io.open(name,"r") + if f~=nil then io.close(f) return true else return false end + end + +--create the api object + api = freeswitch.API(); + +--run lua as a service + while true do + + --exit the loop when the file does not exist + if (not file_exists(tmp_file)) then + break; + end + + --check to see if the sip profile is running + sip_profile = "internal"; + result = trim(api:execute("sofia", "status profile "..sip_profile)); + if (result == "Invalid Profile!") then + --start the sip profile + result = trim(api:execute("sofia", "profile "..sip_profile.." start")); + freeswitch.consoleLog("NOTICE", "monitor.lua: "..sip_profile.." is not running starting the sip profile.\n"); + --run sofia recover + api = freeswitch.API(); + result = api:execute("sofia", "recover"); + freeswitch.consoleLog("NOTICE", "monitor.lua - sofia recover\n"); + end + result = ""; + + --check to see if the sip profile is running + sip_profile = "external"; + result = trim(api:execute("sofia", "status profile "..sip_profile)); + if (result == "Invalid Profile!") then + --start the sip profile + result = trim(api:execute("sofia", "profile "..sip_profile.." start")); + freeswitch.consoleLog("NOTICE", "monitor.lua: "..sip_profile.." is not running starting the sip profile.\n"); + --run sofia recover + api = freeswitch.API(); + result = api:execute("sofia", "recover"); + freeswitch.consoleLog("NOTICE", "monitor.lua - sofia recover\n"); + end + result = ""; + + --send a message to the log + --freeswitch.consoleLog("NOTICE", "monitor.lua "..result.."\n"); + + --slow the loop down + os.execute("sleep 3"); + + --testing exit immediately + --break; + end \ No newline at end of file