Welcome to mirror list, hosted at ThFree Co, Russian Federation.

0_log_deprecations.rb « initializers « config - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: b3ef391053eb9eb92a12bc9090901efb940e3562 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# frozen_string_literal: true

def log_deprecations?
  via_env_var = Gitlab::Utils.to_boolean(ENV['GITLAB_LOG_DEPRECATIONS'])
  # enable by default during development unless explicitly turned off
  via_env_var.nil? ? Rails.env.development? : via_env_var
end

# Add `:notify` behavior only if not already added.
#
# See https://github.com/Shopify/deprecation_toolkit/blob/1d0e6f5b99785806f715ce2e9a13dc50f453d1e1/lib/deprecation_toolkit.rb#L21
def add_notify_behavior
  notify = ActiveSupport::Deprecation::DEFAULT_BEHAVIORS.fetch(:notify)
  behaviors = ActiveSupport::Deprecation.behavior

  return if behaviors.find { |behavior| behavior == notify }

  ActiveSupport::Deprecation.behavior = behaviors << notify
end

if log_deprecations?
  # Log deprecation warnings emitted through Kernel#warn, such as from gems or
  # the Ruby VM.
  actions = {
    /.+is deprecated$/ => lambda do |warning|
      Gitlab::DeprecationJsonLogger.info(message: warning.strip, source: 'ruby')
      # Returning :default means we continue emitting this to stderr as well.
      :default
    end
  }

  Warning.process('', actions)

  # We may have silenced deprecations warnings in 00_deprecations.rb on production.
  # Unsilence them again.
  ActiveSupport::Deprecation.silenced = false

  # If we want to consume emitted warnings from Rails we need to attach a notifier first.
  add_notify_behavior

  # Log deprecation warnings emitted from Rails (see ActiveSupport::Deprecation).
  ActiveSupport::Notifications.subscribe('deprecation.rails') do |name, start, finish, id, payload|
    Gitlab::DeprecationJsonLogger.info(message: payload[:message].strip, source: 'rails')
  end
end