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

Thiago Glauco Sanchez thiagoglauco at ticursos.net
Sat Sep 18 06:11:52 PDT 2010


O Perl permite a criação de código mais enxuto, o que o torna campeão de 
competições de short code... e de obfuscation
O que também é legal quando a gente tem que fazer aquele scriptizinho 
fajuto para resolver algum problema atípico em 10 minutos, mas não é
algo para soluções que serão amplamente utilizadas e que passaram por 
manutenções e por diversos programadores.

short code => legal para resolver um problema pontual ou protótipo e 
descartar...
best practices => projetos e soluções que vou usar em clientes e 
ambientes de produção

Em 17/09/2010 17:12, Daniel de Oliveira Mantovani escreveu:
> 2010/9/17 "Flávio R. Lopes"<flavio.lopes em links.inf.br>:
>    
>> Olá Solli, como vai?
>> 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.
>> 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..." ?
>>      
> Cara, leia a thread de novo.
> perldoc -f map
> perldoc perlsyn
>
>
>    
>> Abraço,
>> Flávio
>>
>> Em 17-09-2010 09:35, Solli Honorio escreveu:
>>
>> 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
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>>      
>
>
>    


-- 
What is the sound of Perl? Is it not the sound of a wall that people have
stopped banging their heads against?
—Larry Wall

Thiago Glauco Sanchez
Intrutor Perl e Redes
www.ticursos.net



More information about the SaoPaulo-pm mailing list