You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
3.6 KiB

#!/usr/bin/php -q
<?php
/* * *****************************************************************************************
* Data: 15/05/2015.
* Autor: Amarildo Pereira
* Descri<EFBFBD><EFBFBD>o: Prove dados para sincroniza<EFBFBD><EFBFBD>o de informa<EFBFBD><EFBFBD>es para agente e supervisor.
* Objetivo: Diminuir a concorrencia ao banco de dados, devido a cada agente ou super-
* visor fazerem consultas constantes para manter suas interfaces atualizadas. O servi<EFBFBD>o
* devera acessar o banco de diponibilizar os dados em memoria para sincroniza<EFBFBD><EFBFBD>o das
* aplicac<EFBFBD>es clientes.
*
* Funcoes:
* -sGetConnection -> Retorna uma conex<EFBFBD>o para o banco de dados.
* -sGravaLog -> Grava log de erros gerados pelo servi<EFBFBD>o.
* -sCreateMemory -> Aloca memoria para sincroniza<EFBFBD><EFBFBD>o de dados.
* ***************************************************************************************** */
error_reporting(E_ERROR);
ini_set('display_errors', 0);
ini_set("memory_limit", "512M");
/*
* Inclui fun<EFBFBD>oes gen<EFBFBD>ricas.
*/
include("util/util.php");
include("util/sharedMem.php");
include("funcoes/ssupervisor_aux.php");
/*
* Conex<EFBFBD>o com o banco de dados.
*/
$conn = false;
/*
* Controla mensagens de erro.
*/
$ultMsg = '';
try {
/*
* Armazena dados da ultima consulta.
*/
$oldAgt = array();
$olDac = array();
$numCile = 0;
$shmKeyAgt = sCreateMemory(SHM_IPC_FILE_AGENTE, array(0, NUM_MAX_AGENTES_ON, TAM_SEGMENTO_AGENTE));
echo "IdFile: $shmKeyAgt\n";
while (true) {
try {
/*
* Estabelece uma conex<EFBFBD>o com o banco de dados.
*/
if (!$conn) {
$conn = sGetConnection();
}
/*
* Basicamente copia os dados da tabela supervisor agentes, e informa<EFBFBD><EFBFBD>es d
* as filas para memoria
*/
//$olDac = SetDadosDac($conn, $shmKeyDac, $olDac);
/*
* Basicamente copia os dados da tabela supervisor agentes, e informa<EFBFBD><EFBFBD>es d
* as filas para memoria
*/
$oldAgt = SetDadosAgente($conn, $shmKeyAgt, $oldAgt);
/*
* Ciclo de atualiza<EFBFBD><EFBFBD>o.
*/
usleep((1000000 * 10));
} catch (Exception $ex) {
echo $ex->getMessage();
}
}
/*
* Fecha os blocos de mem<EFBFBD>ria.
*/
ShmClose($shmKeyAgt);
} catch (Exception $ex) {
echo $ex->getMessage();
}
function sGetConnection() {
/*
* Se precisar de uma conex<EFBFBD>o diferente da padr<EFBFBD>o, espcifique sua propria connection string.
* $connStr = sprintf("host='%s' port='%s' dbname='%s' user='%s' password='%s'", '127.0.0.1', '5432', 'pbx', 'contacte', 'ctepgSQL');
*/
$connStr = '';
$connStr = !$connStr ? GetDefStrDb() : $connStr;
$conn = pg_pconnect($connStr);
if (!$conn) {
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel estabelecer uma conex<EFBFBD>o com o banco de dados!");
}
return $conn;
}
function SetDadosAgente($conn, $shmKeyAgt, $oldAgt = array()) {
$arDadosAgente = array();
$query = "select * from pbx_supervisor_agentes";
$result = pg_query($conn, $query);
if (!$result) {
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel consultar os dados do agente!");
}
while ($dados = pg_fetch_array($result)) {
$arDadosAgente[$dados["nome"]] = $dados;
}
$arDadosAgente = serialize($arDadosAgente);
if (!ShmWrite($shmKeyAgt, $arDadosAgente, 0)) {
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel gravar os dados do agente!");
}
return $arDadosAgente;
}
?>