2
0
mirror of https://github.com/ACSPRI/queXS synced 2024-04-02 12:12:16 +00:00

Added VoIP watch from browser (executes background PHP file process.php)

This commit is contained in:
azammitdcarf
2008-12-01 23:42:50 +00:00
parent bf03b51bca
commit 30557ffadf
8 changed files with 449 additions and 2 deletions

View File

@@ -82,6 +82,11 @@ print "<ul><li><a href=\"javascript:link('mainobj','timezonetemplate.php');\">"
print "<li><a href=\"javascript:link('mainobj','shifttemplate.php');\">" . T_("Set default shift times") . "</a></li>";
print "<li><a href=\"javascript:link('mainobj','callrestrict.php');\">" . T_("Set call restriction times") . "</a></li></ul></li>";
if (VOIP_ENABLED)
{
print "<li><h3>" . T_("VoIP") . "</h3>";
print "<ul><li><a href=\"javascript:link('mainobj','voipmonitor.php');\">" . T_("Start and monitor VoIP") . "</a></li></ul></li>";
}
print "</ul></div>";

96
admin/process.php Normal file
View File

@@ -0,0 +1,96 @@
<?
/**
* Run the VoIP monitoring process and monitor it via the database
*
*
* This file is part of queXS
*
* queXS is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* queXS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with queXS; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*
* @author Adam Zammit <adam.zammit@deakin.edu.au>
* @copyright Deakin University 2007,2008
* @package queXS
* @subpackage admin
* @link http://www.deakin.edu.au/dcarf/ queXS was writen for DCARF - Deakin Computer Assisted Research Facility
* @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2
*
*/
/**
* Configuration file
*/
include ("../config.inc.php");
/**
* Database file
*/
include ("../db.inc.php");
/**
* Process
*/
include ("../functions/functions.process.php");
/**
* VoIP functions
*/
include("../functions/functions.voip.php");
/**
* Update the database with the new data from the running script
*
* @param string $buffer The data to append to the database
* @return string Return a blank string to empty the buffer
*/
function update_callback($buffer)
{
global $process_id;
process_append_data($process_id,"<p>" . $buffer . "</p>");
return ""; //empty buffer
}
//get the arguments from the command line (this process_id)
if ($argc != 2) exit();
$process_id = $argv[1];
//register an exit function which will tell the database we have ended
register_shutdown_function('end_process',$process_id);
//all output send to database instead of stdout
ob_start('update_callback',2);
print "Monitoring " . VOIP_SERVER;
$t = new voipWatch();
$t->connect(VOIP_SERVER,VOIP_ADMIN_USER,VOIP_ADMIN_PASS,true);
if ($t->isConnected())
{
$t->watch($process_id);
}
else
{
print T_("Cannot connect to VoIP Server");
}
ob_get_contents();
ob_end_clean();
?>

88
admin/voipmonitor.php Normal file
View File

@@ -0,0 +1,88 @@
<?
/**
* Run the VoIP monitoring process and monitor it via the database
*
*
* This file is part of queXS
*
* queXS is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* queXS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with queXS; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*
* @author Adam Zammit <adam.zammit@deakin.edu.au>
* @copyright Deakin University 2007,2008
* @package queXS
* @subpackage admin
* @link http://www.deakin.edu.au/dcarf/ queXS was writen for DCARF - Deakin Computer Assisted Research Facility
* @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2
*
*/
/**
* Configuration file
*/
include ("../config.inc.php");
/**
* Database file
*/
include ("../db.inc.php");
/**
* Process
*/
include ("../functions/functions.process.php");
/**
* XHTML functions
*/
include("../functions/functions.xhtml.php");
if (isset($_GET['watch']))
{
//start watching process
start_process(realpath(dirname(__FILE__) . "/process.php"));
}
$p = is_process_running();
if ($p)
{
if (isset($_GET['kill']))
kill_process($p);
xhtml_head(T_("Monitor VoIP Process"),true,false,false,false,10);
print "<h1>" . T_("Running process:") . " $p</h1>";
print "<h2>" . T_("Note: This page will automatically refresh every 10 seconds") . "</h2>";
if (is_process_killed($p))
print "<h3>" . T_("Kill signal sent: Please wait... (Note: Process will be stalled until there is activity on the VoIP Server)") . "</h3>";
else
print "<p><a href='?kill=kill'>" . T_("Kill the running process") . "</a> ". T_("(requires activity on the VoIP Server to take effect)") . "</p>";
print process_get_data($p);
}
else
{
xhtml_head(T_("Monitor VoIP Process"));
print "<p><a href='?watch=watch'>" . T_("Click here to begin monitoring the VoIP Process") . "</a></p>";
}
xhtml_foot();
?>

View File

@@ -69,6 +69,16 @@ if (!defined('VOIP_ENABLED')) define('VOIP_ENABLED',false);
*/
if (!defined('VOIP_SERVER')) define('VOIP_SERVER','asterisk.dcarf');
/**
* The Asterisk server username for the monitor interface
*/
if (!defined('VOIP_ADMIN_USER')) define('VOIP_ADMIN_USER','admin');
/**
* The Asterisk server password for the monitor interface
*/
if (!defined('VOIP_ADMIN_PASS')) define('VOIP_ADMIN_PASS','amp111');
/**
* The meet me room id for the VOIP Server
*/
@@ -110,6 +120,12 @@ if (!defined('QUEXS_URL')) define('QUEXS_URL','http://' . $_SERVER['SERVER_NAME'
if (!defined('DEFAULT_LOCALE')) define('DEFAULT_LOCALE','en');
/**
* PHP Executables (for forking when running background processes)
*/
if (!defined('WINDOWS_PHP_EXEC')) define('WINDOWS_PHP_EXEC', "start /b php");
if (!defined('PHP_EXEC')) define('PHP_EXEC', "php");
/**
* Path to ADODB
*/

View File

@@ -429,6 +429,21 @@ INSERT INTO `outcome_type` VALUES(5, 'Appointments');
-- --------------------------------------------------------
--
-- Table structure for table `process`
--
CREATE TABLE `process` (
`process_id` bigint(20) NOT NULL auto_increment,
`start` datetime NOT NULL,
`stop` datetime default NULL,
`kill` tinyint(1) NOT NULL default '0',
`data` longtext collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`process_id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE=utf8_unicode_ci;
-- --------------------------------------------------------
--
-- Table structure for table `questionnaire`
--

View File

@@ -0,0 +1,220 @@
<?
/**
* Functions related to the backgrounding of processes and the process table in the database
*
*
* This file is part of queXS
*
* queXS is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* queXS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with queXS; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*
* @author Adam Zammit <adam.zammit@deakin.edu.au>
* @copyright Deakin University 2007,2008
* @package queXS
* @subpackage functions
* @link http://www.deakin.edu.au/dcarf/ queXS was writen for DCARF - Deakin Computer Assisted Research Facility
* @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2
*
*/
/**
* Configuration file
*/
include_once(dirname(__FILE__).'/../config.inc.php');
/**
* Database file
*/
include_once(dirname(__FILE__).'/../db.inc.php');
/**
* Determine if a process is already running
*
* @return bool|int Return false if no process already running, else return the process_id
*/
function is_process_running()
{
global $db;
$sql = "SELECT `process_id`
FROM `process`
WHERE `stop` IS NULL";
$rs = $db->GetRow($sql);
if (!empty($rs))
return $rs['process_id'];
return false;
}
/**
* Determine if this process should be killed
*
* @param int $process_id The process id
* @return bool Return false if not to be killed, else return true
*/
function is_process_killed($process_id)
{
global $db;
$sql = "SELECT `process_id`
FROM `process`
WHERE `kill` = 1
AND `stop` IS NULL
AND `process_id` = '$process_id'";
$rs = $db->GetRow($sql);
if (!empty($rs))
return true;
return false;
}
/**
* Start a process
*
* @param string $filename The PHP file of the process to run
* @return bool|int False if we couldnt start a process, else the process id from the process table
*
* @link http://www.djkaty.com/php/fork Cross platform process tutorial (this code adapted from here)
*/
function start_process($filename)
{
//create a record only if no process already running
global $db;
$db->StartTrans();
$process = is_process_running();
if ($process == false)
{
$sql = "INSERT INTO `process` (`process_id`,`start`,`stop`,`kill`,`data`)
VALUES (NULL,NOW(),NULL,0,'')";
$rs = $db->Execute($sql);
$args = $db->Insert_ID();
//execute the process in the background - pass the process_id as the first argument
if (substr(PHP_OS, 0, 3) == 'WIN')
$proc = popen(WINDOWS_PHP_EXEC . ' "' . $filename . '" ' . $args, 'r');
else
$proc = popen(PHP_EXEC . ' ' . $filename . ' ' . $args . ' &', 'r');
pclose($proc);
}
else
$db->FailTrans();
$db->CompleteTrans();
if (isset($args))
return $args;
return false;
}
/**
* Signal to kill a process
*
* @param int $process_id The process id
*
*/
function kill_process($process_id)
{
global $db;
$sql = "UPDATE `process`
SET `kill` = '1'
WHERE `process_id` = '$process_id'";
$db->Execute($sql);
}
/**
* End a process
*
* @param int $process_id The process id
*
*/
function end_process($process_id)
{
global $db;
$sql = "UPDATE `process`
SET `stop` = NOW()
WHERE `process_id` = '$process_id'";
$db->Execute($sql);
}
/**
* Append data to a process
*
* @param int $process_id The process id
* @param string $data Data to append to this process
*
*/
function process_append_data($process_id,$data)
{
global $db;
$data = $db->qstr($data,get_magic_quotes_gpc());
$sql = "UPDATE `process`
SET `data` = CONCAT(`data`, $data)
WHERE `process_id` = '$process_id'";
$db->Execute($sql);
}
/**
* Get data from a process
*
* @param int $process_id The process id
* @return string Data from this process or an empty string if none available
*
*/
function process_get_data($process_id)
{
global $db;
$sql = "SELECT `data`
FROM `process`
WHERE `process_id` = '$process_id'";
$rs = $db->GetRow($sql);
if (!empty($rs))
return $rs['data'];
return "";
}
?>

View File

@@ -347,13 +347,18 @@ class voipWatch extends voip {
*
*
*/
function watch()
function watch($process_id = false)
{
/**
* Database file
*/
include_once(dirname(__FILE__).'/../db.inc.php');
/**
* Process file
*/
if ($process_id) include_once(dirname(__FILE__).'/../functions/functions.process.php');
$line = "";
if ($this->socket === false)
@@ -482,6 +487,8 @@ class voipWatch extends voip {
@flush();
if ($process_id) $this->keepWatching = !is_process_killed($process_id);
} while ($this->keepWatching);
}

View File

@@ -36,7 +36,7 @@
include("../functions/functions.voip.php");
$t = new voipWatch();
$t->connect("asterisk.dcarf","admin","amp111",true);
$t->connect(VOIP_SERVER,VOIP_ADMIN_USER,VOIP_ADMIN_PASS,true);
$t->watch();
?>