Class: Gitlab::ApplicationContext
- Inherits:
-
Object
- Object
- Gitlab::ApplicationContext
- 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
- .application_attributes ⇒ Object
- .current ⇒ Object
- .current_context_attribute(attribute_name) ⇒ Object
- .current_context_include?(attribute_name) ⇒ Boolean
- .known_keys ⇒ Object
- .push(args) ⇒ Object
- .with_context(args, &block) ⇒ Object
- .with_raw_context(attributes = {}, &block) ⇒ Object
Instance Method Summary collapse
-
#initialize(**args) ⇒ ApplicationContext
constructor
A new instance of ApplicationContext.
-
#to_lazy_hash ⇒ Object
rubocop: disable Metrics/CyclomaticComplexity rubocop: disable Metrics/PerceivedComplexity.
-
#use ⇒ Object
rubocop: enable Metrics/CyclomaticComplexity rubocop: enable Metrics/PerceivedComplexity.
Constructor Details
#initialize(**args) ⇒ ApplicationContext
Returns a new instance of ApplicationContext.
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_attributes ⇒ Object
56 57 58 |
# File 'lib/gitlab/application_context.rb', line 56 def self.application_attributes APPLICATION_ATTRIBUTES end |
.current ⇒ Object
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
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_keys ⇒ Object
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_hash ⇒ Object
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 |
#use ⇒ Object
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 |