[SP-pm] rodar coisas periodicas em perl

Tiago Peczenyj tiago.peczenyj at gmail.com
Mon Aug 26 05:07:02 PDT 2013


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


More information about the SaoPaulo-pm mailing list