¿Añadir un inicializador de (Datadog APM) en un plugin personalizado?

¡Hola a todos! Es mi primera publicación, disculpen si elegí la categoría incorrecta.

Me gustaría configurar Discourse para instrumentación APM de Datadog y pensé que tendría sentido usar un plugin personalizado para este propósito (siguiendo la idea de discourse-prometheus).

La forma habitual de configurar una aplicación Rails para APM es usar un inicializador; aún no estoy muy familiarizado con el sistema de plugins de Discourse. ¿Existe alguna manera de cargar un inicializador así al principio del ciclo de vida de la aplicación de Discourse utilizando el sistema de plugins existente? Si no es así, ¿qué otras opciones existen? Preferiría no tener que hacer un fork de toda la aplicación solo para agregar un único inicializador :sweat_smile:

Sigue el mismo patrón en el plugin de Prometheus:

after_initialize es muy probablemente el lugar donde quieres poner este código.

¡Gracias por la rápida respuesta, @sam! Lo probaré y te diré cómo me va.

@sam Lo intenté, pero parece que esta gema específica de ddtrace espera poder ejecutarse también en before_initialize. Sin embargo, parece que before_initialize no es un método válido en plugin.rb. ¿Existen otras opciones para que un plugin se ejecute antes en el ciclo de vida de la aplicación?

Error:

[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') Failed to apply Datadog::Contrib::Rails::Patcher patch. Cause: can't modify frozen Array Location: /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'

Mi próximo paso sería no utilizar la instrumentación automática que se aplica con los ‘patchers’ de esa gem, sino integrar parte de la lógica real de instrumentación en el propio plugin, de manera similar a como lo has hecho con discourse-prometheus. Supongo que tendría sentido de todos modos para conectarme a algunos aspectos específicos de Discourse. Solo esperaba que hubiera una forma de aprovechar la magia que aún no he visto.

@raph, ¿lograste hacer que este plugin funcionara, incluso solo con la instrumentación automática?