[SP-pm] rodar coisas periodicas em perl

Lucas Moraes lucastiagodemoraes at gmail.com
Mon Aug 26 15:07:24 PDT 2013


Mas ficar procurando soluções que não vai mudar muito o projeto é trocar 6
por meia duzia. Conhecimento nunca é demais mesmo, isso é fato! Mas tem
quantas coisas novas para aprender em milhões de outros assuntos, o que
adianta você aprender várias formas de fazer se o final vai ser quase o
mesmo ou o mesmo. Tempo custa dinheiro, não é porque você tem tempo para
achar uma solução melhor que você é obrigado a fazer, aconselho a pessoa
descansar a mente ou procurar algo novo para fazer. Respeito sua opinião,
mas vou defendo a minha opinião. Eu postei minha opinião porque o código do
Tiago não esta feio, o módulo AE apesar de eu nunca ter usado, olhei no
metacpan esta com 49++ até o momento. Lembrando que é só uma opinião minha,
não estou colocando o revolver na cabeça de ninguém. Falou.


Em 26 de agosto de 2013 16:41, Andre Carneiro <andregarciacarneiro em gmail.com
> escreveu:

> 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 em 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 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
>>>
>>>
>>
>> =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
>>
>>
>
>
> --
> André Garcia Carneiro
> Software Engineer
> (11)982907780
>
> =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/7e772386/attachment-0001.html>


More information about the SaoPaulo-pm mailing list