[SP-pm] rodar coisas periodicas em perl

Tiago Peczenyj tiago.peczenyj at gmail.com
Mon Aug 26 05:27:53 PDT 2013


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130826/e7f1067d/attachment.html>


More information about the SaoPaulo-pm mailing list