Browse Source

Ajuste no script de importação da cdr (#148)

Descricao: ao ser executado vai verificar a existencia da tabela cdr, caso nao exista vai tentar criar.
Reviewed-on: SimplesIP/pabx-app#148
Co-authored-by: douglas.strappasson <douglas.strappasson@simplesip.com.br>
Co-committed-by: douglas.strappasson <douglas.strappasson@simplesip.com.br>
dev
douglas.strappasson 11 months ago committed by bruno
parent
commit
977aa80ce0
  1. 34
      asterisk/var_lib_asterisk/scripts/manutencaoDB/importaCdr.php
  2. 28
      asterisk/var_lib_asterisk/scripts/manutencaoDB/importaCdrCustom.php
  3. 152
      include/util/util.php

34
asterisk/var_lib_asterisk/scripts/manutencaoDB/importaCdr.php

@ -10,8 +10,13 @@ include("util/util.php");
$workFile = isset($argv[1]) && file_exists($argv[1]) ? $argv[1] : $defFile;
$pathLog = GetFilePath($argv[0]) . "resumo-cdr.log";
$cdr = InsereCdr($workFile,$pathLog);
print_r($cdr);
$existsTableCdr = ExistsTableCdr($pathLog);
if ($existsTableCdr == true) {
$cdr = InsereCdr($workFile, $pathLog);
print_r($cdr);
} else {
print_r($existsTableCdr);
}
function LimpaBuffer($line) {
$strLine = substr($line, -1) == ',' ? $line : ($line . ',');
@ -37,6 +42,31 @@ function LimpaBuffer($line) {
return $colunas;
}
/**
* verifica a existencia da tabela cdr no banco, caso ela nao exista tenta criar!
*/
function ExistsTableCdr($pathLog)
{
$conexao = pg_connect(GetDefStrDb());
try {
$table = "cdr";
$existsTableCdr = ExistsTableInDb($conexao, $table);
if (!$existsTableCdr){
$query = GetQueryCreateTableCdr();
if (!execQueryDb($conexao, $query, $pathLog)) {
GeraExcept("A tabela cdr não existe, e não pode ser criada através deste script! \n");
}
}
return true;
} catch (Exception $ex){
return $ex->getMessage();
}
}
function InsereCdr($workFile, $pathLog) {
try {

28
asterisk/var_lib_asterisk/scripts/manutencaoDB/importaCdrCustom.php

@ -8,8 +8,8 @@ ini_set('display_errors', 0);
$conexao = pg_connect(__GetConectString());
define('CONF_DATA_HORA_INI', '2020-06-01 00:00:00');
define('CONF_DATA_HORA_FIM', '2020-08-07 23:59:59');
define('CONF_DATA_HORA_INI', '2023-09-01 00:00:00');
define('CONF_DATA_HORA_FIM', '2023-10-01 23:59:59');
/*
* Calculo do tempo de execucao.
@ -24,7 +24,21 @@ $workFile = isset($argv[1]) && file_exists($argv[1]) ? $argv[1] : $defFile;
$pathLog = "/var/log/asterisk/resumo-cdr.log";
try {
/**
* verifica a existencia da tabela cdr no banco, caso ela nao exista tenta criar!
*/
$table = "cdr";
$existsTableCdr = ExistsTableInDb($conexao, $table);
if (!$existsTableCdr){
$query = GetQueryCreateTableCdr();
if (!execQueryDb($conexao, $query, $pathLog)) {
GeraExcept("A tabela cdr não existe, e não pode ser criada através deste script! \n");
}
}
/*
* Representa a as colunas da tabela "cdr" de acordo com a sequencia do Master.csv
*/
@ -46,7 +60,7 @@ try {
GeraExcept("Não foi possível abrir o arquivo! $workFile \n");
}
pg_query("truncate table cdr");
pg_query($conexao, "truncate table cdr");
$inclusao = 'OK';
$erroImport = 0;
$registros = 0;
@ -69,7 +83,7 @@ try {
$query = str_replace("{values}", $data, $queryModel);
if (!pg_query($query)) {
if (!pg_query($conexao, $query)) {
GeraExcept("Erro: {$query}", true);
}
} catch (Exception $ex) {
@ -82,7 +96,7 @@ try {
$query = "insert into ast_bilhetes(accountcode, src, dst, dcontext, clid, channel, dstchannel, lastapp, lastdata, calldate, duration, billsec, disposition, amaflags, uniqueid, userfield)
select coalesce(accountcode, ''), coalesce(src, ''), coalesce(dst, ''), coalesce(dcontext, ''), clid, coalesce(channel, ''), coalesce(dstchannel, ''), coalesce(lastapp, ''), coalesce(lastdata, ''), calldate, duration, billsec, coalesce(disposition, ''), strtoint(amaflags) , uniqueid, coalesce(userfield, '')
from cdr a where not exists(select '' from pbx_bilhetes where uniqueid = a.uniqueid);";
if (!pg_query($query)) {
if (!pg_query($conexao, $query)) {
$inclusao = 'Erro';
GeraExcept("Erro ao carregar cdr", true);
}
@ -203,4 +217,4 @@ function __RemoveAcentos($str, $upper = False) {
if ($upper)
$str = strtoupper($str);
return($str);
}
}

152
include/util/util.php

@ -2529,5 +2529,157 @@ function convert_format_strftime( $format ){
return preg_replace( $patterns, $replacements, $format );
}
/**
* Verifica a existencia de uma tabela no banco de dados do sistema.
* @param string $table
* @return bool
*/
function ExistsTableInDb($dbcon, string $table)
{
$query = "SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = '$table')";
$result = ExecQueryDb($dbcon, $query);
$true = 't';
if (!$result) {
return false;
}
$row = pg_fetch_row($result);
$existsTable = $row[0];
if ($existsTable == $true) {
return true;
} else {
return false;
}
}
/**
* Executa query no banco de dados.
* @param conexao $dbcon
* @param string $query
*/
function ExecQueryDb($dbcon, string $query, string $pathLog = null)
{
$exception = "\n Falha ao executar a query: \n" . $query;
try {
$begin = BeginTransactionDb($dbcon);
if (!$begin) {
GeraExcept($exception, true);
}
$result = pg_query($dbcon, $query);
if (!$result) {
GeraExcept($exception, true);
}
$commit = CommitTransactionDb($dbcon);
if (!$commit) {
GeraExcept($exception, true);
}
return $result;
} catch(Exception $ex) {
if ($pathLog){
WriteLog($ex->getMessage(), $pathLog);
}
RollbackTransactionDb($dbcon);
return false;
}
}
/**
* Inicia transação com o banco
* @param conexao $dbcon
* @return bollean
*/
function BeginTransactionDb($dbcon, string $pathLog = null){
try {
$result = pg_query($dbcon, 'begin');
if (!$result) {
GeraExcept("\n Falha ao iniciar a transação com o banco! \n", true);
}
return true;
} catch (Exception $ex) {
if ($pathLog){
WriteLog($ex->getMessage(), $pathLog);
}
return false;
}
}
/**
* realiza commit da transação com o banco
* @param conexao $dbcon
* @return bollean
*/
function CommitTransactionDb($dbcon, string $pathLog = null){
try {
$result = pg_query($dbcon, 'commit');
if (!$result) {
GeraExcept("\n Falha ao realizar commit da transação com o banco! \n", true);
}
return true;
} catch (Exception $ex) {
if ($pathLog){
WriteLog($ex->getMessage(), $pathLog);
}
return false;
}
}
/**
* realiza rollback da transação com o banco
* @param conexao $dbcon
* @return bollean
*/
function RollbackTransactionDb($dbcon, string $pathLog = null){
try {
$result = pg_query($dbcon, 'rollback');
if (!$result) {
GeraExcept("\n Falha ao realizar rollback da transação com o banco! \n", true);
}
return true;
} catch (Exception $ex) {
if ($pathLog){
WriteLog($ex->getMessage(), $pathLog);
}
return false;
}
}
/**
* realiza rollback da transação com o banco
* @return string $query
*/
function GetQueryCreateTableCdr(){
$query = "CREATE TABLE cdr (
id SERIAL NOT NULL PRIMARY KEY,
accountcode character varying(32),
src character varying(128),
dst character varying(128),
dcontext character varying(128),
clid character varying(128),
channel character varying(128),
dstchannel character varying(128),
lastapp character varying(128),
lastdata character varying(256),
calldate timestamp without time zone NOT NULL,
answerdate timestamp without time zone,
hangupdate timestamp without time zone,
duration integer DEFAULT 0 NOT NULL,
billsec integer DEFAULT 0 NOT NULL,
disposition character varying(128),
amaflags character varying(256),
uniqueid character varying(32),
userfield character varying(256));";
return $query;
}
Loading…
Cancel
Save