Adicionar inicializador (Datadog APM) em plugin personalizado?

Olá a todos! Primeira postagem, desculpem se escolhi a categoria errada.

Gostaria de configurar o Discourse para instrumentação APM do Datadog e achei que faria sentido usar um plugin personalizado para isso (seguindo a ideia do discourse-prometheus).

A maneira usual de configurar um aplicativo Rails para APM é usar um inicializador (initializer) — ainda não estou profundamente familiarizado com o sistema de plugins do Discourse. Existe alguma maneira de carregar esse inicializador no início do ciclo de vida do aplicativo Discourse usando o sistema de plugins existente? Se não, quais outras opções existem? Preferiria não ter que fazer um fork de todo o aplicativo apenas para adicionar um único inicializador :sweat_smile:

Siga o mesmo padrão no plugin do Prometheus:

after_initialize é muito provavelmente onde você deve colocar esse código.

Obrigado pela resposta rápida, @sam! Vou tentar e te aviso como fica.

@sam Tentei isso, mas aparentemente essa gem específica do ddtrace espera poder ser executada também no before_initialize. No entanto, parece que before_initialize não é um método válido em plugin.rb. Existem outras opções para um plugin ser executado mais cedo no ciclo de vida do aplicativo?

Erro:

[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') Falha ao aplicar o patch Datadog::Contrib::Rails::Patcher. Causa: não é possível modificar Array congelado Local: /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'

Meu próximo passo seria não usar a instrumentação automática aplicada pelos ‘patchers’ dessa gem, mas sim incorporar parte da lógica real de instrumentação no próprio plugin, de forma semelhante ao que você fez com discourse-prometheus. Acho que faria sentido, de qualquer forma, integrar-se a alguns detalhes específicos do Discourse. Eu só esperava que houvesse uma maneira de aproveitar essa mágica que eu ainda não tinha visto.

@raph, você conseguiu fazer esse plugin funcionar, mesmo que apenas com a instrumentação automática?