Ajouter un initialiseur (Datadog APM) dans un plugin personnalisé ?

Bonjour à tous ! Premier post, désolé si j’ai choisi la mauvaise catégorie.

Je souhaite configurer Discourse pour l’instrumentation APM Datadog et il me semble pertinent d’utiliser un plugin personnalisé à cet effet (en suivant l’exemple de discourse-prometheus).

La méthode habituelle pour configurer une application Rails pour l’APM consiste à utiliser un initialiseur. Je ne suis pas encore très familier avec le système de plugins de Discourse. Existe-t-il un moyen de charger un tel initialiseur tôt dans le cycle de vie de l’application Discourse en utilisant le système de plugins existant ? Sinon, quelles autres options existent ? Je préférerais éviter de devoir forker l’ensemble de l’application juste pour ajouter un seul initialiseur :sweat_smile:.

Suivez le même modèle dans le plugin Prometheus :

after_initialize est très probablement l’endroit où vous souhaitez placer ce code.

Merci pour votre réponse rapide @sam ! Je vais essayer et vous tiendrai informé de la suite.

@sam J’ai essayé, mais apparemment ce gem ddtrace s’attend à pouvoir s’exécuter également dans before_initialize. Cependant, il ne semble pas que before_initialize soit une méthode valide dans plugin.rb. Y a-t-il d’autres options pour qu’un plugin s’exécute plus tôt dans le cycle de vie de l’application ?

Erreur :

[2020-06-30T15:30:40.348519 #2313] ERROR -- ddtrace: [ddtrace] (/workspace/plugins/discourse-datadog/gems/2.6.2/gems/ddtrace-0.37.0/lib/ddtrace/contrib/patcher.rb:43:in `on_patch_error') Échec de l'application du correctif Datadog::Contrib::Rails::Patcher. Cause : impossible de modifier un tableau figé Emplacement : /home/vscode/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/actionpack-6.0.3.1/lib/action_dispatch/middleware/stack.rb:102:in `insert'

Ma prochaine étape consisterait à ne pas utiliser l’instrumentation automatique appliquée par les « patchers » de ce gem, mais plutôt à intégrer une partie de la logique d’instrumentation réelle dans le plugin lui-même, de manière similaire à ce que vous avez fait avec discourse-prometheus. Je pense que cela aurait du sens de toute façon pour s’intégrer à certaines spécificités de Discourse. J’espérais simplement qu’il existe un moyen de tirer parti de cette magie que je n’ai pas encore découvert.

@raph as-tu réussi à faire fonctionner ce plugin, ne serait-ce qu’avec l’instrumentation automatique ?