<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Olá Solli, como vai?<br>
Então, inicialmente eu fiz o loop com o while. Mas eu achei melhor (no
sentido de fazer um código mais enxuto) usar o map.<br>
Desculpe minha ignorância, mas qual a diferença entre eu fazer
utlizando o map ou fazer utlizando o while ? Porque você disse que "já
foi muiot mais grave..." ?<br>
<br>
Abraço,<br>
Flávio<br>
<br>
Em 17-09-2010 09:35, Solli Honorio escreveu:
<blockquote
cite="mid:AANLkTik-v0EWQPDam=C47-rHTA9eGD0RCoo4M7zZOh0v@mail.gmail.com"
type="cite">Flávio,<br>
<br>
Ainda não deu uma olhada no resto do teu código, mas o primeiro ponto
que chama a atenção é você utilizar o map para fazer o loop. No passado
isto já foi muito mais grave, mas o fato é que o map não é para fazer
este tipo de loop.<br>
<br>
A melhor alternativa seria utilizar o while ou o for, tipo :<br>
<br>
<span style="font-family: courier new,monospace;"><codigo></span><br
style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">$ping =
Net::Ping->new("tcp", 22);</span><br
style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">while ( my $server
= key %servidores ) {</span><br
style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> if (!
$ping->ping($server, 2) ) {</span><br
style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> # faça alguma
coisa e vá para o próximo elemento</span><br
style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> next</span><br
style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> }</span><br
style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> if (
$obj->exec( { src => $_ . ':/path/de/origem', dest =>
$servidor{$_} } ) ) {</span><br
style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">
log_info("sincronização com o servidor $server ocorreu com sucesso") </span><br
style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> else {</span><br
style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">
log_error("sincronização com o servidor $server terminou com erros " .
$obj->status . ". A saida de erro é : " . $obj->err );</span><br
style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> }</span><br
style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">} </span><br
style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"></codigo></span><br>
<br>
Lembrando que o código acima é apenas um exemplo. Eu recomendo
fortemente que você pense numa formatação do log que seja fácil a
automação da análise do mesmo. No equinócio passado eu escrevi sobre
isto (<a moz-do-not-send="true"
href="http://sao-paulo.pm.org/artigo/2010/LogApplicacao">http://sao-paulo.pm.org/artigo/2010/LogApplicacao</a>).<br>
<br>
Abraços,<br>
<br>
Solli M. Honório<br style="font-family: courier new,monospace;">
<br>
<div class="gmail_quote">Em 17 de setembro de 2010 08:44, "Flávio R.
Lopes" <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:flavio.lopes@links.inf.br">flavio.lopes@links.inf.br</a>></span>
escreveu:<br>
<blockquote class="gmail_quote"
style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Em
17-09-2010 05:59, Otávio Fernandes escreveu:
<div>
<div class="h5"><br>
<blockquote class="gmail_quote"
style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
2010/9/17 "Flávio R. Lopes"<<a moz-do-not-send="true"
href="mailto:flavio.lopes@links.inf.br" target="_blank">flavio.lopes@links.inf.br</a>>:<br>
<br>
<blockquote class="gmail_quote"
style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Olá pessoal.<br>
<br>
Fiz um programinha que sincroniza diretórios entre servidores. Como são<br>
vários servidores, gostaria de gerar tipo de um "log" que irá me mostrar<br>
quais as conexões (transferências) que deram certo e quais falharam.<br>
Por exemplo, gostaria de gerar um arquivo de log que me mostrasse mais
ou<br>
menos o seguinte:<br>
<br>
Servidor server1 => Transferência Ok<br>
Servidor server2 => Transferência Ok<br>
Servidor server3 => Falhou<br>
(and so on...)<br>
<br>
O script é este: git://<a moz-do-not-send="true"
href="http://gist.github.com/583692.git" target="_blank">gist.github.com/583692.git</a><br>
<br>
Tentei jogar esta parte (abaixo) dentro de um "if", mas não funcionou:<br>
map {<br>
$obj->exec( { src => $_ . ':/path/de/origem', dest =>
$servidor{$_} } )<br>
or warn "A transferencia falhou!\n"<br>
} keys %servidor;<br>
<br>
<br>
Uma outra dúvida minha é a seguinte: Como eu usei a função "map" para
tratar<br>
os elementos do meu Hash, quando eu disparo o script, ele
automaticamente<br>
tenta fazer a conexão com TODOS os servidores listados dentro do Hash
de uma<br>
única vez, ou seja, ele vai abrir tantas conexões quantas estiverem
listadas<br>
no Hash. Constatei isto usando o "netstat -n"<br>
<br>
Daria para fazer um controle, tipo, só abrir uma conexão, quando uma
outra<br>
for finalizada? Imaginei também testar a conexão, ou seja, pode ser que
um<br>
determinado server não esteja "no ar"...<br>
<br>
Vocês podem me dar uma dica?<br>
<br>
Abraço,<br>
Flávio<br>
<br>
_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a moz-do-not-send="true" href="mailto:SaoPaulo-pm@pm.org"
target="_blank">SaoPaulo-pm@pm.org</a><br>
<a moz-do-not-send="true"
href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
<br>
</blockquote>
Flávio,<br>
<br>
Não faz muito sentido ele abrir conexões antes de terminar a última,
visto que<br>
o "map" está fazendo uma chamada síncrona para o File::Rsync.<br>
<br>
Você tem certeza de que isso está vindo do seu script?<br>
<br>
</blockquote>
</div>
</div>
Olá Otávio.<br>
Bem, não sei ao certo, pois dei o comando "netstat -n" antes de
disparar o script e não apareciam as conexões com os servidores
remotos. Realmente não são listados todos os servidores, porém, como
ainda estou testando o script, em alguns servidores ainda não tinham
dados para sincronizar e em outros haviam. Vou refazer os testes aqui.<br>
E quanto a geração de logs, você poderia me sugerir alguma coisa?<br>
<br>
<blockquote class="gmail_quote"
style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
um abraço,<br>
<br>
<br>
</blockquote>
<div>
<div class="h5"><br>
_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a moz-do-not-send="true" href="mailto:SaoPaulo-pm@pm.org"
target="_blank">SaoPaulo-pm@pm.org</a><br>
<a moz-do-not-send="true"
href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
</div>
</div>
</blockquote>
</div>
<br>
<br clear="all">
<br>
-- <br>
"o animal satisfeito dorme". - Guimarães Rosa<br>
<pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
SaoPaulo-pm mailing list
<a class="moz-txt-link-abbreviated" href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a>
<a class="moz-txt-link-freetext" href="http://mail.pm.org/mailman/listinfo/saopaulo-pm">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a></pre>
</blockquote>
<br>
</body>
</html>