[SP-pm] rodar coisas periodicas em perl

ricardostock at bol.com.br ricardostock at bol.com.br
Tue Aug 27 07:48:00 PDT 2013


Galera, eu vejo assim.

Se trocar 6 por meia dúzia esta certo ? –> errado, é mostrar ao cliente que esta fazendo algo quando na verdade não esta.

Mexer no que esta funcionando esta errado ? –> errado, se fosse assim não passaríamos horas otimizando, buscando novas formas de melhorar nosso serviço e mostrar ao cliente que realmente estamos trabalhando.

Quando comecei a aprender Perl, algo que nunca esqueci até hoje na capa do livro do Larry Wall foi “Existe mais de uma maneira de se fazer”;

Tiago, concordo com você, se esta tosco não esta gostando mude, otimize, refaça, eu sigo algumas regras em meus códigos, e duas delas são:
    
-> Tem que estar funcionando...    Mas tem que estar funcionando ao meu agrado e de forma correta.


-> Se posso melhorar.... porque não tentar...

Para mim todas as opniões são importantes.... mas nem todas são validas....


From: Tiago Peczenyj 
Sent: Tuesday, August 27, 2013 11:30 AM
To: saopaulo-pm em mail.pm.org 
Subject: Re: [SP-pm] rodar coisas periodicas em perl

calma galera tb não é pra tanto 

eu tava achando essa porrada de if (dois) dentro do meu while algo tosco





2013/8/27 Andre Carneiro <andregarciacarneiro em gmail.com>

  Se o Tiago estivesse com pressa, ele diria! E duvido que faria isso da maneira como vocês fizeram. 

  Achei chato mesmo e foda-se! Essa é a minha opinião!


  Proost!




  2013/8/27 Blabos de Blebe <blabos em gmail.com>

    Na minha opinião, vc pode ter a sua opinião ;)



    2013/8/26 Lucas Moraes <lucastiagodemoraes em gmail.com>

      Mas ficar procurando soluções que não vai mudar muito o projeto é trocar 6 por meia duzia. Conhecimento nunca é demais mesmo, isso é fato! Mas tem quantas coisas novas para aprender em milhões de outros assuntos, o que adianta você aprender várias formas de fazer se o final vai ser quase o mesmo ou o mesmo. Tempo custa dinheiro, não é porque você tem tempo para achar uma solução melhor que você é obrigado a fazer, aconselho a pessoa descansar a mente ou procurar algo novo para fazer. Respeito sua opinião, mas vou defendo a minha opinião. Eu postei minha opinião porque o código do Tiago não esta feio, o módulo AE apesar de eu nunca ter usado, olhei no metacpan esta com 49++ até o momento. Lembrando que é só uma opinião minha, não estou colocando o revolver na cabeça de ninguém. Falou.



      Em 26 de agosto de 2013 16:41, Andre Carneiro <andregarciacarneiro em gmail.com> escreveu: 


        Que feio!

        Se houver prazo para pesquisa de novas soluções, eu não vejo porque usar! Além do mais eu aprendi que conhecimento nunca é demais. Então eu acho que essa nova visão agrega sim, e também qualquer visão diferente sobre a solução do problema. Obrigado Lorn!  

        Aprendi também, que desenvolvedor tem que resolver o problema da melhor maneira possível! Que desempenho nunca é demais, e olhar para coisas novas deveria ser um incentivo para fazer as coisas corretamente, e não uma desculpa esfarrapada para resolver as coisas de qualquer maneira, ou desprezar a opinião dos outros de maneira tão grosseira.  

        Proost!







        2013/8/26 Lucas Moraes <lucastiagodemoraes em gmail.com>

          Tiago se seu código esta funcionando deixa rodando. Melhor código é aquele que atende as necessidades do cliente. Pare de procurar problemas onde não existe :)



          Em 26 de agosto de 2013 11:33, Tiago Peczenyj <tiago.peczenyj em gmail.com> escreveu: 


            não entendi



            2013/8/26 Daniel de Oliveira Mantovani <daniel.oliveira.mantovani em gmail.com>

              Para de perder tempo com coisas banais que não vão te agregar nada.

              2013/8/26 Tiago Peczenyj <tiago.peczenyj em gmail.com>:

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






        -- 

        André Garcia Carneiro
        Software Engineer
        (11)982907780 

        =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




      =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




    =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






  -- 
  André Garcia Carneiro
  Software Engineer
  (11)982907780 

  =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






-- 
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/20130827/6be72fd8/attachment-0001.html>


More information about the SaoPaulo-pm mailing list