O que o statsd faz por default é exatamente acumular o "bucket" por 1 minuto, enviar para o graphite, e limpar o acumulador.
2013/8/26 Tiago Peczenyj <[email protected]> > Explain creaktive > > > 2013/8/26 Stanislaw Pusep <[email protected]> > >> Overengineering detected! >> >> >> 2013/8/26 Lindolfo Lorn Rodrigues <[email protected]> >> >>> 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 <[email protected]> >>> >>>> 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: [email protected] >>>> 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: [email protected] >>> 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: [email protected] >> 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: [email protected] > 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: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
