[SP-pm] rodar coisas periodicas em perl

Lucas Moraes lucastiagodemoraes at gmail.com
Mon Aug 26 07:49:08 PDT 2013


Tiago se seu código esta funcionando deixa rodando. Melhor código é aquele
que atende as necessidades do cliente. Pare de procurar problemas onde não
existe :)


Em 26 de agosto de 2013 11:33, Tiago Peczenyj
<tiago.peczenyj em gmail.com>escreveu:

> não entendi
>
>
> 2013/8/26 Daniel de Oliveira Mantovani <
> daniel.oliveira.mantovani em gmail.com>
>
>> Para de perder tempo com coisas banais que não vão te agregar nada.
>>
>> 2013/8/26 Tiago Peczenyj <tiago.peczenyj em gmail.com>:
>> > e?
>> >
>> >
>> > 2013/8/26 Daniel de Oliveira Mantovani <
>> daniel.oliveira.mantovani em gmail.com>
>> >>
>> >> Tiago, "Easy things should be easy, and hard things should be
>> >> possible" - Larry Wall
>> >>
>> >> 2013/8/26 Tiago Peczenyj <tiago.peczenyj em gmail.com>:
>> >> > Depois vcs me pagam uma cerveja e fica tudo sussa.
>> >> >
>> >> >
>> >> > 2013/8/26 Lindolfo Lorn Rodrigues <lorn em lornlab.org>
>> >> >>
>> >> >> Antes que eu me esqueça: desculpe-me se insultei.
>> >> >>
>> >> >>
>> >> >> 2013/8/26 Lindolfo Lorn Rodrigues <lorn em lornlab.org>
>> >> >>>
>> >> >>> Não quis insultar, apenas dar outra visão para o problema :)
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> 2013/8/26 Tiago Peczenyj <tiago.peczenyj em gmail.com>
>> >> >>>>
>> >> >>>> foi mal, agora eu tenho algo como
>> >> >>>>
>> >> >>>> while(1){
>> >> >>>>    # calcula
>> >> >>>>    # if passou um minuto envia pro zabbix
>> >> >>>>    # if passou um dia reinicia o contador
>> >> >>>>    sleep(1);
>> >> >>>> }
>> >> >>>>
>> >> >>>> qualquer sugestão é bem vinda. de repente o zabbix pode continuar
>> com
>> >> >>>> a
>> >> >>>> monitoria e posso usar o StatsD para essas coisas novas, ainda
>> mais
>> >> >>>> se for
>> >> >>>> menos burocratico.
>> >> >>>>
>> >> >>>>
>> >> >>>> 2013/8/26 Stanislaw Pusep <creaktive em gmail.com>
>> >> >>>>>
>> >> >>>>> Seja qual for o seu objetivo, o código que você postou já está
>> feito
>> >> >>>>> e
>> >> >>>>> funcionando bem, aparenemente.
>> >> >>>>> "Eu mudaria boa parte do que você fez" e "Eu usaria o Statsd para
>> >> >>>>> acumular o valor e exportaria via graphite", seguido de "Eu não
>> >> >>>>> entendi bem
>> >> >>>>> o motivo de ficar rodando a cada segundo então vou chutar" é um
>> >> >>>>> insulto a
>> >> >>>>> sua inteligência, IMHO
>> >> >>>>>
>> >> >>>>>
>> >> >>>>> 2013/8/26 Tiago Peczenyj <tiago.peczenyj em gmail.com>
>> >> >>>>>>
>> >> >>>>>> Explain creaktive
>> >> >>>>>>
>> >> >>>>>>
>> >> >>>>>> 2013/8/26 Stanislaw Pusep <creaktive em gmail.com>
>> >> >>>>>>>
>> >> >>>>>>> Overengineering detected!
>> >> >>>>>>>
>> >> >>>>>>>
>> >> >>>>>>> 2013/8/26 Lindolfo Lorn Rodrigues <lorn em lornlab.org>
>> >> >>>>>>>>
>> >> >>>>>>>> Eu mudaria boa parte do que você fez.
>> >> >>>>>>>>
>> >> >>>>>>>> Não sei qual problema que você está tentando resolver com
>> isso,
>> >> >>>>>>>> por
>> >> >>>>>>>> isso tudo
>> >> >>>>>>>> isso aqui será uma mega hipotese, se puder dizer qual o
>> problema
>> >> >>>>>>>> está tentando
>> >> >>>>>>>> resolver, seria legal :)
>> >> >>>>>>>>
>> >> >>>>>>>> Eu usaria o Statsd para acumular o valor e exportaria via
>> >> >>>>>>>> graphite.
>> >> >>>>>>>>
>> >> >>>>>>>> Eu não entendi bem o motivo de ficar rodando a cada segundo
>> então
>> >> >>>>>>>> vou chutar:
>> >> >>>>>>>>
>> >> >>>>>>>> Você que capturar ações de usuário/sistema em algum lugar?
>> >> >>>>>>>>
>> >> >>>>>>>> Caso sim, você poderia colocar esse codigo logo depois a ação
>> do
>> >> >>>>>>>> usuário/sistema:
>> >> >>>>>>>>
>> >> >>>>>>>> my $statsd = Etsy::StatsD->new
>> >> >>>>>>>> my $bucket = "pacman.hit_number"
>> >> >>>>>>>> $statsd->increment($bucket);
>> >> >>>>>>>>
>> >> >>>>>>>> O stasd usa UDP, não vai alterar em nada perceptivo na
>> >> >>>>>>>> perfomance,
>> >> >>>>>>>> do seu sistema.
>> >> >>>>>>>>
>> >> >>>>>>>> Mandando o contador acima para o statsd ele irá acumular e
>> mandar
>> >> >>>>>>>> para o graphite,
>> >> >>>>>>>> no graphite com o dado cru você pode criar várias operações de
>> >> >>>>>>>> estatistica
>> >> >>>>>>>> ( mediana, media, percentile..etc ) e gerar graficos.
>> >> >>>>>>>>
>> >> >>>>>>>>
>> >> >>>>>>>>
>> >> >>>>>>>>
>> http://graphite.readthedocs.org/en/0.9.10/functions.html#module-graphite.render.functions
>> >> >>>>>>>>
>> >> >>>>>>>> O Statsd suporta vários backend o mais conhecido/usado deles
>> é o
>> >> >>>>>>>> Graphite:
>> >> >>>>>>>> http://graphite.wikidot.com/screen-shots
>> >> >>>>>>>>
>> >> >>>>>>>> A Etsy tem um post explicando melhor a "metodologia" deles de
>> >> >>>>>>>> medir
>> >> >>>>>>>> tudo:
>> >> >>>>>>>>
>> >> >>>>>>>>
>> >> >>>>>>>>
>> >> >>>>>>>>
>> http://codeascraft.com/2011/02/15/measure-anything-measure-everything/
>> >> >>>>>>>> https://github.com/etsy/statsd
>> >> >>>>>>>>
>> >> >>>>>>>> PS: O Statsd teve origem no Flickr, e a primeira versão era em
>> >> >>>>>>>> Perl
>> >> >>>>>>>> recentemente eles
>> >> >>>>>>>> liberaram o código fonte:
>> >> >>>>>>>>
>> >> >>>>>>>> https://github.com/iamcal/Flickr-StatsD
>> >> >>>>>>>>
>> >> >>>>>>>>
>> >> >>>>>>>>
>> >> >>>>>>>> 2013/8/26 Stanislaw Pusep <creaktive em gmail.com>
>> >> >>>>>>>>>
>> >> >>>>>>>>> Use AE::time() no lugar do localtime
>> >> >>>>>>>>>
>> >> >>>>>>>>> понедельник, 26 августа 2013 г. пользователь Tiago Peczenyj
>> >> >>>>>>>>> писал:
>> >> >>>>>>>>>
>> >> >>>>>>>>>> Ola
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> Eu tenho o seguinte caso
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> preciso rodar um certo método a cada segundo, que por sua
>> vez
>> >> >>>>>>>>>> acumula um valor em algum atributo interno do objeto (
>> total +=
>> >> >>>>>>>>>> por exemplo
>> >> >>>>>>>>>> ).
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> a cada minuto quero enviar o valor de total para algum lugar
>> >> >>>>>>>>>> (ex
>> >> >>>>>>>>>> Zabbix).
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> a meia noite eu quero limpar o total para 0.
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> Eu cheguei a algo assim:
>> >> >>>>>>>>>> use AnyEvent;
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> sub loop {
>> >> >>>>>>>>>> my $obj   = Foo->new;
>> >> >>>>>>>>>> my $cv    = AE::cv;
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> my $seconds_in_a_day = 60 * 60 * 24;
>> >> >>>>>>>>>> my $seconds_to_midnight =  $seconds_in_a_day -
>> >> >>>>>>>>>> seconds_from_midnight();
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> my $loop = AE::timer  0, 1,  sub { $obj->run   };
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> my $send = AE::timer  60, 60,  sub { $obj->send  };
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> my $clear= AE::timer  $seconds_to_midnight,
>> $seconds_in_a_day,
>> >> >>>>>>>>>> sub { $obj->clear };
>> >> >>>>>>>>>> $cv->recv;
>> >> >>>>>>>>>> }
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> a sub seconds_from_midnight usa localtime pra fazer uma
>> conta
>> >> >>>>>>>>>> marota.
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> A assinatura do AE::timer eh
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> AE::timer $delay, $interval, $callback;
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> No primeiro timer eu tenho o meu main loop, chamando o
>> metodo
>> >> >>>>>>>>>> run.
>> >> >>>>>>>>>> No segundo eu tenho o metodo que envia os dados a cada 60
>> >> >>>>>>>>>> segundos
>> >> >>>>>>>>>> No terceiro eu calculo quantos segundos faltam para a meia
>> >> >>>>>>>>>> noite e
>> >> >>>>>>>>>> mando repetir a cada 24 horas.
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> hoje eu tenho um loop com um sleep 1 e varios ifs. quero que
>> >> >>>>>>>>>> fique
>> >> >>>>>>>>>> mais legivel e nao utilizo anyEvent em nenhum outro lugar.
>> Nao
>> >> >>>>>>>>>> precisa ser
>> >> >>>>>>>>>> EXATO, portanto um atraso de alguns segundos pode acontecer.
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> Parece bom, mas eu tenho algumas duvidas.
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> 1) esta claro o suficiente?
>> >> >>>>>>>>>> 2) o overhead do AnyEvent parece ser o mesmo do sleep (1)
>> >> >>>>>>>>>> durante
>> >> >>>>>>>>>> o runtime (ignorando quanto tempo demora pra iniciar ou
>> não),
>> >> >>>>>>>>>> certo?
>> >> >>>>>>>>>> 3) para rodar algo "a meia noite" me parece um tanto confuso
>> >> >>>>>>>>>> ainda. não encontrei nenhum helper q me ajude (o
>> AnyEvent::Cron
>> >> >>>>>>>>>> da pau pra
>> >> >>>>>>>>>> mim). sera q nao eh melhor "re-setar" o time watcher para a
>> >> >>>>>>>>>> proxima meia
>> >> >>>>>>>>>> noite?
>> >> >>>>>>>>>> 4) alias tem algo melhor do que ficar brincando com
>> localtime()
>> >> >>>>>>>>>> pra pegar quantos segundos faltam pra proxima meia noite?
>> algo
>> >> >>>>>>>>>> usando
>> >> >>>>>>>>>> DateTime
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> por fim
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> 5) tem algum problema ao usar AE::timer q eu não esteja
>> vendo?
>> >> >>>>>>>>>> Fora os problemas interentes como se eu usar IO Bloqueante
>> eu
>> >> >>>>>>>>>> não vou ter os
>> >> >>>>>>>>>> timers "exatos".
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> Obrigado
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> Tiago
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> --
>> >> >>>>>>>>>> Tiago B. Peczenyj
>> >> >>>>>>>>>> Linux User #405772
>> >> >>>>>>>>>>
>> >> >>>>>>>>>> http://about.me/peczenyj
>> >> >>>>>>>>>
>> >> >>>>>>>>>
>> >> >>>>>>>>> =begin disclaimer
>> >> >>>>>>>>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >> >>>>>>>>>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >> >>>>>>>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> >> >>>>>>>>> =end disclaimer
>> >> >>>>>>>>>
>> >> >>>>>>>>
>> >> >>>>>>>>
>> >> >>>>>>>> =begin disclaimer
>> >> >>>>>>>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >> >>>>>>>>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >> >>>>>>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> >> >>>>>>>> =end disclaimer
>> >> >>>>>>>>
>> >> >>>>>>>
>> >> >>>>>>>
>> >> >>>>>>> =begin disclaimer
>> >> >>>>>>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >> >>>>>>>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >> >>>>>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> >> >>>>>>> =end disclaimer
>> >> >>>>>>>
>> >> >>>>>>
>> >> >>>>>>
>> >> >>>>>>
>> >> >>>>>> --
>> >> >>>>>> Tiago B. Peczenyj
>> >> >>>>>> Linux User #405772
>> >> >>>>>>
>> >> >>>>>> http://about.me/peczenyj
>> >> >>>>>>
>> >> >>>>>> =begin disclaimer
>> >> >>>>>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >> >>>>>>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >> >>>>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> >> >>>>>> =end disclaimer
>> >> >>>>>>
>> >> >>>>>
>> >> >>>>>
>> >> >>>>> =begin disclaimer
>> >> >>>>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >> >>>>>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >> >>>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> >> >>>>> =end disclaimer
>> >> >>>>>
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>> --
>> >> >>>> Tiago B. Peczenyj
>> >> >>>> Linux User #405772
>> >> >>>>
>> >> >>>> http://about.me/peczenyj
>> >> >>>>
>> >> >>>> =begin disclaimer
>> >> >>>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >> >>>>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >> >>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> >> >>>> =end disclaimer
>> >> >>>>
>> >> >>>
>> >> >>
>> >> >>
>> >> >> =begin disclaimer
>> >> >>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >> >>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >> >>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> >> >> =end disclaimer
>> >> >>
>> >> >
>> >> >
>> >> >
>> >> > --
>> >> > Tiago B. Peczenyj
>> >> > Linux User #405772
>> >> >
>> >> > http://about.me/peczenyj
>> >> >
>> >> > =begin disclaimer
>> >> >    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >> >  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >> >  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> >> > =end disclaimer
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >>
>> >> -dom
>> >>
>> >> --
>> >>
>> >> Daniel de Oliveira Mantovani
>> >> Business Analytic Specialist
>> >> Perl Evangelist /Astrophysics hobbyist.
>> >> +55 11 9 8538-9897
>> >> XOXO
>> >> =begin disclaimer
>> >>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> >> =end disclaimer
>> >
>> >
>> >
>> >
>> > --
>> > Tiago B. Peczenyj
>> > Linux User #405772
>> >
>> > http://about.me/peczenyj
>> >
>> > =begin disclaimer
>> >    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> > =end disclaimer
>> >
>>
>>
>>
>> --
>>
>> -dom
>>
>> --
>>
>> Daniel de Oliveira Mantovani
>> Business Analytic Specialist
>> Perl Evangelist /Astrophysics hobbyist.
>> +55 11 9 8538-9897
>> XOXO
>> =begin disclaimer
>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>
>
>
> --
> Tiago B. Peczenyj
> Linux User #405772
>
> http://about.me/peczenyj
>
> =begin disclaimer
>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130826/5f26c96c/attachment-0001.html>


More information about the SaoPaulo-pm mailing list