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:
@@ -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
96
admin/process.php
Normal 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
88
admin/voipmonitor.php
Normal 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();
|
||||
|
||||
?>
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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`
|
||||
--
|
||||
|
||||
220
functions/functions.process.php
Normal file
220
functions/functions.process.php
Normal 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 "";
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
?>
|
||||
|
||||
Reference in New Issue
Block a user