Move sentry into reloader

pull/10420/head
Oliver Günther 2 years ago
parent 9f96e2926e
commit 67946ce286
No known key found for this signature in database
GPG Key ID: A3A8BDAD7C0C552C
  1. 144
      config/initializers/sentry.rb

@ -1,87 +1,89 @@
if OpenProject::Logging::SentryLogger.enabled?
Sentry.init do |config|
config.dsn = OpenProject::Logging::SentryLogger.sentry_dsn
config.breadcrumbs_logger = OpenProject::Configuration.sentry_breadcrumb_loggers.map(&:to_sym)
# Output debug info for sentry
config.before_send = lambda do |event, hint|
Rails.logger.debug do
payload_sizes = event.to_json_compatible.transform_values { |v| JSON.generate(v).bytesize }.inspect
"[Sentry] will send event #{hint}. Payload sizes are #{payload_sizes.inspect}"
Rails.application.reloader.to_prepare do
Sentry.init do |config|
config.dsn = OpenProject::Logging::SentryLogger.sentry_dsn
config.breadcrumbs_logger = OpenProject::Configuration.sentry_breadcrumb_loggers.map(&:to_sym)
# Output debug info for sentry
config.before_send = lambda do |event, hint|
Rails.logger.debug do
payload_sizes = event.to_json_compatible.transform_values { |v| JSON.generate(v).bytesize }.inspect
"[Sentry] will send event #{hint}. Payload sizes are #{payload_sizes.inspect}"
end
event
end
event
end
# Add plugins with openproject/open_project in backtraces to internal
config.app_dirs_pattern = /(bin|exe|app|config|lib|open_?project)/
# Add plugins with openproject/open_project in backtraces to internal
config.app_dirs_pattern = /(bin|exe|app|config|lib|open_?project)/
# Don't send loaded modules
config.send_modules = false
# Don't send loaded modules
config.send_modules = false
# Disable sentry's internal client reports
config.send_client_reports = false
# Disable sentry's internal client reports
config.send_client_reports = false
# Cleanup backtrace
config.backtrace_cleanup_callback = lambda do |backtrace|
Rails.backtrace_cleaner.clean(backtrace)
end
# Cleanup backtrace
config.backtrace_cleanup_callback = lambda do |backtrace|
Rails.backtrace_cleaner.clean(backtrace)
end
# Sample rate for performance
# 0.0 = disabled
# 1.0 = all samples are traced
sample_factor = OpenProject::Configuration.sentry_trace_factor.to_f
# Define a tracing sample handler
trace_sampler = lambda do |sampling_context|
# if this is the continuation of a trace, just use that decision (rate controlled by the caller)
next sampling_context[:parent_sampled] unless sampling_context[:parent_sampled].nil?
# transaction_context is the transaction object in hash form
# keep in mind that sampling happens right after the transaction is initialized
# for example, at the beginning of the request
transaction_context = sampling_context[:transaction_context]
# transaction_context helps you sample transactions with more sophistication
# for example, you can provide different sample rates based on the operation or name
op = transaction_context[:op]
transaction_name = transaction_context[:name]
rate = case op
when /request/
case transaction_name
when /health_check/
0.0
# Sample rate for performance
# 0.0 = disabled
# 1.0 = all samples are traced
sample_factor = OpenProject::Configuration.sentry_trace_factor.to_f
# Define a tracing sample handler
trace_sampler = lambda do |sampling_context|
# if this is the continuation of a trace, just use that decision (rate controlled by the caller)
next sampling_context[:parent_sampled] unless sampling_context[:parent_sampled].nil?
# transaction_context is the transaction object in hash form
# keep in mind that sampling happens right after the transaction is initialized
# for example, at the beginning of the request
transaction_context = sampling_context[:transaction_context]
# transaction_context helps you sample transactions with more sophistication
# for example, you can provide different sample rates based on the operation or name
op = transaction_context[:op]
transaction_name = transaction_context[:name]
rate = case op
when /request/
case transaction_name
when /health_check/
0.0
else
[0.1 * sample_factor, 1.0].min
end
when /delayed_job/
[0.01 * sample_factor, 1.0].min
else
[0.1 * sample_factor, 1.0].min
0.0 # ignore all other transactions
end
when /delayed_job/
[0.01 * sample_factor, 1.0].min
else
0.0 # ignore all other transactions
end
Rails.logger.debug { "[SENTRY TRACE SAMPLER] Decided on sampling rate #{rate} for #{op}: #{transaction_name} " }
Rails.logger.debug { "[SENTRY TRACE SAMPLER] Decided on sampling rate #{rate} for #{op}: #{transaction_name} " }
rate
end
rate
end
# Assign the sampler conditionally to avoid running the lambda
# when we don't trace anyway
if sample_factor.zero?
Rails.logger.debug { "[SENTRY TRACE SAMPLER] Requested factor is zero, skipping performance tracing" }
config.traces_sample_rate = 0
config.traces_sampler = nil
else
Rails.logger.debug { "[SENTRY TRACE SAMPLER] Requested factor is #{sample_factor}, setting up performance tracing" }
config.traces_sampler = trace_sampler
end
# Assign the sampler conditionally to avoid running the lambda
# when we don't trace anyway
if sample_factor.zero?
Rails.logger.debug { "[SENTRY TRACE SAMPLER] Requested factor is zero, skipping performance tracing" }
config.traces_sample_rate = 0
config.traces_sampler = nil
else
Rails.logger.debug { "[SENTRY TRACE SAMPLER] Requested factor is #{sample_factor}, setting up performance tracing" }
config.traces_sampler = trace_sampler
# Set release info
config.release = OpenProject::VERSION.to_s
end
# Set release info
config.release = OpenProject::VERSION.to_s
# Extend the core log delegator
handler = ::OpenProject::Logging::SentryLogger.method(:log)
::OpenProject::Logging::LogDelegator.register(:sentry, handler)
end
# Extend the core log delegator
handler = ::OpenProject::Logging::SentryLogger.method(:log)
::OpenProject::Logging::LogDelegator.register(:sentry, handler)
end

Loading…
Cancel
Save