Classes com métodos #perform
O Delayed Job permite o enfileiramento de jobs com base em instâncias de classes ou structs que possuem um método de instância perform, quando enfileirados com Delayed::Job.enqueue. O AppSignal usará o nome da classe do objeto como nome da action, acrescentando #perform ao nome da action. Um job para StructJob é reportado como StructJob#perform.
id do StructJob no exemplo acima não é reportado.
Jobs usando display_name
O Delayed Job permite que qualquer classe defina seu próprio display_name. Esse valor de display_name pode interferir no relatório do AppSignal se for construído usando valores dinâmicos, como os argumentos passados ao job.
Se o valor retornado pelo método display_name não for uma String no formato ClassName#method_name, o AppSignal trata cada job como uma entidade separada, criando muitos Incidents e notificações. Isso quebra o agrupamento que o AppSignal faz para esses jobs, resultando em muitas variações únicas de incidents reportadas para o job e métricas inutilizáveis nos gráficos.
Para evitar que isso aconteça, defina um método appsignal_name que retorna um nome de job no formato ClassName#method_name. Dessa forma, os jobs serão agrupados corretamente novamente.
Suporte a chamada de método delay
Chamadas de método enfileiradas com a extensão delay serão reportadas com um nome de action semelhante a como são chamadas. Os argumentos passados para o método delayed serão reportados como os argumentos do job.Suporte a Delayed::Job.enqueue
Objetos de jobs customizados enfileirados comDelayed::Job.enqueue serão reportados normalmente, mas não reportarão argumentos. Um objeto inteiro é passado para o Delayed::Job e serializado em YAML e de volta. Não conseguimos detectar argumentos nesse cenário.
Enqueue instrumentation
Enfileirar um job com Delayed::Job registra um eventenqueue.delayed_job, com o título baseado no job sendo enfileirado. Se um job define um appsignal_name, o event de enqueue o utiliza, da mesma forma que o nome da action do job executado.
O AppSignal registra events de enqueue na event timeline da transaction ativa, por exemplo, quando você enfileira um job a partir de uma requisição web ou de dentro de outro job. Ele só registra esses events quando uma transaction está ativa, então enfileirar um job fora de uma transaction não registra nada.
Para parar de registrar events de enqueue em todas as integrações de background job, defina a opção de configuração enable_job_enqueue_instrumentation como false. Isso não afeta a instrumentação dos jobs em si.
Suporte ao Active Job
A integração com o Delayed Job é compatível com o Active Job. Ele reportará tempos de fila nos gráficos, filas e prioridades se definidos no job. Atualize para a versão 2.11.0 da gem Ruby ou mais nova para um suporte aprimorado.Mudanças na integração
Tempo de fila
Na gem AppSignal for Ruby 2.3.0 foi feita uma mudança no registro do tempo de fila. No PR #297, o horário de início do job foi usado em vez do horário de criação do job. Isso significa que o tempo desde a criação de um job até o momento em que ele deveria iniciar não é mais registrado como tempo de fila. Isso evitará que tempos de fila muito longos distorçam os gráficos de tempo de fila no AppSignal.com.Aplicações de exemplo
Abaixo está uma lista de aplicações de exemplo disponíveis para testar a integração com o Delayed::Job:- AppSignal + Rails 5 + Delayed::Job
- O exemplo mostra como configurar o AppSignal com Delayed::Job e Rails. No arquivo
READMEestão listados todos os métodos conhecidos e testados de enfileiramento de jobs que o AppSignal suporta.
- O exemplo mostra como configurar o AppSignal com Delayed::Job e Rails. No arquivo
Atributos de span
Somente no modo collector: isso se aplica quando o AppSignal para Ruby é executado no modo collector. Nos demais casos, não tem efeito.
messaging.system— a biblioteca de filas.messaging.destination.name— a fila na qual o job foi colocado.messaging.operation.type— se o span é o enqueue ou a execução do job.
error.type, a classe do erro.
Tracing distribuído
Somente no modo collector: isso se aplica quando o AppSignal para Ruby é executado no modo collector. Nos demais casos, não tem efeito.