<div dir="ltr">Explain creaktive</div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/8/26 Stanislaw Pusep <span dir="ltr"><<a href="mailto:creaktive@gmail.com" target="_blank">creaktive@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Overengineering detected!</div><div class="gmail_extra"><br><br><div class="gmail_quote"><div class="im">

2013/8/26 Lindolfo Lorn Rodrigues <span dir="ltr"><<a href="mailto:lorn@lornlab.org" target="_blank">lorn@lornlab.org</a>></span><br>

</div><div><div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Eu mudaria boa parte do que você fez.<br></div><div><br>Não sei qual problema que você está tentando resolver com isso, por isso tudo<br>



</div><div>isso aqui será uma mega hipotese, se puder dizer qual o problema está tentando <br>
resolver, seria legal :)<br><br></div><div>Eu usaria o Statsd para acumular o valor e exportaria via graphite.<br><br></div><div>Eu não entendi bem o motivo de ficar rodando a cada segundo então vou chutar:<br><br></div>



<div>
Você que capturar ações de usuário/sistema em algum lugar?<br><br></div><div>Caso sim, você poderia colocar esse codigo logo depois a ação do usuário/sistema:<br><br>my $statsd = Etsy::StatsD->new<br>my $bucket = "pacman.hit_number"<br>




$statsd->increment($bucket);<br><br></div><div>O stasd usa UDP, não vai alterar em nada perceptivo na perfomance, do seu sistema.<br></div><div><br></div><div>Mandando o contador acima para o statsd ele irá acumular e mandar para o graphite,<br>




</div><div>no graphite com o dado cru você pode criar várias operações de estatistica <br>( mediana, media, percentile..etc ) e gerar graficos.<br><br><a href="http://graphite.readthedocs.org/en/0.9.10/functions.html#module-graphite.render.functions" target="_blank">http://graphite.readthedocs.org/en/0.9.10/functions.html#module-graphite.render.functions</a><br>




<br></div><div>O Statsd suporta vários backend o mais conhecido/usado deles é o Graphite:<br><a href="http://graphite.wikidot.com/screen-shots" target="_blank">http://graphite.wikidot.com/screen-shots</a><br><br></div><div>



A Etsy tem um post explicando melhor a "metodologia" deles de medir tudo:<br>
<br></div><div><a href="http://codeascraft.com/2011/02/15/measure-anything-measure-everything/" target="_blank">http://codeascraft.com/2011/02/15/measure-anything-measure-everything/</a><br><a href="https://github.com/etsy/statsd" target="_blank">https://github.com/etsy/statsd</a><br>




</div><div><br></div>PS: O Statsd teve origem no Flickr, e a primeira versão era em Perl recentemente eles <br>liberaram o código fonte:<br><br><a href="https://github.com/iamcal/Flickr-StatsD" target="_blank">https://github.com/iamcal/Flickr-StatsD</a><br>




<div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/8/26 Stanislaw Pusep <span dir="ltr"><<a href="mailto:creaktive@gmail.com" target="_blank">creaktive@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div><div>
Use AE::time() no lugar do localtime<span></span><br><br>понедельник, 26 августа 2013 г. пользователь Tiago Peczenyj  писал:<div><div><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div dir="ltr">Ola<div><br></div><div>Eu tenho o seguinte caso</div><div><br></div><div>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 ).</div>







<div><br></div><div>a cada minuto quero enviar o valor de total para algum lugar (ex Zabbix).</div><div><br></div><div>a meia noite eu quero limpar o total para 0.</div><div><br></div><div><div>Eu cheguei a algo assim:</div>







<div>use AnyEvent;</div><div><br></div><div>sub loop {</div><div><span style="white-space:pre-wrap">    </span>my $obj   = Foo->new;</div><div><span style="white-space:pre-wrap">        </span>my $cv    = AE::cv;</div><div>

<br></div><div><div><span style="white-space:pre-wrap"><span>     </span>my $</span>seconds_in_a_day = 60 * 60 * 24;</div><div><span style="white-space:pre-wrap">       </span>my $seconds_to_midnight =  $seconds_in_a_day - seconds_from_midnight();</div>







</div><div><br></div><div><span style="white-space:pre-wrap">     </span>my $loop = AE::timer  0, 1,  sub { $obj->run   };</div><div><br></div><div><span style="white-space:pre-wrap"> </span>my $send = AE::timer  60, 60,  sub { $obj->send  };</div>







<div><br></div><div><span style="white-space:pre-wrap"> </span>my $clear= AE::timer  $seconds_to_midnight, $seconds_in_a_day,  sub { $obj->clear };</div><div><span style="white-space:pre-wrap">        </span></div><div>

<span style="white-space:pre-wrap">     </span>$cv->recv;</div><div>}</div><div><br></div><div>a sub seconds_from_midnight usa localtime pra fazer uma conta marota.</div><div><br></div><div>A assinatura do AE::timer eh</div>







<div><br></div><div>AE::timer $delay, $interval, $callback;</div><div><br></div><div>No primeiro timer eu tenho o meu main loop, chamando o metodo run.</div><div>No segundo eu tenho o metodo que envia os dados a cada 60 segundos</div>







<div>No terceiro eu calculo quantos segundos faltam para a meia noite e mando repetir a cada 24 horas.</div><div><br></div><div>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. </div>







<div><br></div><div>Parece bom, mas eu tenho algumas duvidas.</div><div><br></div><div>1) esta claro o suficiente?</div><div>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?</div>







<div>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?</div>







<div>4) alias tem algo melhor do que ficar brincando com localtime() pra pegar quantos segundos faltam pra proxima meia noite? algo usando DateTime</div><div><br></div><div>por fim</div><div><br></div><div>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".</div>







<div><br></div><div>Obrigado</div><div><br></div><div>Tiago</div><div><br>-- </div>Tiago B. Peczenyj<br>Linux User #405772<br><br><a href="http://about.me/peczenyj" target="_blank">http://about.me/peczenyj</a>
</div></div>
</blockquote>
</div></div><br></div></div>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div></div></div><br></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Tiago B. Peczenyj<br>Linux User #405772<br><br><a href="http://about.me/peczenyj" target="_blank">http://about.me/peczenyj</a>
</div>