Добавить инициализатор (Datadog APM) в пользовательский плагин?

Всем привет! Я новичок на форуме, извините, если выбрал не ту категорию.

Хочу настроить Discourse для инструментирования APM в Datadog и решил, что для этого логично использовать собственный плагин (следуя идее discourse-prometheus).

Обычный способ настройки Rails-приложения для APM — использование инициализатора. Я пока не очень глубоко знаком с системой плагинов в Discourse. Есть ли способ загрузить такой инициализатор на раннем этапе жизненного цикла приложения Discourse, используя существующую систему плагинов? Если нет, какие ещё варианты существуют? Я бы предпочёл не форкать всё приложение ради добавления одного инициализатора :sweat_smile:

Следуйте тому же шаблону в плагине Prometheus:

after_initialize — это наиболее вероятное место, куда стоит поместить этот код.

Спасибо за быстрый ответ, @sam! Я попробую и сообщу, как всё пройдёт.

@sam Я пробовал это, но, похоже, этот конкретный гем ddtrace ожидает возможность выполнения и в before_initialize. Однако, кажется, что before_initialize не является допустимым методом в plugin.rb. Есть ли другие варианты для плагина, чтобы запуститься раньше в жизненном цикле приложения?

Ошибка:

[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') Не удалось применить патч Datadog::Contrib::Rails::Patcher. Причина: невозможно изменить замороженный массив Расположение: /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'

Мой следующий шаг — отказаться от автоматической инструментации, применяемой «патчерами» этого гема, и вместо этого интегрировать часть логики инструментации непосредственно в плагин, аналогично тому, как вы сделали это с discourse-prometheus. В целом, это кажется разумным решением для учёта специфики Discourse. Я просто надеялся, что существует способ использовать эту «магию», который я пока не обнаружил.

@raph, тебе хоть раз удалось заставить этот плагин работать, даже просто с автоматической инструментацией?