[SP-pm] rodar coisas periodicas em perl

Lindolfo Lorn Rodrigues lorn at lornlab.org
Mon Aug 26 04:38:45 PDT 2013


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
>
>
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130826/7bfa8f1c/attachment-0001.html>


More information about the SaoPaulo-pm mailing list