app/controllers/application_controller.rb (38 lines of code) (raw):

class ApplicationController < ActionController::Base protect_from_forgery with: :exception, except: %i[rum_config] User = Struct.new(:id, :email, :username) before_action do ElasticAPM.set_label :company, 'opbeans' ElasticAPM.set_user User.new(3229, 'coffeelover@example.com', 'coffeelover') end INDEX_FILE = File.read(Rails.root.join('frontend', 'build', 'index.html')) def index respond_to do |format| format.html do render plain: inject_rum_config(INDEX_FILE) end end end private def inject_rum_config(html) html .gsub( '<head>', "<head><script>window.rumConfig = #{rum_config.to_json}</script>" ).gsub( '<script type="text/javascript" src="/rum-config.js"></script>', '' ) end def rum_config { serviceName: ENV['ELASTIC_APM_JS_SERVICE_NAME'], serviceVersion: ENV['ELASTIC_APM_JS_SERVICE_VERSION'], serverUrl: ENV['ELASTIC_APM_JS_SERVER_URL'], pageLoadTraceId: ElasticAPM.current_transaction&.trace_id, pageLoadSpanId: ElasticAPM.current_transaction&.ensure_parent_id, pageLoadSampled: ElasticAPM.current_transaction&.sampled? } end end