diff --git a/asterisk/var_lib_asterisk/scripts/manutencaoDB/importaCdr.php b/asterisk/var_lib_asterisk/scripts/manutencaoDB/importaCdr.php index a3a8b6a3..7ec39389 100755 --- a/asterisk/var_lib_asterisk/scripts/manutencaoDB/importaCdr.php +++ b/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 { diff --git a/asterisk/var_lib_asterisk/scripts/manutencaoDB/importaCdrCustom.php b/asterisk/var_lib_asterisk/scripts/manutencaoDB/importaCdrCustom.php index 8f19672f..00c9b144 100755 --- a/asterisk/var_lib_asterisk/scripts/manutencaoDB/importaCdrCustom.php +++ b/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); -} +} \ No newline at end of file diff --git a/include/util/util.php b/include/util/util.php index 18880f24..2b426fdb 100755 --- a/include/util/util.php +++ b/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; +} \ No newline at end of file