Delayed::Job est l’un des background processors les plus populaires pour Ruby et Rails, créé à l’origine chez Shopify.
La gem AppSignal détecte Delayed Job lorsqu’il est présent et se branche sur les callbacks standard de Delayed Job. Aucune autre action n’est requise pour activer l’intégration.
Cette intégration vise à prendre en charge toutes les différentes méthodes de mise en file d’attente de Delayed::Job. Certaines méthodes peuvent avoir des limitations ou des options de personnalisation.
Remarque : le reporting des jobs utilisant cette méthode est pris en
charge depuis la version 2.11.0 de la gem AppSignal pour Ruby.
Delayed Job prend en charge la mise en file d’attente de jobs basés sur des instances de classes ou de structs qui écoutent une méthode d’instance perform, lorsqu’ils sont mis en file d’attente avec Delayed::Job.enqueue. AppSignal utilise le nom de classe de l’objet comme nom d’action, en ajoutant #perform au nom d’action. Un job pour StructJob est signalé comme StructJob#perform.
Notez que cette méthode de mise en file d’attente ne prend pas en charge les arguments, car un objet entier est mis en file d’attente. Les objets de job sont sérialisés lors de la mise en file d’attente et désérialisés lors de leur traitement. AppSignal ne lit pas l’état de l’objet désérialisé. L’argument id pour le StructJob dans l’exemple ci-dessus n’est pas signalé.
Jobs utilisant display_name
Delayed Job permet à toute classe de définir son propre display_name. Cette valeur display_name peut interférer avec le reporting d’AppSignal si elle est construite à l’aide de valeurs dynamiques, telles que les arguments donnés au job.
Si la valeur de retour de la méthode display_name ne renvoie pas une chaîne au format ClassName#method_name, AppSignal traite chaque job comme une entité distincte, créant de nombreux incidents et notifications. Cela rompt le regroupement effectué par AppSignal pour ces jobs, ce qui entraîne le signalement par AppSignal de nombreuses variations uniques d’incidents pour le job, et des métriques inutilisables dans les graphiques.
Pour éviter cela, définissez une méthode appsignal_name qui renvoie un nom de job au format ClassName#method_name. De cette manière, les jobs seront à nouveau correctement regroupés.
Prise en charge de l’appel de méthode delay
Les appels de méthode mis en file d’attente avec l’extension delay seront signalés avec un nom d’action similaire à la façon dont ils sont appelés.
Les arguments fournis à la méthode différée seront signalés comme les arguments du job.
Prise en charge de Delayed::Job.enqueue
Remarque : la détection du nom du job a été ajoutée dans la version 2.11.0 de la gem Ruby.
Les objets de jobs personnalisés mis en file d’attente avec Delayed::Job.enqueue sont signalés normalement, mais ne signalent pas les arguments. Un objet entier est donné à Delayed::Job, sérialisé en YAML puis désérialisé. Nous ne pouvons pas détecter les arguments dans ce scénario.
Instrumentation de mise en file d’attente
Mettre en file d’attente un job avec Delayed::Job enregistre un événement enqueue.delayed_job, intitulé d’après le job mis en file d’attente. Si un job définit un appsignal_name, l’événement de mise en file d’attente l’utilise, de la même manière que le nom d’action du job exécuté.
AppSignal enregistre les événements de mise en file d’attente dans la chronologie des événements de la transaction active, par exemple lorsque vous mettez en file d’attente un job depuis une requête web ou depuis un autre job. Il ne les enregistre que lorsqu’une transaction est active, donc mettre en file d’attente un job en dehors d’une transaction n’enregistre rien.
Pour arrêter d’enregistrer les événements de mise en file d’attente pour toutes les intégrations de jobs en arrière-plan, définissez l’option de configuration enable_job_enqueue_instrumentation sur false. Cela n’affecte pas l’instrumentation des jobs eux-mêmes.
Prise en charge d’Active Job
L’intégration Delayed Job est compatible avec Active Job. Elle signalera les queue times dans les graphiques, les queues et les priorités si elles sont définies sur le job.
Mettez à niveau vers la version 2.11.0 ou plus récente de la gem Ruby pour une prise en charge améliorée.
Modifications apportées à l’intégration
Queue time
Dans la gem AppSignal pour Ruby 2.3.0, une modification a été apportée à l’enregistrement du queue time. Dans la PR #297, l’heure de début du job a été utilisée plutôt que l’heure de création du job.
Cela signifie que le temps entre la création d’un job et le moment où il doit démarrer n’est plus enregistré comme queue time. Cela évitera que des queue times très longs ne faussent les graphiques de queue time sur AppSignal.com.
Exemples d’applications
Vous trouverez ci-dessous une liste d’exemples d’applications disponibles pour tester l’intégration de Delayed::Job avec :
- AppSignal + Rails 5 + Delayed::Job
- L’exemple montre comment configurer AppSignal avec Delayed::Job et Rails. Dans le fichier
README, il répertorie toutes les méthodes connues et testées de mise en file d’attente des jobs prises en charge par AppSignal.