[SP-pm] rodar coisas periodicas em perl

Tiago Peczenyj tiago.peczenyj at gmail.com
Mon Aug 26 07:28:14 PDT 2013


e?


2013/8/26 Daniel de Oliveira Mantovani <daniel.oliveira.mantovani at gmail.com>

> Tiago, "Easy things should be easy, and hard things should be
> possible" - Larry Wall
>
> 2013/8/26 Tiago Peczenyj <tiago.peczenyj at gmail.com>:
> > Depois vcs me pagam uma cerveja e fica tudo sussa.
> >
> >
> > 2013/8/26 Lindolfo Lorn Rodrigues <lorn at lornlab.org>
> >>
> >> Antes que eu me esqueça: desculpe-me se insultei.
> >>
> >>
> >> 2013/8/26 Lindolfo Lorn Rodrigues <lorn at lornlab.org>
> >>>
> >>> Não quis insultar, apenas dar outra visão para o problema :)
> >>>
> >>>
> >>>
> >>> 2013/8/26 Tiago Peczenyj <tiago.peczenyj at 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 at 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 at gmail.com>
> >>>>>>
> >>>>>> Explain creaktive
> >>>>>>
> >>>>>>
> >>>>>> 2013/8/26 Stanislaw Pusep <creaktive at gmail.com>
> >>>>>>>
> >>>>>>> Overengineering detected!
> >>>>>>>
> >>>>>>>
> >>>>>>> 2013/8/26 Lindolfo Lorn Rodrigues <lorn at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>



-- 
Tiago B. Peczenyj
Linux User #405772

http://about.me/peczenyj
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130826/6f7ffbdb/attachment-0001.html>


More information about the SaoPaulo-pm mailing list