[SP-pm] Tratamento de erros
Marcio - Google
marciorp at gmail.com
Wed Mar 13 11:26:29 PDT 2013
use strict;
use warnings;
use DBI;
use Asterisk::AMI;
use POSIX qw/strftime/;
$|=1;
print "Iniciando...\n";
print "[" . strftime('%d-%m-%Y %H:%M:%S', localtime) . "] PID: $$\n";
...
eval {
our $connDB = DBI->connect('DBI:mysql:ast_tm;host=bd07.internal.dc',
'***********', '************') ||
die "Nao foi possivel conectar na base de dados:
$DBI::errstr";
our $selTM = $connDB->prepare("SELECT ID_Lote, ID_Lote_TM, Numero, Texto,
FlgConfirmacao, FlgStatus_Lote, FlgStatus_TM FROM vw_TM_Pendente WHERE
(Prioridade > 6) LIMIT 100");
our $updTMc = $connDB->prepare("UPDATE MOV_Lote SET FlgStatus=? WHERE
ID=?");
our $updTMi = $connDB->prepare("UPDATE MOV_Lote_TM SET FlgStatus=?,
DtHrEnvio=?, OutChannel=? WHERE ID=?");
our $insTMl = $connDB->prepare("INSERT INTO LOG_TM_Main (ID_Lote,
DtHrEvento, FlgStatus, Status) VALUES (?, ?, ?, ?)");
...
$insTMl->execute($ID_Lote, strftime('%Y-%m-%d %H:%M:%S',
localtime), 13, $Status);
...
}
if ($@) {
$Log($@);
# Verifica qual foi o erro, se foi na conexão, conecta em outro server. Se
foi no insert, executa uma rotina de atualização da chave, etc.
...
}
our $AMI = Asterisk::AMI->new(PeerAddr => 'pbx16.internal.dc',
PeerPort => '5038',
Username => '*******',
Secret => '********'
) || die "Nao foi possivel conectar no
Asterisk!";
...
eval {
my $actid = $AMI->send_action({ ...
});
my $respact = $AMI->get_response($actid);
...
$chnResponse = $respact->{'Response'};
$chnMessage = $respact->{'Message'};
$chnChannel = $respact->{'PARSED'}->{'Channel'};
...
};
if (($@) || ($chnResponse eq "Error")) {
...
return 0;
}
else {
...
return 1;
}
Esse ai é um pedaço de um dos programas, por questões contratuais eu não
posso postar o código.
No primeiro "eval" quando ocorre erro de conexão ele na aborta o programa,
mais quando ocorre erro no insert, aborta. Tem algumas outras instruções
ali, como manipulação de data/hora e abertura de arquivos texto. Algumas
não abortam e são tratadas logo abaixo, outras abortam, principalmente os
erros evolvendo os arquivos texto.
No segundo "eval", quando o {'channel'} não vem aborta, ou quando a conexão
com o Asterisk caiu e eu tento executar o send_action. Ou outros erros não
abortam.
Precisava de uma forma que nenhum erro abortasse para poder trata-los ou
pelo menos gravar log.
[...]'s
Marcio
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130313/d4c34831/attachment.html>
More information about the SaoPaulo-pm
mailing list