|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Define o tempo de ciclo, para obten<EFBFBD><EFBFBD>o de dados do servidor;
|
|
|
|
|
*/
|
|
|
|
|
define("TEMPO_CICLO", 1000000);
|
|
|
|
|
define("CICLOS_ABSR", 5);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Define os tipos de dados armazenados.
|
|
|
|
|
*/
|
|
|
|
|
define("TIPO_DADOS_CONTROLE", 'CTRL');
|
|
|
|
|
define("TIPO_DADOS_DAC", 'DAC');
|
|
|
|
|
define("TIPO_DADOS_AGENTE", 'AGT');
|
|
|
|
|
define("TIPO_DADOS_MSG", 'MSG');
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Arquivo para gera shmid da mem<EFBFBD>ria compartilhada.
|
|
|
|
|
*/
|
|
|
|
|
define("SHM_IPC_FILE_CONTROLE", 1376104504);
|
|
|
|
|
//define("SHM_IPC_FILE_CONTROLE", '/file_super/ipcserver_ssupervisor_controle.txt');
|
|
|
|
|
define("SHM_IPC_FILE_DAC", 1376104506);
|
|
|
|
|
//define("SHM_IPC_FILE_DAC", '/file_super/ipcserver_ssupervisor_dac.txt');
|
|
|
|
|
define("SHM_IPC_FILE_AGENTE", 1376060027);
|
|
|
|
|
//define("SHM_IPC_FILE_AGENTE", '/file_super/ipcserver_ssupervisor_agente.txt');
|
|
|
|
|
define("SHM_IPC_FILE_SESSAO", 1627400271);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Define o n<EFBFBD>mero m<EFBFBD>ximo de dacs movidorados.
|
|
|
|
|
*/
|
|
|
|
|
define("NUM_MAX_DACS_ON", 50);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Define o n<EFBFBD>mero maximo de agentes simultaneos.
|
|
|
|
|
*/
|
|
|
|
|
define("NUM_MAX_AGENTES_ON", 200);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Define o tamanho do seguemento(bytes) de dados para armazenar informacoes de um dac.
|
|
|
|
|
*/
|
|
|
|
|
define("TAM_SEGMENTO_DAC", 1024);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Define o tamanho do seguemento(bytes) de dados para armazenar informacoes de um agente.
|
|
|
|
|
*/
|
|
|
|
|
define("TAM_SEGMENTO_AGENTE", 1024);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Define o tamanho do seguemento(bytes) de dados para armazenar informacoes de controle
|
|
|
|
|
* para um agente ou dac.
|
|
|
|
|
*/
|
|
|
|
|
define("TAM_SEGMENTO_CONTROLE", 4096);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Define o tempo maximo em segundos que o servidor pode ficar sem responder para a aplicacao.
|
|
|
|
|
*/
|
|
|
|
|
define("TEMPO_MAX_SERVER_RESPONDE", 3);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Define o tamanho do seguemento(bytes) de dados para armazenar informacoes de controle da sess<EFBFBD>o do agente,
|
|
|
|
|
* corresponde ao tamanho da matricula.
|
|
|
|
|
*/
|
|
|
|
|
define("TAM_SEGMENTO_SESSAO_CONTROLE", 4);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Define o tamanho do seguemento(bytes) de dados para armazenar informacoes de uma sess<EFBFBD>o do agente.
|
|
|
|
|
*/
|
|
|
|
|
define("TAM_SEGMENTO_SESSAO", 32);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Define o tempo default para o agente atualizar as intormacoes no servidor.
|
|
|
|
|
*/
|
|
|
|
|
define("TEMPO_DEFAULT_AGENTE", 5);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Define o tempo de delay para encerrar a conexao do agente caso a aplicacao nao consiga atualizar
|
|
|
|
|
* as informacoes no servidor.
|
|
|
|
|
*/
|
|
|
|
|
define("TEMPO_DELAY_AGENTE", 3);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Arquivo para log de erros.
|
|
|
|
|
*/
|
|
|
|
|
$patLog = "/var/log/asterisk/supervisor.log";
|
|
|
|
|
|
|
|
|
|
function sCreateMemory($fileKey, $paramMalloc, $mode = SHM_ACESS_MODE_C, $perms = SHM_ACESS_PERMISSION) {
|
|
|
|
|
$readOnly = $mode == SHM_ACESS_MODE_R;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Variable identifies a memory block on operating system.
|
|
|
|
|
*/
|
|
|
|
|
$shmSystemKey = ShmGetId($fileKey);
|
|
|
|
|
//file_put_contents($fileKey, $shmSystemKey);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Calcular a mem<EFBFBD>ria necess<EFBFBD>ria.
|
|
|
|
|
*/
|
|
|
|
|
$memoryAllocated = $readOnly ? 0 : Malloc($paramMalloc);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Verifica se a memoria j<EFBFBD> existe
|
|
|
|
|
*/
|
|
|
|
|
$shmKey = 0;
|
|
|
|
|
$shmKey = ShmExist($shmSystemKey);
|
|
|
|
|
if ($shmKey && ($mode == SHM_ACESS_MODE_C)) {
|
|
|
|
|
ShmDelete($shmKey);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Abre ou cria um novo segmento de memoria compartilhada.
|
|
|
|
|
*/
|
|
|
|
|
$shmKey = ShmOpen($shmSystemKey, $mode, ($readOnly ? 0 : $perms), $memoryAllocated);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Verifica se a mem<EFBFBD>ria foi alocada com sucesso.
|
|
|
|
|
*/
|
|
|
|
|
if (!$shmKey) {
|
|
|
|
|
GeraExcept("Nao foi possivel allocar memoria para o servidor! $fileKey");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $shmKey;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function Malloc($param) {
|
|
|
|
|
/*
|
|
|
|
|
* Calculates necessary memory for 100 simultaneous processes.
|
|
|
|
|
*/
|
|
|
|
|
return !count($param) ? 0 : ( $param[0] + ( $param[1] * $param[2] ) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetInfoControle() {
|
|
|
|
|
try {
|
|
|
|
|
/*
|
|
|
|
|
* Verifica se o server esta trabalhando.
|
|
|
|
|
*/
|
|
|
|
|
$shmKey = sCreateMemory(SHM_IPC_FILE_CONTROLE, 0, SHM_ACESS_MODE_R, 0);
|
|
|
|
|
|
|
|
|
|
if (!$shmKey) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* // segmento para avaliar problema leitura //
|
|
|
|
|
* Pega o tamanho do bloco para leitura.
|
|
|
|
|
* $sizeControle = ShmSize($shmkey);
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
$dadosControle = ShmReadVar($shmKey, 0, TAM_SEGMENTO_CONTROLE);
|
|
|
|
|
|
|
|
|
|
if (is_array($dadosControle)) {
|
|
|
|
|
return $dadosControle;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function RetornaDadosDac($paramControle, $dacUser = array()) {
|
|
|
|
|
try {
|
|
|
|
|
/*
|
|
|
|
|
* Verifica se o server esta trabalhando.
|
|
|
|
|
*/
|
|
|
|
|
$shmKey = sCreateMemory(SHM_IPC_FILE_DAC, 0, SHM_ACESS_MODE_R, 0);
|
|
|
|
|
|
|
|
|
|
if (!$shmKey) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Pega o tamanho do bloco para leitura.
|
|
|
|
|
*/
|
|
|
|
|
$sizeControle = $paramControle[TIPO_DADOS_DAC];
|
|
|
|
|
$dadosDac = ShmReadVar($shmKey, 0, $sizeControle);
|
|
|
|
|
|
|
|
|
|
if (is_array($dadosDac)) {
|
|
|
|
|
|
|
|
|
|
if (Count($dacUser)) {
|
|
|
|
|
$arDacs = array();
|
|
|
|
|
foreach ($dacUser as $dac) {
|
|
|
|
|
$arDacs[$dac] = $dadosDac[$dac];
|
|
|
|
|
}
|
|
|
|
|
$dadosDac = $arDacs;
|
|
|
|
|
}
|
|
|
|
|
return $dadosDac;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function RetornaDadosAgt($paramControle) {
|
|
|
|
|
try {
|
|
|
|
|
/*
|
|
|
|
|
* Verifica se o server esta trabalhando.
|
|
|
|
|
*/
|
|
|
|
|
$shmKey = sCreateMemory(SHM_IPC_FILE_AGENTE, 0, SHM_ACESS_MODE_R, 0);
|
|
|
|
|
|
|
|
|
|
if (!$shmKey) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Pega o tamanho do bloco para leitura.
|
|
|
|
|
*/
|
|
|
|
|
$sizeControle = $paramControle[TIPO_DADOS_AGENTE];
|
|
|
|
|
$dadosAgt = ShmReadVar($shmKey, 0, $sizeControle);
|
|
|
|
|
|
|
|
|
|
if (is_array($dadosAgt)) {
|
|
|
|
|
return $dadosAgt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function LimpaSessaoAgente($shmkey, $pos) {
|
|
|
|
|
$offSet = $pos * TAM_SEGMENTO_SESSAO_CONTROLE;
|
|
|
|
|
$data = str_repeat(' ', TAM_SEGMENTO_SESSAO_CONTROLE);
|
|
|
|
|
ShmWrite($shmkey, $data, $offSet);
|
|
|
|
|
|
|
|
|
|
$offSet = (NUM_MAX_AGENTES_ON * TAM_SEGMENTO_SESSAO_CONTROLE) + ($pos * TAM_SEGMENTO_SESSAO);
|
|
|
|
|
$data = str_repeat(' ', TAM_SEGMENTO_SESSAO);
|
|
|
|
|
ShmWrite($shmkey, $data, $offSet);
|
|
|
|
|
}
|