O Active Support é uma parte do Rails core que fornece extensões de linguagem Ruby, utilitários e outras coisas. Uma das coisas que ele inclui é uma API de instrumentação que pode ser usada dentro de um aplicativo para medir certas ações que ocorrem dentro do código Ruby, como aquelas dentro de um aplicativo Rails ou do próprio framework. No entanto, não se limita ao Rails. Ele pode ser usado independentemente em outros scripts Ruby, se desejado.
Neste guia, você aprenderá como usar a API de instrumentação do Active Support para medir eventos dentro do Rails e outros códigos Ruby.
Depois de ler este guia, você saberá:
O que a instrumentação pode fornecer.
Como adicionar um assinante a um gancho.
Como visualizar temporizações da instrumentação em seu navegador.
Os ganchos dentro do framework Rails para instrumentação.
Como criar uma implementação personalizada de instrumentação.
A API de instrumentação fornecida pelo Active Support permite que os desenvolvedores forneçam ganchos aos quais outros desenvolvedores podem se conectar. Existem vários desses dentro do framework Rails. Com esta API, os desenvolvedores podem optar por serem notificados quando certos eventos ocorrem dentro de seu aplicativo ou outro trecho de código Ruby.
Por exemplo, há um gancho fornecido dentro do Active Record que é chamado toda vez que o Active Record usa uma consulta SQL em um banco de dados. Este gancho pode ser assinado e usado para rastrear o número de consultas durante uma determinada ação. Há outro gancho em torno do processamento de uma ação de um controlador. Isso poderia ser usado, por exemplo, para rastrear quanto tempo uma ação específica levou.
Você também pode criar seus próprios eventos dentro do seu aplicativo aos quais você pode se inscrever posteriormente.
Se você estiver preocupado com a precisão de started e finished para calcular um tempo decorrido preciso, use ActiveSupport::Notifications.monotonic_subscribe. O bloco fornecido receberá os mesmos argumentos acima, mas o started e finished terão valores com um tempo monótono preciso em vez do tempo de parede.
Definir todos esses argumentos de bloco toda vez pode ser tedioso. Você pode facilmente criar um ActiveSupport::Notifications::Event
a partir dos argumentos do bloco assim:
ActiveSupport::Notifications.subscribe"process_action.action_controller"do|*args|event=ActiveSupport::Notifications::Event.new(*args)event.name# => "process_action.action_controller"event.duration# => 10 (em milissegundos)event.payload# => {:extra=>informação}Rails.logger.info"#{event} Recebido!"end
Você também pode passar um bloco que aceite apenas um argumento, e ele receberá um objeto de evento:
ActiveSupport::Notifications.subscribe"process_action.action_controller"do|event|event.name# => "process_action.action_controller"event.duration# => 10 (em milissegundos)event.payload# => {:extra=>informação}Rails.logger.info"#{event} Recebido!"end
Você também pode se inscrever em eventos que correspondam a uma expressão regular. Isso permite que você se inscreva em
múltiplos eventos de uma vez. Veja como se inscrever em tudo do ActionController:
ActiveSupport::Notifications.subscribe(/action_controller/)do|*args|# inspecione todos os eventos do ActionControllerend
O Rails implementa o padrão Server Timing para disponibilizar informações de temporização no navegador da web. Para habilitar, edite a configuração do ambiente (geralmente development.rb, pois é mais usado no desenvolvimento) para incluir o seguinte:
config.server_timing=true
Depois de configurado (incluindo reiniciar o servidor), você pode ir para o painel Ferramentas do Desenvolvedor do seu navegador, em seguida, selecione Rede e recarregue sua página. Em seguida, você pode selecionar qualquer solicitação para o seu servidor Rails e verá as temporizações do servidor na guia de temporizações. Para um exemplo de como fazer isso, consulte a Documentação do Firefox.
A chave :cache_hits é incluída apenas se a coleção for renderizada com cached: true.
ruby
{
identifier: "/Users/adam/projects/notifications/app/views/posts/_post.html.erb",
count: 3,
cache_hits: 0
}
Adicionar seus próprios eventos também é fácil. O Active Support cuidará de
todo o trabalho pesado para você. Basta chamar ActiveSupport::Notifications.instrument com um nome, payload e um bloco.
A notificação será enviada após o retorno do bloco. O Active Support gerará os tempos de início e término,
e adicionará o ID exclusivo do instrumentador. Todos os dados passados para a chamada instrument serão incluídos
no payload.
Aqui está um exemplo:
ActiveSupport::Notifications.instrument"my.custom.event",this: :datado# faça suas personalizações aquiend
Você também pode chamar instrument sem passar um bloco. Isso permite que você aproveite a infraestrutura de instrumentação para outros usos de mensagens.
Você deve seguir as convenções do Rails ao definir seus próprios eventos. O formato é: evento.biblioteca.
Se sua aplicação estiver enviando Tweets, você deve criar um evento chamado tweet.twitter.
Feedback
Você é incentivado a ajudar a melhorar a qualidade deste guia.
Por favor, contribua se encontrar algum erro de digitação ou factual.
Para começar, você pode ler nossa contribuição à documentação seção.
Você também pode encontrar conteúdo incompleto ou desatualizado.
Por favor, adicione qualquer documentação ausente para o principal. Certifique-se de verificar
Guias Edge primeiro para verificar
se os problemas já foram corrigidos ou não no branch principal.
Verifique as Diretrizes dos Guias do Ruby on Rails
para estilo e convenções.
Se por algum motivo você encontrar algo para corrigir, mas não puder corrigi-lo você mesmo, por favor
abra uma issue.
E por último, mas não menos importante, qualquer tipo de discussão sobre a documentação do Ruby on Rails
é muito bem-vinda no Fórum oficial do Ruby on Rails.