Aggiungere un inizializzatore (Datadog APM) in un plugin personalizzato?

Ciao a tutti! È la mia prima volta che scrivo, scusate se ho sbagliato categoria.

Vorrei configurare Discourse per l’instrumentazione APM di Datadog e ho pensato che avrebbe avuto senso utilizzare un plugin personalizzato per questo scopo (seguendo l’idea di discourse-prometheus).

Il modo abituale per configurare un’app Rails per l’APM è utilizzare un inizializzatore: non sono (ancora) molto familiare con il sistema dei plugin in Discourse. Esiste un modo per caricare un tale inizializzatore all’inizio del ciclo di vita dell’app Discourse utilizzando il sistema di plugin esistente? Se no, quali altre opzioni ci sono? Preferirei non dover fare un fork dell’intera app solo per aggiungere un singolo inizializzatore :sweat_smile:

Segui lo stesso pattern nel plugin di Prometheus:

after_initialize è molto probabilmente il posto giusto per inserire questo codice.

Grazie per la rapida risposta @sam! Proverò e ti farò sapere come va.

@sam Ho provato, ma sembra che questo specifico gem ddtrace si aspetti di poter essere eseguito anche in before_initialize. Tuttavia, non sembra che before_initialize sia un metodo valido in plugin.rb. Esistono altre opzioni per far eseguire un plugin in una fase più precoce del ciclo di vita dell’applicazione?

Errore:

[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') Impossibile applicare l'patch di Datadog::Contrib::Rails::Patcher. Causa: non è possibile modificare un Array congelato Posizione: /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'

Il mio prossimo passo sarebbe quello di non utilizzare lo strumento automatico applicato con i “patcher” di quel gem, ma invece integrare parte della logica di strumentazione effettiva nel plugin stesso, in modo simile a quanto hai fatto con discourse-prometheus. Credo che abbia senso comunque per integrarsi con alcune specificità di Discourse. Speravo solo che ci fosse un modo per sfruttare la magia che non ho ancora visto.

@raph sei mai riuscito a far funzionare questo plugin, anche solo con lo strumento di rilevamento automatico?