Class: Gitlab::ApplicationContext

Inherits:
Object
  • Object
show all
Includes:
Utils::LazyAttributes, Utils::StrongMemoize
Defined in:
lib/gitlab/application_context.rb

Overview

A GitLab-rails specific accessor for ‘Labkit::Logging::ApplicationContext`

Defined Under Namespace

Classes: Attribute

Constant Summary collapse

LOG_KEY =
Labkit::Context::LOG_KEY

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**args) ⇒ ApplicationContext

Returns a new instance of ApplicationContext.

Raises:

  • (ArgumentError)


86
87
88
89
90
91
92
93
94
# File 'lib/gitlab/application_context.rb', line 86

def initialize(**args)
  unknown_attributes = args.keys - self.class.application_attributes.map(&:name)
  raise ArgumentError, "#{unknown_attributes} are not known keys" if unknown_attributes.any?

  @set_values = args.keys

  assign_attributes(args)
  set_attr_readers
end

Class Method Details

.application_attributesObject



56
57
58
# File 'lib/gitlab/application_context.rb', line 56

def self.application_attributes
  APPLICATION_ATTRIBUTES
end

.currentObject



74
75
76
# File 'lib/gitlab/application_context.rb', line 74

def self.current
  Labkit::Context.current.to_h
end

.current_context_attribute(attribute_name) ⇒ Object



82
83
84
# File 'lib/gitlab/application_context.rb', line 82

def self.current_context_attribute(attribute_name)
  Labkit::Context.current&.get_attribute(attribute_name)
end

.current_context_include?(attribute_name) ⇒ Boolean

Returns:

  • (Boolean)


78
79
80
# File 'lib/gitlab/application_context.rb', line 78

def self.current_context_include?(attribute_name)
  current.include?(Labkit::Context.log_key(attribute_name))
end

.known_keysObject



52
53
54
# File 'lib/gitlab/application_context.rb', line 52

def self.known_keys
  KNOWN_KEYS
end

.push(args) ⇒ Object



69
70
71
72
# File 'lib/gitlab/application_context.rb', line 69

def self.push(args)
  application_context = new(**args)
  Labkit::Context.push(application_context.to_lazy_hash)
end

.with_context(args, &block) ⇒ Object



60
61
62
63
# File 'lib/gitlab/application_context.rb', line 60

def self.with_context(args, &block)
  application_context = new(**args)
  application_context.use(&block)
end

.with_raw_context(attributes = {}, &block) ⇒ Object



65
66
67
# File 'lib/gitlab/application_context.rb', line 65

def self.with_raw_context(attributes = {}, &block)
  Labkit::Context.with_context(attributes, &block)
end

Instance Method Details

#to_lazy_hashObject

rubocop: disable Metrics/CyclomaticComplexity rubocop: disable Metrics/PerceivedComplexity



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/gitlab/application_context.rb', line 98

def to_lazy_hash
  {}.tap do |hash|
    assign_hash_if_value(hash, :caller_id)
    assign_hash_if_value(hash, :root_caller_id)
    assign_hash_if_value(hash, :remote_ip)
    assign_hash_if_value(hash, :related_class)
    assign_hash_if_value(hash, :feature_category)
    assign_hash_if_value(hash, :artifact_used_cdn)
    assign_hash_if_value(hash, :artifacts_dependencies_size)
    assign_hash_if_value(hash, :artifacts_dependencies_count)
    assign_hash_if_value(hash, :merge_action_status)

    hash[:user] = -> { username } if include_user?
    hash[:user_id] = -> { user_id } if include_user?
    hash[:project] = -> { project_path } if include_project?
    hash[:root_namespace] = -> { root_namespace_path } if include_namespace?
    hash[:client_id] = -> { client } if include_client?
    hash[:pipeline_id] = -> { job&.pipeline_id } if set_values.include?(:job)
    hash[:job_id] = -> { job&.id } if set_values.include?(:job)
    hash[:artifact_size] = -> { artifact&.size } if set_values.include?(:artifact)
  end
end

#useObject

rubocop: enable Metrics/CyclomaticComplexity rubocop: enable Metrics/PerceivedComplexity



123
124
125
# File 'lib/gitlab/application_context.rb', line 123

def use
  Labkit::Context.with_context(to_lazy_hash) { yield }
end