[SP-pm] Como testar conexões remotas?

Solli Honorio shonorio at gmail.com
Fri Sep 17 05:35:15 PDT 2010


Flávio,

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.

A melhor alternativa seria utilizar o while ou o for, tipo :

<codigo>
$ping = Net::Ping->new("tcp", 22);

while ( my $server = key %servidores ) {
  if (! $ping->ping($server, 2) ) {
    # faça alguma coisa e vá para o próximo elemento
    next
  }

  if ( $obj->exec( { src => $_ . ':/path/de/origem', dest => $servidor{$_} }
) ) {
    log_info("sincronização com o servidor $server ocorreu com sucesso")
  else {
    log_error("sincronização com o servidor $server terminou com erros " .
$obj->status . ". A saida de erro é : " . $obj->err );
  }
}
</codigo>

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 (
http://sao-paulo.pm.org/artigo/2010/LogApplicacao).

Abraços,

Solli M. Honório

Em 17 de setembro de 2010 08:44, "Flávio R. Lopes" <
flavio.lopes em links.inf.br> escreveu:

> Em 17-09-2010 05:59, Otávio Fernandes escreveu:
>
>  2010/9/17 "Flávio R. Lopes"<flavio.lopes em links.inf.br>:
>>
>>
>>> Olá pessoal.
>>>
>>> Fiz um programinha que sincroniza diretórios entre servidores. Como são
>>> vários servidores, gostaria de gerar tipo de um "log" que irá me mostrar
>>> quais as conexões (transferências) que deram certo e quais falharam.
>>> Por exemplo, gostaria de gerar um arquivo de log que me mostrasse mais ou
>>> menos o seguinte:
>>>
>>> Servidor server1 =>  Transferência Ok
>>> Servidor server2 =>  Transferência Ok
>>> Servidor server3 =>  Falhou
>>> (and so on...)
>>>
>>> O script é este: git://gist.github.com/583692.git
>>>
>>> Tentei jogar esta parte (abaixo) dentro de um "if", mas não funcionou:
>>> map {
>>>    $obj->exec( { src =>  $_ . ':/path/de/origem', dest =>  $servidor{$_}
>>> } )
>>>      or warn "A transferencia falhou!\n"
>>> } keys %servidor;
>>>
>>>
>>> Uma outra dúvida minha é a seguinte: Como eu usei a função "map" para
>>> tratar
>>> os elementos do meu Hash, quando eu disparo o script, ele automaticamente
>>> tenta fazer a conexão com TODOS os servidores listados dentro do Hash de
>>> uma
>>> única vez, ou seja, ele vai abrir tantas conexões quantas estiverem
>>> listadas
>>> no Hash. Constatei isto usando o "netstat -n"
>>>
>>> Daria para fazer um controle, tipo, só abrir uma conexão, quando uma
>>> outra
>>> for finalizada? Imaginei também testar a conexão, ou seja, pode ser que
>>> um
>>> determinado server não esteja "no ar"...
>>>
>>> Vocês podem me dar uma dica?
>>>
>>> Abraço,
>>> Flávio
>>>
>>> _______________________________________________
>>> SaoPaulo-pm mailing list
>>> SaoPaulo-pm em pm.org
>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>
>>>
>> Flávio,
>>
>> Não faz muito sentido ele abrir conexões antes de terminar a última, visto
>> que
>> o "map" está fazendo uma chamada síncrona para o File::Rsync.
>>
>> Você tem certeza de que isso está vindo do seu script?
>>
>>
> Olá Otávio.
> 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.
> E quanto a geração de logs, você poderia me sugerir alguma coisa?
>
>  um abraço,
>>
>>
>>
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
"o animal satisfeito dorme". - Guimarães Rosa
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20100917/06ee377f/attachment.html>


More information about the SaoPaulo-pm mailing list