[SP-pm] rodar coisas periodicas em perl

Tiago Peczenyj tiago.peczenyj at gmail.com
Mon Aug 26 07:33:22 PDT 2013


não entendi


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

> Para de perder tempo com coisas banais que não vão te agregar nada.
>
> 2013/8/26 Tiago Peczenyj <tiago.peczenyj at gmail.com>:
> > 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
> >
> > =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/a7a23b53/attachment-0001.html>


More information about the SaoPaulo-pm mailing list