Tiago, "Easy things should be easy, and hard things should be possible" - Larry Wall
2013/8/26 Tiago Peczenyj <tiago.pecze...@gmail.com>: > Depois vcs me pagam uma cerveja e fica tudo sussa. > > > 2013/8/26 Lindolfo Lorn Rodrigues <l...@lornlab.org> >> >> Antes que eu me esqueça: desculpe-me se insultei. >> >> >> 2013/8/26 Lindolfo Lorn Rodrigues <l...@lornlab.org> >>> >>> Não quis insultar, apenas dar outra visão para o problema :) >>> >>> >>> >>> 2013/8/26 Tiago Peczenyj <tiago.pecze...@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 <creakt...@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.pecze...@gmail.com> >>>>>> >>>>>> Explain creaktive >>>>>> >>>>>> >>>>>> 2013/8/26 Stanislaw Pusep <creakt...@gmail.com> >>>>>>> >>>>>>> Overengineering detected! >>>>>>> >>>>>>> >>>>>>> 2013/8/26 Lindolfo Lorn Rodrigues <l...@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 <creakt...@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@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@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@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@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@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@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@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@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@pm.org L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer