[Rio-pm] Ajuda com Threads - tempo de abertura

Thiago Glauco Sanchez thiagoglauco em ticursos.net
Segunda Julho 12 14:33:34 PDT 2010


Se bem que... o cara já tem o caminho das pedras... tava bom para ele 
começar a ler o código e os manuais...
Hoje não posso ajudar mais pq tenho aulas de Perl para ministrar...

Leia os Manuais e poste mais dúvidas... se postar levianamente Trolls 
podem aparecer.

Em 12/07/2010 17:59, Bruno Buss escreveu:
> Talvez você queira diminuir o timeout padrão:
> sub PING_TIMEOUT () { 5 }
> (No seu script era 1 segundo se não me engano)
>
> No POE::Component::Client::Ping->spawn, talvez você queira passar a 
> opção Parallelism, ex:
> POE::Component::Client::Ping->spawn(
>   Alias   => 'pinger',        # The component's name will be "pinger".
>   Timeout => PING_TIMEOUT,    # The default ping timeout.
>   Parallelism => 128
> );

No seu código o paralelismo era 250...

>
> 2010/7/12 João André Simioni <jasimioni em gmail.com 
> <mailto:jasimioni em gmail.com>>
>
>     Thiago,
>
>     dando uma bem de vagabundo, não li nada  do POE, só modifiquei o
>     código abaixo para pingar todos os meus Hosts.
>
>     Mas ele está fazendo poucos processos paralelos. O tempo total de
>     testes está 11 minutos com o POE, e o load nem faz cócegas. Sabem
>     fácil como mexer nisso?
>
>     Obrigado
>
>     2010/7/12 Thiago Glauco Sanchez <thiagoglauco em ticursos.net
>     <mailto:thiagoglauco em ticursos.net>>:
>     > Puxa... eu sou muito "toupeira"... já tem código de exemplo para
>     isso feito
>     > e muito mais pratico e completo que o meu...:
>     >
>     > http://poe.perl.org/?POE_Cookbook/Pinging_Multiple_Hosts
>     >
>     > Em 12/07/2010 15:52, Thiago Glauco Sanchez escreveu:
>     >>
>     >> Um pequeno exemplo que eu criei apenas para ilustrar... o
>     pessoal que
>     >> desejar incrementar, por favor, be my guest.
>     >>
>     >> use 5.12.0;
>     >>  use POE;
>     >>  use Net::Ping;
>     >>    POE::Session->create(
>     >>        inline_states => {
>     >>        _start  => sub {
>     >>            my ($kernel) = $_[KERNEL];
>     >>            print "Setting up a session\n";
>     >>            $kernel->yield("ping");
>     >>        },
>     >>
>     >>        ping => sub{my ($kernel) = $_[KERNEL];
>     >>            my @ping = `ping -n 1 www.ticursos.net
>     <http://www.ticursos.net>`;
>     >>            map{say "ping externo ok" if $_ =~ /Perdidos = 0/ }
>     @ping;
>     >>            $kernel->delay_set("net_ping" => 3);
>     >>
>     >>        },
>     >>
>     >>        net_ping => sub{ my ($kernel) = $_[KERNEL];
>     >>                    my $p = Net::Ping->new();
>     >>                    $p->port_number(80);
>     >>                    my ($ret, $duration, $ip) =
>     $p->ping('ticursos.net <http://ticursos.net>');
>     >>                    say "net::ping ok" if $ret;
>     >>                    $p->close();
>     >>                    $kernel->delay_set("ping" => 3)
>     >>                },
>     >>        },
>     >>    );
>     >>
>     >>    say "Iniciando o Kernel...";
>     >>    $poe_kernel->run(  );
>     >>    exit(0);
>     >>
>     >>    sub start {
>     >>        my ($kernel) = $_[KERNEL];
>     >>       say "Iniciando os testes com POE";
>     >>        $kernel->yield("ping");
>     >>    }
>     >>
>     >>
>     >> Em 12/07/2010 15:38, João André Simioni escreveu:
>     >>>
>     >>> O pessoal comentou - eu vou dar uma olhada nele com atenção.
>     >>>
>     >>> Obrigado pela dica.
>     >>>
>     >>> 2010/7/12 Thiago Glauco Sanchez<thiagoglauco em ticursos.net
>     <mailto:thiagoglauco em ticursos.net>>:
>     >>>>
>     >>>> O Perl tem um framework para aplicações em rede e Multitarefa
>     chamada
>     >>>> POE
>     >>>> que
>     >>>> "Provide a cooperative scheduling and multitasking
>     environment rivalling
>     >>>> threads and IPC"
>     >>>> Não seria o caso de estudarmos a possibilidade de usar esse
>     framework no
>     >>>> seu
>     >>>> sistema???
>     >>>>
>     >>>> Em 11/07/2010 23:57, João André Simioni escreveu:
>     >>>>>
>     >>>>> Foi um typo - erro de digitação - o Net::Ping testa TCP e
>     UDP. O ping
>     >>>>> externo ICMP.
>     >>>>>
>     >>>>> Mas assim, eu preciso resolver o problema com esse teste em
>     Perl -
>     >>>>> como eu disse, essa parte do código é só um pedaço de um sistema
>     >>>>> maior. SNMP já é usado para várias outras coisas, mas
>     dependem de
>     >>>>> access lists em routers e eu não tenho como liberar.
>     >>>>>
>     >>>>> []'s
>     >>>>>
>     >>>>> 2010/7/11 Thiago Glauco Sanchez<thiagoglauco em ticursos.net
>     <mailto:thiagoglauco em ticursos.net>>:
>     >>>>>
>     >>>>>> O que eu quero dizer: você testou com o ping externo que é
>     um teste
>     >>>>>> icmp...
>     >>>>>> depois fez outro teste icmp com o Net::Ping...
>     >>>>>>
>     >>>>>> Não seria mais interessante testar de outra forma?
>     >>>>>>
>     >>>>>>    $p = Net::Ping->new("tcp", 2);
>     >>>>>>    $p->port_number(getservbyname("http", "tcp"));
>     >>>>>>
>     >>>>>> Mais umas coisas: Suas máquinas/equipamentos em teste estão via
>     >>>>>> internet
>     >>>>>> ou
>     >>>>>> rede local?
>     >>>>>> Já pensou em usar SNMP? Já tive um problema parecido e iria
>     utilizar
>     >>>>>> um
>     >>>>>> processo para cada equipamento por desempenho e acabai
>     optando por
>     >>>>>> utilizar
>     >>>>>> o Net:SNMP
>     >>>>>> que permite utilizar uma função de callback em vez de
>     utilizar um
>     >>>>>> processo
>     >>>>>> para cada equipamento. Eu mando uma requisição para todos os
>     >>>>>> equipamentos
>     >>>>>> e
>     >>>>>> conforme eles respondem
>     >>>>>> a função de call-back trata a requisição.
>     >>>>>>
>     >>>>>> Porém, não conheço o seu ambiente. Apenas acho que criar
>     4000 threads
>     >>>>>> não
>     >>>>>> seja a melhor solução.
>     >>>>>>
>     >>>>>>
>     >>>>>> Em 11/07/2010 23:18, João André Simioni escreveu:
>     >>>>>>
>     >>>>>>> É typo - já está certo no código. ICMP vai via comando
>     externo, UDP e
>     >>>>>>> TCP via Net::Ping.
>     >>>>>>>
>     >>>>>>> Com relação aos testes, é normal um momento de sobrecarga
>     causar a
>     >>>>>>> não
>     >>>>>>> resposta de testes - essas sobrecargas não devem duram
>     mais que 5
>     >>>>>>> segundos. Por isso o sleep - assim eu faço o mesmo teste
>     3x, com
>     >>>>>>> intervalos de 3 segundos.
>     >>>>>>>
>     >>>>>>> []'s
>     >>>>>>>
>     >>>>>>> On Sun, Jul 11, 2010 at 10:31 PM, Blabos de
>     Blebe<blabos em gmail.com <mailto:blabos em gmail.com>>
>     >>>>>>>  wrote:
>     >>>>>>>
>     >>>>>>>
>     >>>>>>>> Não seria um typo?
>     >>>>>>>>
>     >>>>>>>> icmp ->      ping;
>     >>>>>>>> tcp e udp ->      Net::Ping
>     >>>>>>>>
>     >>>>>>>>
>     >>>>>>>>
>     >>>>>>>> On Sun, Jul 11, 2010 at 6:42 PM, Thiago Glauco Sanchez
>     >>>>>>>> <thiagoglauco em ticursos.net
>     <mailto:thiagoglauco em ticursos.net>>      wrote:
>     >>>>>>>>
>     >>>>>>>>
>     >>>>>>>>> Sim sim, entendi sua preocupação.
>     >>>>>>>>> Mas em vez de:
>     >>>>>>>>>
>     >>>>>>>>> for (1..3) {
>     >>>>>>>>>           my $ping = `/bin/ping -c 1 -w 1 $ip`;
>     >>>>>>>>>
>     >>>>>>>>> não seria melhor já mandar pingar as 3 vezes no comando
>     ou apenas
>     >>>>>>>>> 1?
>     >>>>>>>>> Você
>     >>>>>>>>> está gerando 3 processos externos sem necessidade real.
>     >>>>>>>>>
>     >>>>>>>>> outra... o comando ping já não é icmp?
>     >>>>>>>>> my $p = Net::Ping->new('icmp')???
>     >>>>>>>>>
>     >>>>>>>>>
>     >>>>>>>>> Em 11/07/2010 17:04, João André Simioni escreveu:
>     >>>>>>>>>
>     >>>>>>>>>
>     >>>>>>>>>> Eu quero fazer o ping de 3 formas - UDP Echo / TCP Echo
>     e ICMP
>     >>>>>>>>>> Echo.
>     >>>>>>>>>> Alguns clientes tem filtros e assim eu evito falsos
>     positivos.
>     >>>>>>>>>>
>     >>>>>>>>>> Net::Ping mesmo com root tem resultados incoerentes
>     quando uso
>     >>>>>>>>>> ICMP e
>     >>>>>>>>>> Threads.
>     >>>>>>>>>>
>     >>>>>>>>>> []'s
>     >>>>>>>>>>
>     >>>>>>>>>> On Sun, Jul 11, 2010 at 4:56 PM, Thiago Glauco Sanchez
>     >>>>>>>>>> <thiagoglauco em ticursos.net
>     <mailto:thiagoglauco em ticursos.net>>        wrote:
>     >>>>>>>>>>
>     >>>>>>>>>>
>     >>>>>>>>>>
>     >>>>>>>>>>> Endosso a solução do Lorn. Use o POE.
>     >>>>>>>>>>>
>     >>>>>>>>>>> E cara... pra que isso??
>     >>>>>>>>>>>
>     >>>>>>>>>>> sub checkIp {
>     >>>>>>>>>>>    my $ip = shift;
>     >>>>>>>>>>>    my $pingOk = 0;
>     >>>>>>>>>>>
>     >>>>>>>>>>>    eval {
>     >>>>>>>>>>>        for (1..3) {
>     >>>>>>>>>>>            my $ping = `/bin/ping -c 1 -w 1 $ip`;
>     >>>>>>>>>>>
>     >>>>>>>>>>>            if (grep { / 0% packet loss/ } $ping) {
>     >>>>>>>>>>>                $pingOk = 1;
>     >>>>>>>>>>>                return 1;
>     >>>>>>>>>>>            }
>     >>>>>>>>>>>
>     >>>>>>>>>>>            if ($pingOk == 0) {
>     >>>>>>>>>>>                my $p = Net::Ping->new('icmp');
>     >>>>>>>>>>>                $p->service_check(1);
>     >>>>>>>>>>>                if ($p->ping($ip, 1)) {
>     >>>>>>>>>>>                    $pingOk = 1;
>     >>>>>>>>>>>                    return 1;
>     >>>>>>>>>>>                }
>     >>>>>>>>>>>            }
>     >>>>>>>>>>>
>     >>>>>>>>>>>            if ($pingOk == 0) {
>     >>>>>>>>>>>                my $p = Net::Ping->new('udp');
>     >>>>>>>>>>>                $p->service_check(1);
>     >>>>>>>>>>>                if ($p->ping($ip, 1)) {
>     >>>>>>>>>>>                    $pingOk = 1;
>     >>>>>>>>>>>                    return 1;
>     >>>>>>>>>>>                }
>     >>>>>>>>>>>            }
>     >>>>>>>>>>>
>     >>>>>>>>>>>            sleep 3;
>     >>>>>>>>>>>        }
>     >>>>>>>>>>>    };
>     >>>>>>>>>>>
>     >>>>>>>>>>> Para pingar com ping externo, depois com o Net::Ping
>     via icmp e
>     >>>>>>>>>>> depois
>     >>>>>>>>>>> com
>     >>>>>>>>>>> net::Ping udp? Ah... se não me engano, Net::Ping
>     precisa de
>     >>>>>>>>>>> permissão
>     >>>>>>>>>>> root
>     >>>>>>>>>>> para retornar um icmp de forma correta...
>     >>>>>>>>>>>
>     >>>>>>>>>>>
>     >>>>>>>>>>> Em 09/07/2010 17:48, João André Simioni escreveu:
>     >>>>>>>>>>>
>     >>>>>>>>>>>
>     >>>>>>>>>>>
>     >>>>>>>>>>>> Caros,
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> tenho um script para testar cerca de 4700
>     equipamentos, usando
>     >>>>>>>>>>>> ping.
>     >>>>>>>>>>>> Queria usar cerca 250 threads para isso, então o que
>     eu fiz foi
>     >>>>>>>>>>>> quebrar o grupo de 4300 em grupos 18 elementos e abri
>     uma thread
>     >>>>>>>>>>>> para
>     >>>>>>>>>>>> cada.
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> Não há nenhum problema com o código, o que acontece é
>     que o
>     >>>>>>>>>>>> tempo
>     >>>>>>>>>>>> de
>     >>>>>>>>>>>> abertura das threads é muito alto. E quanto mais
>     threads eu
>     >>>>>>>>>>>> abro,
>     >>>>>>>>>>>> maior o tempo para abertura das próximas. As
>     primeiras abrem em
>     >>>>>>>>>>>> 30ms,
>     >>>>>>>>>>>> mas perto da thread 70 esse tempo já vai para quase 1
>     segundo.
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> Vocês sabem como otimizar esse tempo de abertura? Ou
>     alguma
>     >>>>>>>>>>>> outra
>     >>>>>>>>>>>> solução?
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> Segue o output do script como exemplo:
>     >>>>>>>>>>>> Para 4677 cpes, e 250 threads, tenho no final 246
>     grupos, com 19
>     >>>>>>>>>>>> elementos
>     >>>>>>>>>>>> cada
>     >>>>>>>>>>>> Trying to create thread in Fri Jul  9 17:46:50 2010.61858
>     >>>>>>>>>>>> Created thread 1 (1) - took 0.030138 seconds to create
>     >>>>>>>>>>>> Trying to create thread in Fri Jul  9 17:46:50 2010.92080
>     >>>>>>>>>>>> Created thread 2 (2) - took 0.042668 seconds to create
>     >>>>>>>>>>>> Trying to create thread in Fri Jul  9 17:46:50
>     2010.134968
>     >>>>>>>>>>>> Created thread 3 (3) - took 0.064245 seconds to create
>     >>>>>>>>>>>> Trying to create thread in Fri Jul  9 17:46:50
>     2010.199430
>     >>>>>>>>>>>> Created thread 4 (4) - took 0.082642 seconds to create
>     >>>>>>>>>>>> Trying to create thread in Fri Jul  9 17:46:50
>     2010.282278
>     >>>>>>>>>>>> Created thread 5 (5) - took 0.128257 seconds to create
>     >>>>>>>>>>>> Trying to create thread in Fri Jul  9 17:46:50
>     2010.410769
>     >>>>>>>>>>>> Created thread 6 (6) - took 0.136458 seconds to create
>     >>>>>>>>>>>> Trying to create thread in Fri Jul  9 17:46:50
>     2010.547383
>     >>>>>>>>>>>> Created thread 7 (7) - took 0.208085 seconds to create
>     >>>>>>>>>>>> Trying to create thread in Fri Jul  9 17:46:50
>     2010.755594
>     >>>>>>>>>>>> Created thread 8 (8) - took 0.173014 seconds to create
>     >>>>>>>>>>>> Trying to create thread in Fri Jul  9 17:46:50
>     2010.928756
>     >>>>>>>>>>>> Created thread 9 (9) - took 0.132713 seconds to create
>     >>>>>>>>>>>> Trying to create thread in Fri Jul  9 17:46:51 2010.61608
>     >>>>>>>>>>>> Created thread 10 (10) - took 0.127795 seconds to create
>     >>>>>>>>>>>> Trying to create thread in Fri Jul  9 17:46:51
>     2010.189536
>     >>>>>>>>>>>> Created thread 11 (11) - took 0.301836 seconds to create
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> Obrigado
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> João André Simioni
>     >>>>>>>>>>>>
>     >>>>>>>>>>>>
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> #!/usr/bin/perl
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> use strict;
>     >>>>>>>>>>>> use DBI;
>     >>>>>>>>>>>> use Net::Ping;
>     >>>>>>>>>>>> use Time::HiRes qw/usleep tv_interval gettimeofday/;
>     >>>>>>>>>>>> use threads ('yield', 'stack_size' =>        
>      32*4096, 'exit'
>     >>>>>>>>>>>> =>
>     >>>>>>>>>>>> 'threads_only', 'stringify');
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> my $host = '192.168.160.179';
>     >>>>>>>>>>>> my $sid  = 'HOMOLOG';
>     >>>>>>>>>>>> my $user = 'mac_user';
>     >>>>>>>>>>>> my $pass = 'mac_user';
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> my $dbh =
>     DBI->connect("dbi:Oracle:host=$host;sid=$sid", $user,
>     >>>>>>>>>>>> $pass,
>     >>>>>>>>>>>> { AutoCommit =>          1 });
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> my $sth = $dbh->prepare('SELECT CPE_ID, CLIENTE_ID,
>     CPE_DESC,
>     >>>>>>>>>>>> CPE_IP_WAN, CPE_NODE, CPE_IF FROM MAC_CPE WHERE
>     CPE_PING = ? AND
>     >>>>>>>>>>>> CPE_ATIVO = ?');
>     >>>>>>>>>>>> $sth->execute('1', 'A');
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> my @cpes;
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> while (my (@row) = $sth->fetchrow_array) {
>     >>>>>>>>>>>>     push @cpes, [ @row ];
>     >>>>>>>>>>>> }
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> $dbh->disconnect();
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> my $maxThreads = 250;
>     >>>>>>>>>>>> my $total      = @cpes;
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> my $cpePerThread = int($total / $maxThreads);
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> my @toMonitor;
>     >>>>>>>>>>>> my $i = 0;
>     >>>>>>>>>>>> my $c = 0;
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> foreach my $cpe (@cpes) {
>     >>>>>>>>>>>>     push @{$toMonitor[$i]}, $cpe;
>     >>>>>>>>>>>>     $c++;
>     >>>>>>>>>>>>
>     >>>>>>>>>>>>     if ($c>          $cpePerThread) {
>     >>>>>>>>>>>>         $i++;
>     >>>>>>>>>>>>         $c = 0;
>     >>>>>>>>>>>>     }
>     >>>>>>>>>>>> }
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> print "Para $total cpes, e $maxThreads threads, tenho
>     no final
>     >>>>>>>>>>>> $i
>     >>>>>>>>>>>> grupos, com ", scalar @{$toMonitor[0]}, " elementos
>     cada\n";
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> sub processResult {
>     >>>>>>>>>>>>     my $r = shift;
>     >>>>>>>>>>>>     if (ref $r ne 'ARRAY') {
>     >>>>>>>>>>>>         print STDERR "Erro na thread\n";
>     >>>>>>>>>>>>         return 0;
>     >>>>>>>>>>>>     }
>     >>>>>>>>>>>>     my ($result, $host, $ifs) = @$r;
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> }
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> sub testeClient {
>     >>>>>>>>>>>>     my $threadNum = shift;
>     >>>>>>>>>>>>     my $cpeGroup  = shift;
>     >>>>>>>>>>>>     foreach my $cpe (@{$cpeGroup}) {
>     >>>>>>>>>>>>         my ($cpeId, $clientId, $cpeDesc, $cpeIp,
>     $cpeNode,
>     >>>>>>>>>>>> $cpeIf)
>     >>>>>>>>>>>> =
>     >>>>>>>>>>>> @$cpe;
>     >>>>>>>>>>>>         my $pingOk =&checkIp($cpeIp);
>     >>>>>>>>>>>>         my $status = $pingOk ? 'RESPONDE' : 'MORTO';
>     >>>>>>>>>>>>         # print join(", ", $threadNum, $cpeId, $clientId,
>     >>>>>>>>>>>> $cpeDesc,
>     >>>>>>>>>>>> $cpeIp, $cpeNode, $cpeIf, $status), "\n";
>     >>>>>>>>>>>>     }
>     >>>>>>>>>>>>     # print "Finishing thread $threadNum\n";
>     >>>>>>>>>>>>     return([1, 0]);
>     >>>>>>>>>>>> }
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> my $threadCount = 1;
>     >>>>>>>>>>>> foreach my $cpeGroup (@toMonitor) {
>     >>>>>>>>>>>>     print "Trying to create thread";
>     >>>>>>>>>>>>     my $t0 = [gettimeofday];
>     >>>>>>>>>>>>
>     >>>>>>>>>>>>     print " in ", scalar localtime $t0->[0], ".",
>     $t0->[1],
>     >>>>>>>>>>>> "\n";
>     >>>>>>>>>>>>
>     >>>>>>>>>>>>     my $thr = threads->create({scalar =>          '1'},
>     >>>>>>>>>>>> 'testeClient',
>     >>>>>>>>>>>> $threadCount, $cpeGroup);
>     >>>>>>>>>>>>     my $elapsed = tv_interval ( $t0, [gettimeofday]);
>     >>>>>>>>>>>>     print "Created thread $thr ($threadCount) - took
>     $elapsed
>     >>>>>>>>>>>> seconds
>     >>>>>>>>>>>> to create\n";
>     >>>>>>>>>>>>     $threadCount++;
>     >>>>>>>>>>>>
>     >>>>>>>>>>>>     while (threads->list()>= $maxThreads) {
>     >>>>>>>>>>>>         my @joinable = threads->list(threads::joinable);
>     >>>>>>>>>>>>         for (@joinable) {
>     >>>>>>>>>>>>             my $r = $_->join();
>     >>>>>>>>>>>> &processResult($r);
>     >>>>>>>>>>>>         }
>     >>>>>>>>>>>>         usleep(10000);
>     >>>>>>>>>>>>     }
>     >>>>>>>>>>>>     my $elapsed = tv_interval ( $t0, [gettimeofday]);
>     >>>>>>>>>>>> }
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> while (threads->list()) {
>     >>>>>>>>>>>>     my @joinable = threads->list(threads::joinable);
>     >>>>>>>>>>>>     for (@joinable) {
>     >>>>>>>>>>>>         my $r = $_->join();
>     >>>>>>>>>>>> &processResult($r);
>     >>>>>>>>>>>>     }
>     >>>>>>>>>>>>     usleep(10000);
>     >>>>>>>>>>>> }
>     >>>>>>>>>>>>
>     >>>>>>>>>>>> sub checkIp {
>     >>>>>>>>>>>>     my $ip = shift;
>     >>>>>>>>>>>>     my $pingOk = 0;
>     >>>>>>>>>>>>
>     >>>>>>>>>>>>     eval {
>     >>>>>>>>>>>>         for (1..3) {
>     >>>>>>>>>>>>             my $ping = `/bin/ping -c 1 -w 1 $ip`;
>     >>>>>>>>>>>>
>     >>>>>>>>>>>>             if (grep { / 0% packet loss/ } $ping) {
>     >>>>>>>>>>>>                 $pingOk = 1;
>     >>>>>>>>>>>>                 return 1;
>     >>>>>>>>>>>>             }
>     >>>>>>>>>>>>
>     >>>>>>>>>>>>             if ($pingOk == 0) {
>     >>>>>>>>>>>>                 my $p = Net::Ping->new('icmp');
>     >>>>>>>>>>>>                 $p->service_check(1);
>     >>>>>>>>>>>>                 if ($p->ping($ip, 1)) {
>     >>>>>>>>>>>>                     $pingOk = 1;
>     >>>>>>>>>>>>                     return 1;
>     >>>>>>>>>>>>                 }
>     >>>>>>>>>>>>             }
>     >>>>>>>>>>>>
>     >>>>>>>>>>>>             if ($pingOk == 0) {
>     >>>>>>>>>>>>                 my $p = Net::Ping->new('udp');
>     >>>>>>>>>>>>                 $p->service_check(1);
>     >>>>>>>>>>>>                 if ($p->ping($ip, 1)) {
>     >>>>>>>>>>>>                     $pingOk = 1;
>     >>>>>>>>>>>>                     return 1;
>     >>>>>>>>>>>>                 }
>     >>>>>>>>>>>>             }
>     >>>>>>>>>>>>
>     >>>>>>>>>>>>             sleep 3;
>     >>>>>>>>>>>>         }
>     >>>>>>>>>>>>     };
>     >>>>>>>>>>>>
>     >>>>>>>>>>>>     return $pingOk;
>     >>>>>>>>>>>> }
>     >>>>>>>>>>>> _______________________________________________
>     >>>>>>>>>>>> Rio-pm mailing list
>     >>>>>>>>>>>> Rio-pm em pm.org <mailto:Rio-pm em pm.org>
>     >>>>>>>>>>>> http://mail.pm.org/mailman/listinfo/rio-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 <http://www.ticursos.net>
>     >>>>>>>>>>>
>     >>>>>>>>>>> _______________________________________________
>     >>>>>>>>>>> Rio-pm mailing list
>     >>>>>>>>>>> Rio-pm em pm.org <mailto:Rio-pm em pm.org>
>     >>>>>>>>>>> http://mail.pm.org/mailman/listinfo/rio-pm
>     >>>>>>>>>>>
>     >>>>>>>>>>>
>     >>>>>>>>>>>
>     >>>>>>>>>>>
>     >>>>>>>>>> _______________________________________________
>     >>>>>>>>>> Rio-pm mailing list
>     >>>>>>>>>> Rio-pm em pm.org <mailto:Rio-pm em pm.org>
>     >>>>>>>>>> http://mail.pm.org/mailman/listinfo/rio-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 <http://www.ticursos.net>
>     >>>>>>>>>
>     >>>>>>>>> _______________________________________________
>     >>>>>>>>> Rio-pm mailing list
>     >>>>>>>>> Rio-pm em pm.org <mailto:Rio-pm em pm.org>
>     >>>>>>>>> http://mail.pm.org/mailman/listinfo/rio-pm
>     >>>>>>>>>
>     >>>>>>>>>
>     >>>>>>>>>
>     >>>>>>>> _______________________________________________
>     >>>>>>>> Rio-pm mailing list
>     >>>>>>>> Rio-pm em pm.org <mailto:Rio-pm em pm.org>
>     >>>>>>>> http://mail.pm.org/mailman/listinfo/rio-pm
>     >>>>>>>>
>     >>>>>>>>
>     >>>>>>>>
>     >>>>>>> _______________________________________________
>     >>>>>>> Rio-pm mailing list
>     >>>>>>> Rio-pm em pm.org <mailto:Rio-pm em pm.org>
>     >>>>>>> http://mail.pm.org/mailman/listinfo/rio-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 <http://www.ticursos.net>
>     >>>>>>
>     >>>>>> _______________________________________________
>     >>>>>> Rio-pm mailing list
>     >>>>>> Rio-pm em pm.org <mailto:Rio-pm em pm.org>
>     >>>>>> http://mail.pm.org/mailman/listinfo/rio-pm
>     >>>>>>
>     >>>>>>
>     >>>>> _______________________________________________
>     >>>>> Rio-pm mailing list
>     >>>>> Rio-pm em pm.org <mailto:Rio-pm em pm.org>
>     >>>>> http://mail.pm.org/mailman/listinfo/rio-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 <http://www.ticursos.net>
>     >>>>
>     >>>> _______________________________________________
>     >>>> Rio-pm mailing list
>     >>>> Rio-pm em pm.org <mailto:Rio-pm em pm.org>
>     >>>> http://mail.pm.org/mailman/listinfo/rio-pm
>     >>>>
>     >>> _______________________________________________
>     >>> Rio-pm mailing list
>     >>> Rio-pm em pm.org <mailto:Rio-pm em pm.org>
>     >>> http://mail.pm.org/mailman/listinfo/rio-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 <http://www.ticursos.net>
>     >
>     > _______________________________________________
>     > Rio-pm mailing list
>     > Rio-pm em pm.org <mailto:Rio-pm em pm.org>
>     > http://mail.pm.org/mailman/listinfo/rio-pm
>     >
>     _______________________________________________
>     Rio-pm mailing list
>     Rio-pm em pm.org <mailto:Rio-pm em pm.org>
>     http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
>
> -- 
> Bruno C. Buss
> http://brunobuss.wordpress.com/
> http://www.dcc.ufrj.br/~brunobuss/ <http://www.dcc.ufrj.br/%7Ebrunobuss/>
>
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-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

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20100712/fc617dac/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm