[SP-pm] rodar coisas periodicas em perl

Andre Carneiro andregarciacarneiro at gmail.com
Mon Aug 26 12:41:17 PDT 2013


Que feio!

Se houver prazo para pesquisa de novas soluções, eu não vejo porque usar!
Além do mais eu aprendi que conhecimento nunca é demais. Então eu acho que
essa nova visão agrega sim, e também qualquer visão diferente sobre a
solução do problema. Obrigado Lorn!

Aprendi também, que desenvolvedor tem que resolver o problema da melhor
maneira possível! Que desempenho nunca é demais, e olhar para coisas novas
deveria ser um incentivo para fazer as coisas corretamente, e não uma
desculpa esfarrapada para resolver as coisas de qualquer maneira, ou
desprezar a opinião dos outros de maneira tão grosseira.

Proost!






2013/8/26 Lucas Moraes <lucastiagodemoraes at gmail.com>

> 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 at gmail.com>escreveu:
>
> 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
>>
>> =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
>
>


-- 
André Garcia Carneiro
Software Engineer
(11)982907780
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130826/2e4736b4/attachment-0001.html>


More information about the SaoPaulo-pm mailing list