gitlab-labkit 0.42.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci-asdf-versions.yml +1 -1
  3. data/.pre-commit-config.yaml +1 -1
  4. data/.tool-versions +1 -1
  5. data/README.md +1 -1
  6. data/config/{covered_experiences → user_experience_slis}/schema.json +5 -5
  7. data/gitlab-labkit.gemspec +2 -2
  8. data/lib/gitlab-labkit.rb +2 -1
  9. data/lib/labkit/fields.rb +20 -7
  10. data/lib/labkit/middleware/rack.rb +3 -3
  11. data/lib/labkit/middleware/sidekiq/client.rb +1 -1
  12. data/lib/labkit/middleware/sidekiq/server.rb +1 -1
  13. data/lib/labkit/middleware/sidekiq/{covered_experience → user_experience_sli}/client.rb +4 -4
  14. data/lib/labkit/middleware/sidekiq/{covered_experience → user_experience_sli}/server.rb +4 -4
  15. data/lib/labkit/middleware/sidekiq/user_experience_sli.rb +17 -0
  16. data/lib/labkit/middleware/sidekiq.rb +2 -1
  17. data/lib/labkit/rspec/README.md +36 -27
  18. data/lib/labkit/rspec/matchers/{covered_experience_matchers.rb → user_experience_matchers.rb} +53 -47
  19. data/lib/labkit/rspec/matchers.rb +1 -1
  20. data/lib/labkit/{covered_experience → user_experience_sli}/README.md +28 -28
  21. data/lib/labkit/{covered_experience → user_experience_sli}/current.rb +7 -7
  22. data/lib/labkit/user_experience_sli/error.rb +9 -0
  23. data/lib/labkit/{covered_experience → user_experience_sli}/experience.rb +26 -26
  24. data/lib/labkit/{covered_experience → user_experience_sli}/null.rb +2 -2
  25. data/lib/labkit/{covered_experience → user_experience_sli}/registry.rb +13 -13
  26. data/lib/labkit/{covered_experience.rb → user_experience_sli.rb} +16 -11
  27. metadata +18 -18
  28. data/lib/labkit/covered_experience/error.rb +0 -9
  29. data/lib/labkit/middleware/sidekiq/covered_experience.rb +0 -14
  30. /data/config/{covered_experiences → user_experience_slis}/testing_sample.yml +0 -0
@@ -1,51 +1,51 @@
1
- # Covered Experience
1
+ # User Experience SLIs
2
2
 
3
- This module covers the definition for Covered Experiences, as described in the [blueprint](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/covered_experience_slis/#covered-experience-definition).
3
+ This module covers the definition for User Experience SLIs, as described in the [blueprint](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/user_experience_slis/#user-experience-sli-definition).
4
4
 
5
5
  ## Configuration
6
6
 
7
7
  ### Logger Configuration
8
8
 
9
- By default, `Labkit::CoveredExperience` uses `Labkit::Logging::JsonLogger.new($stdout)` for logging. You can configure a custom logger:
9
+ By default, `Labkit::UserExperienceSli` uses `Labkit::Logging::JsonLogger.new($stdout)` for logging. You can configure a custom logger:
10
10
 
11
11
  ```ruby
12
- Labkit::CoveredExperience.configure do |config|
12
+ Labkit::UserExperienceSli.configure do |config|
13
13
  config.logger = Labkit::Logging::JsonLogger.new($stdout)
14
14
  end
15
15
  ```
16
16
 
17
- This configuration affects all Covered Experience instances and their logging output.
17
+ This configuration affects all User Experience SLI instances and their logging output.
18
18
 
19
19
  ### Registry Path Configuration
20
20
 
21
- By default, covered experience definitions are loaded from the `config/covered_experiences` directory. You can configure a custom registry path:
21
+ By default, user experience SLI definitions are loaded from the `config/user_experience_slis` directory. You can configure a custom registry path:
22
22
 
23
23
  ```ruby
24
- Labkit::CoveredExperience.configure do |config|
24
+ Labkit::UserExperienceSli.configure do |config|
25
25
  config.registry_path = "my/custom/path"
26
26
  end
27
27
  ```
28
28
 
29
29
  This allows you to:
30
- - Store covered experience definitions in a different directory structure
30
+ - Store user experience SLI definitions in a different directory structure
31
31
  - Use different paths for different environments
32
32
  - Organize definitions according to your application's needs
33
33
 
34
34
  **Note:** The registry is automatically reset when the configuration changes, so the new path takes effect immediately.
35
35
 
36
- ### Covered Experience Definitions
36
+ ### User Experience Definitions
37
37
 
38
- Covered experience definitions will be lazy loaded from the default directory (`config/covered_experiences`).
38
+ User Experience SLI definitions will be lazy loaded from the default directory (`config/user_experience_slis`).
39
39
 
40
- Create a new covered experience file in the registry directory, e.g. config/covered_experiences/merge_request_creation.yaml
40
+ Create a new user experience SLI file in the registry directory, e.g. config/user_experience_slis/merge_request_creation.yaml
41
41
 
42
- The basename of the file will be taken as the covered_experience_id.
42
+ The basename of the file will be taken as the user_experience_id.
43
43
 
44
44
  The schema header is optional, but if you're using VSCode (or any other editor with support), you can get them validated
45
45
  instantaneously in the editor via a [JSON schema plugin](https://marketplace.visualstudio.com/items?itemName=remcohaszing.schemastore).
46
46
 
47
47
  ```yaml
48
- # yaml-language-server: $schema=https://gitlab.com/gitlab-org/ruby/gems/labkit-ruby/-/raw/master/config/covered_experiences/schema.json
48
+ # yaml-language-server: $schema=https://gitlab.com/gitlab-org/ruby/gems/labkit-ruby/-/raw/master/config/user_experience_slis/schema.json
49
49
  description: "Creating a new merge request in a project"
50
50
  feature_category: "source_code_management"
51
51
  urgency: "sync_fast"
@@ -66,22 +66,22 @@ https://docs.gitlab.com/development/feature_categorization/#feature-categorizati
66
66
 
67
67
  ## Usage
68
68
 
69
- The `Labkit::CoveredExperience` module provides a simple API for measuring and tracking covered experiences in your application.
69
+ The `Labkit::UserExperienceSli` module provides a simple API for measuring and tracking user experience SLIs in your application.
70
70
 
71
71
 
72
- #### Accessing a Covered Experience
72
+ #### Accessing a User Experience SLI
73
73
 
74
74
  ```ruby
75
- # Get a covered experience by ID
76
- experience = Labkit::CoveredExperience.get('merge_request_creation')
75
+ # Get a user experience SLI by ID
76
+ experience = Labkit::UserExperienceSli.get('merge_request_creation')
77
77
  ```
78
78
 
79
79
  #### Using with a Block (Recommended)
80
80
 
81
- The simplest way to use covered experiences is with a block, which automatically handles starting and completing the experience:
81
+ The simplest way to use user experience SLIs is with a block, which automatically handles starting and completing the experience:
82
82
 
83
83
  ```ruby
84
- Labkit::CoveredExperience.start('merge_request_creation') do |experience|
84
+ Labkit::UserExperienceSli.start('merge_request_creation') do |experience|
85
85
  # Your code here
86
86
  create_merge_request
87
87
 
@@ -100,7 +100,7 @@ end
100
100
  For more control, you can manually start, checkpoint, and complete experiences:
101
101
 
102
102
  ```ruby
103
- experience = Labkit::CoveredExperience.get('merge_request_creation')
103
+ experience = Labkit::UserExperienceSli.get('merge_request_creation')
104
104
  experience.start
105
105
 
106
106
  # Perform some work
@@ -119,13 +119,13 @@ experience.complete
119
119
 
120
120
  #### Resuming Experiences
121
121
 
122
- You can resume a covered experience that was previously started and stored in the context. This is useful for distributed operations or when work spans multiple processes.
122
+ You can resume a user experience SLI that was previously started and stored in the context. This is useful for distributed operations or when work spans multiple processes.
123
123
 
124
- Just like the start method, we can use a block to automatically complete a covered experience:
124
+ Just like the start method, we can use a block to automatically complete a user experience SLI:
125
125
 
126
126
  ```ruby
127
127
  # Resume an experience from context (with block)
128
- Labkit::CoveredExperience.resume(:merge_request_creation) do |experience|
128
+ Labkit::UserExperienceSli.resume(:merge_request_creation) do |experience|
129
129
  # Continue the work from where it left off
130
130
  finalize_merge_request
131
131
 
@@ -139,7 +139,7 @@ Or manually:
139
139
 
140
140
  ```ruby
141
141
  # Resume an experience from context (manual control)
142
- experience = Labkit::CoveredExperience.resume(:merge_request_creation)
142
+ experience = Labkit::UserExperienceSli.resume(:merge_request_creation)
143
143
 
144
144
  # Continue the work
145
145
  finalize_merge_request
@@ -149,14 +149,14 @@ experience.checkpoint
149
149
  experience.complete
150
150
  ```
151
151
 
152
- **Note:** The `resume` method loads the start time from the Labkit context. If no covered experience data exists in the context, it behaves the same as calling methods on an unstarted experience and safely ignores the operation.
152
+ **Note:** The `resume` method loads the start time from the Labkit context. If no user experience SLI data exists in the context, it behaves the same as calling methods on an unstarted experience and safely ignores the operation.
153
153
 
154
154
  ### Error Handling
155
155
 
156
156
  When using the block form, errors are automatically captured:
157
157
 
158
158
  ```ruby
159
- Labkit::CoveredExperience.start('merge_request_creation') do |experience|
159
+ Labkit::UserExperienceSli.start('merge_request_creation') do |experience|
160
160
  # If this raises an exception, it will be captured automatically
161
161
  risky_operation
162
162
  end
@@ -165,7 +165,7 @@ end
165
165
  For manual control, you can mark errors explicitly:
166
166
 
167
167
  ```ruby
168
- experience = Labkit::CoveredExperience.get('merge_request_creation')
168
+ experience = Labkit::UserExperienceSli.get('merge_request_creation')
169
169
  experience.start
170
170
 
171
171
  begin
@@ -180,6 +180,6 @@ end
180
180
 
181
181
  ### Error Behavior
182
182
 
183
- - In `development` and `test` environments, accessing a non-existent covered experience will raise a `NotFoundError`
183
+ - In `development` and `test` environments, accessing a non-existent user experience SLI will raise a `NotFoundError`
184
184
  - In other environments, a null object is returned that safely ignores all method calls
185
185
  - Attempting to checkpoint or complete an unstarted experience will safely ignore the operation
@@ -1,22 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "active_support"
4
- require "labkit/covered_experience/experience"
4
+ require "labkit/user_experience_sli/experience"
5
5
 
6
6
  module Labkit
7
- module CoveredExperience
7
+ module UserExperienceSli
8
8
  # The `Current` class represents a container for the current set
9
- # of `Labkit::CoveredExperience::Experience` instances started and
9
+ # of `Labkit::UserExperienceSli::Experience` instances started and
10
10
  # not yet completed.
11
11
  #
12
12
  # It uses `ActiveSupport::CurrentAttributes` to provide a thread-safe way to
13
13
  # store and access experiences throughout the request and background job lifecycle.
14
14
  #
15
15
  # Example usage:
16
- # Labkit::CoveredExperience::Current.active_experiences << my_experience
17
- # Labkit::CoveredExperience::Current.rehydrate("create_merge_request", "start_time" => "2025-08-22T10:02:15.237Z")
16
+ # Labkit::UserExperienceSli::Current.active_experiences << my_experience
17
+ # Labkit::UserExperienceSli::Current.rehydrate("create_merge_request", "start_time" => "2025-08-22T10:02:15.237Z")
18
18
  class Current < ActiveSupport::CurrentAttributes
19
- AGGREGATION_KEY = 'labkit_covered_experiences'
19
+ AGGREGATION_KEY = 'labkit_user_experiences'
20
20
 
21
21
  attribute :_active_experiences
22
22
 
@@ -25,7 +25,7 @@ module Labkit
25
25
  end
26
26
 
27
27
  def rehydrate(experience_id, **data)
28
- instance = Labkit::CoveredExperience.get(experience_id).rehydrate(data)
28
+ instance = Labkit::UserExperienceSli.get(experience_id).rehydrate(data)
29
29
  active_experiences[instance.id] = instance
30
30
  instance
31
31
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Labkit
4
+ module UserExperienceSli
5
+ UserExperienceError = Class.new(StandardError)
6
+ NotFoundError = Class.new(UserExperienceError)
7
+ ReservedKeywordError = Class.new(UserExperienceError)
8
+ end
9
+ end
@@ -3,11 +3,11 @@
3
3
  require 'active_support/hash_with_indifferent_access'
4
4
  require 'forwardable'
5
5
  require 'labkit/context'
6
- require 'labkit/covered_experience/current'
7
- require 'labkit/covered_experience/error'
6
+ require 'labkit/user_experience_sli/current'
7
+ require 'labkit/user_experience_sli/error'
8
8
 
9
9
  module Labkit
10
- module CoveredExperience
10
+ module UserExperienceSli
11
11
  URGENCY_THRESHOLDS_IN_SECONDS = {
12
12
  sync_fast: 2,
13
13
  sync_slow: 5,
@@ -17,7 +17,7 @@ module Labkit
17
17
 
18
18
  RESERVED_KEYWORDS = %w[
19
19
  checkpoint
20
- covered_experience
20
+ user_experience_id
21
21
  feature_category
22
22
  urgency
23
23
  start_time
@@ -30,7 +30,7 @@ module Labkit
30
30
  success
31
31
  ].freeze
32
32
 
33
- # The `Experience` class represents a single Covered Experience
33
+ # The `Experience` class represents a single User Experience
34
34
  # event to be measured and reported.
35
35
  class Experience
36
36
  extend Forwardable
@@ -42,7 +42,7 @@ module Labkit
42
42
  end
43
43
 
44
44
  def id
45
- @definition.covered_experience
45
+ @definition.user_experience_id
46
46
  end
47
47
 
48
48
  # Rehydrate an Experience instance from serialized data.
@@ -57,21 +57,21 @@ module Labkit
57
57
  self
58
58
  end
59
59
 
60
- # Start the Covered Experience.
60
+ # Start the User Experience.
61
61
  #
62
62
  # @yield [self] When a block is provided, the experience will be completed automatically.
63
63
  # @param extra [Hash] Additional data to include in the log event
64
64
  # @return [self]
65
- # @raise [CoveredExperienceError] If the block raises an error.
65
+ # @raise [UserExperienceError] If the block raises an error.
66
66
  #
67
67
  # Usage:
68
68
  #
69
- # CoveredExperience.new(definition).start do |experience|
69
+ # UserExperience.new(definition).start do |experience|
70
70
  # experience.checkpoint
71
71
  # experience.checkpoint
72
72
  # end
73
73
  #
74
- # experience = CoveredExperience.new(definition)
74
+ # experience = UserExperience.new(definition)
75
75
  # experience.start
76
76
  # experience.checkpoint
77
77
  # experience.complete
@@ -80,14 +80,14 @@ module Labkit
80
80
  checkpoint_counter.increment(checkpoint: "start", **base_labels)
81
81
  log_event("start", **extra)
82
82
 
83
- Labkit::CoveredExperience::Current.active_experiences[id] = self
83
+ Labkit::UserExperienceSli::Current.active_experiences[id] = self
84
84
 
85
85
  return self unless block_given?
86
86
 
87
87
  completable(**extra, &)
88
88
  end
89
89
 
90
- # Checkpoint the Covered Experience.
90
+ # Checkpoint the User Experience.
91
91
  #
92
92
  # @param extra [Hash] Additional data to include in the log event
93
93
  # @return [self]
@@ -101,7 +101,7 @@ module Labkit
101
101
  self
102
102
  end
103
103
 
104
- # Resume the Covered Experience.
104
+ # Resume the User Experience.
105
105
  #
106
106
  # @yield [self] When a block is provided, the experience will be completed automatically.
107
107
  # @param extra [Hash] Additional data to include in the log
@@ -115,7 +115,7 @@ module Labkit
115
115
  completable(**extra, &)
116
116
  end
117
117
 
118
- # Complete the Covered Experience.
118
+ # Complete the User Experience.
119
119
  #
120
120
  # @param extra [Hash] Additional data to include in the log event
121
121
  # @return [self]
@@ -129,7 +129,7 @@ module Labkit
129
129
  total_counter.increment(error: has_error?, **base_labels)
130
130
  apdex_counter.increment(success: apdex_success?, **base_labels) unless has_error?
131
131
  log_event("end", **extra)
132
- Labkit::CoveredExperience::Current.active_experiences.delete(id)
132
+ Labkit::UserExperienceSli::Current.active_experiences.delete(id)
133
133
  end
134
134
 
135
135
  self
@@ -157,13 +157,13 @@ module Labkit
157
157
  private
158
158
 
159
159
  def base_labels
160
- @base_labels ||= @definition.to_h.slice(:covered_experience, :feature_category, :urgency)
160
+ @base_labels ||= @definition.to_h.slice(:user_experience_id, :feature_category, :urgency)
161
161
  end
162
162
 
163
163
  def ensure_started!
164
164
  return @start_time unless @start_time.nil?
165
165
 
166
- warn("Covered Experience #{@definition.covered_experience} not started")
166
+ warn("User Experience #{@definition.user_experience_id} not started")
167
167
  false
168
168
  end
169
169
 
@@ -183,7 +183,7 @@ module Labkit
183
183
  def ensure_incomplete!
184
184
  return true if @end_time.nil?
185
185
 
186
- warn("Covered Experience #{@definition.covered_experience} already completed")
186
+ warn("User Experience #{@definition.user_experience_id} already completed")
187
187
  false
188
188
  end
189
189
 
@@ -204,22 +204,22 @@ module Labkit
204
204
 
205
205
  def checkpoint_counter
206
206
  @checkpoint_counter ||= Labkit::Metrics::Client.counter(
207
- :gitlab_covered_experience_checkpoint_total,
208
- 'Total checkpoints for covered experiences'
207
+ :gitlab_user_experience_checkpoint_total,
208
+ 'Total checkpoints for user experiences'
209
209
  )
210
210
  end
211
211
 
212
212
  def total_counter
213
213
  @total_counter ||= Labkit::Metrics::Client.counter(
214
- :gitlab_covered_experience_total,
215
- 'Total covered experience events (success/failure)'
214
+ :gitlab_user_experience_total,
215
+ 'Total user experience events (success/failure)'
216
216
  )
217
217
  end
218
218
 
219
219
  def apdex_counter
220
220
  @apdex_counter ||= Labkit::Metrics::Client.counter(
221
- :gitlab_covered_experience_apdex_total,
222
- 'Total covered experience apdex events'
221
+ :gitlab_user_experience_apdex_total,
222
+ 'Total user experience apdex events'
223
223
  )
224
224
  end
225
225
 
@@ -233,7 +233,7 @@ module Labkit
233
233
  def build_log_data(event_type, **extra)
234
234
  log_data = ActiveSupport::HashWithIndifferentAccess.new(
235
235
  checkpoint: event_type,
236
- covered_experience: id,
236
+ user_experience_id: id,
237
237
  feature_category: @definition.feature_category,
238
238
  urgency: @definition.urgency,
239
239
  start_time: @start_time,
@@ -275,7 +275,7 @@ module Labkit
275
275
  end
276
276
 
277
277
  def logger
278
- Labkit::CoveredExperience.configuration.logger
278
+ Labkit::UserExperienceSli.configuration.logger
279
279
  end
280
280
  end
281
281
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Labkit
4
- module CoveredExperience
5
- # Fakes Labkit::CoveredExperience::Experience.
4
+ module UserExperienceSli
5
+ # Fakes Labkit::UserExperienceSli::Experience.
6
6
  class Null
7
7
  include Singleton
8
8
 
@@ -6,29 +6,29 @@ require 'pathname'
6
6
  require 'yaml'
7
7
 
8
8
  module Labkit
9
- module CoveredExperience
10
- Definition = Data.define(:covered_experience, :description, :feature_category, :urgency)
9
+ module UserExperienceSli
10
+ Definition = Data.define(:user_experience_id, :description, :feature_category, :urgency)
11
11
 
12
12
  class Registry
13
13
  extend Forwardable
14
14
 
15
- SCHEMA_PATH = File.expand_path('../../../config/covered_experiences/schema.json', __dir__)
15
+ SCHEMA_PATH = File.expand_path('../../../config/user_experience_slis/schema.json', __dir__)
16
16
 
17
17
  def_delegator :@experiences, :empty?
18
18
 
19
19
  # @param dir [String, Pathname] Directory path containing YAML file definitions
20
- # Defaults to 'config/covered_experiences' relative to the calling application's root
21
- def initialize(dir: File.join("config", "covered_experiences"))
20
+ # Defaults to 'config/user_experience_slis' relative to the calling application's root
21
+ def initialize(dir: File.join("config", "user_experience_slis"))
22
22
  @dir = Pathname.new(Dir.pwd).join(dir)
23
23
  @experiences = load_on_demand
24
24
  end
25
25
 
26
- # Retrieve a definition experience given a covered_experience_id.
26
+ # Retrieve a definition experience given a user_experience_id.
27
27
  #
28
- # @param covered_experience_id [String, Symbol] Covered experience identifier
28
+ # @param user_experience_id [String, Symbol] User experience SLI identifier
29
29
  # @return [Experience, nil] An experience if present, otherwise nil
30
- def [](covered_experience_id)
31
- @experiences[covered_experience_id.to_s]
30
+ def [](user_experience_id)
31
+ @experiences[user_experience_id.to_s]
32
32
  end
33
33
 
34
34
  private
@@ -49,7 +49,7 @@ module Labkit
49
49
  end
50
50
  end
51
51
 
52
- # Load a covered experience definition.
52
+ # Load a user experience SLI definition.
53
53
  #
54
54
  # @param experience_id [String] Experience identifier
55
55
  # @return [Experience, nil] Loaded experience or nil if not found/invalid
@@ -57,7 +57,7 @@ module Labkit
57
57
  file_path = @dir.join("#{experience_id}.yml")
58
58
 
59
59
  unless file_path.exist?
60
- warn("Invalid Covered Experience definition: #{experience_id}")
60
+ warn("Invalid User Experience definition: #{experience_id}")
61
61
  return nil
62
62
  end
63
63
 
@@ -78,7 +78,7 @@ module Labkit
78
78
  return nil unless content.is_a?(Hash)
79
79
 
80
80
  errors = JSON::Validator.fully_validate(schema, content)
81
- return Definition.new(covered_experience: experience_id, **content) if errors.empty?
81
+ return Definition.new(user_experience_id: experience_id, **content) if errors.empty?
82
82
 
83
83
  warn("Invalid schema for #{file_path}")
84
84
 
@@ -98,7 +98,7 @@ module Labkit
98
98
  end
99
99
 
100
100
  def logger
101
- Labkit::CoveredExperience.configuration.logger
101
+ Labkit::UserExperienceSli.configuration.logger
102
102
  end
103
103
  end
104
104
  end
@@ -1,26 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'labkit/covered_experience/current'
4
- require 'labkit/covered_experience/error'
5
- require 'labkit/covered_experience/experience'
6
- require 'labkit/covered_experience/null'
7
- require 'labkit/covered_experience/registry'
3
+ require 'labkit/user_experience_sli/current'
4
+ require 'labkit/user_experience_sli/error'
5
+ require 'labkit/user_experience_sli/experience'
6
+ require 'labkit/user_experience_sli/null'
7
+ require 'labkit/user_experience_sli/registry'
8
8
  require 'labkit/logging/json_logger'
9
9
 
10
10
  module Labkit
11
- # Labkit::CoveredExperience namespace module.
11
+ # Labkit::UserExperienceSli namespace module.
12
12
  #
13
- # This module is responsible for managing covered experiences, which are
13
+ # This module is responsible for managing user experience SLIs, which are
14
14
  # specific events or activities within the application that are measured
15
15
  # and reported for performance monitoring and analysis.
16
- module CoveredExperience
17
- # Configuration class for CoveredExperience
16
+ module UserExperienceSli
17
+ # Configuration class for UserExperienceSli
18
18
  class Configuration
19
19
  attr_accessor :logger, :registry_path
20
20
 
21
21
  def initialize
22
22
  @logger = Labkit::Logging::JsonLogger.new($stdout)
23
- @registry_path = File.join("config", "covered_experiences")
23
+ @registry_path = File.join("config", "user_experience_slis")
24
24
  end
25
25
  end
26
26
 
@@ -81,7 +81,7 @@ module Labkit
81
81
  def raise_or_null(experience_id)
82
82
  return Null.instance unless %w[development test].include?(ENV['RAILS_ENV'])
83
83
 
84
- raise(NotFoundError, "Covered Experience #{experience_id} not found in the registry")
84
+ raise(NotFoundError, "User Experience #{experience_id} not found in the registry")
85
85
  end
86
86
 
87
87
  def find_current(experience_id)
@@ -93,4 +93,9 @@ module Labkit
93
93
  end
94
94
  end
95
95
  end
96
+
97
+ # Backward compatibility alias for the old module name.
98
+ # This alias is kept to maintain compatibility with existing code.
99
+ # See: https://gitlab.com/gitlab-com/gl-infra/observability/team/-/issues/4347
100
+ CoveredExperience = UserExperienceSli
96
101
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-labkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.42.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Newdigate
@@ -55,14 +55,14 @@ dependencies:
55
55
  requirements:
56
56
  - - ">="
57
57
  - !ruby/object:Gem::Version
58
- version: '1.62'
58
+ version: '1.75'
59
59
  type: :runtime
60
60
  prerelease: false
61
61
  version_requirements: !ruby/object:Gem::Requirement
62
62
  requirements:
63
63
  - - ">="
64
64
  - !ruby/object:Gem::Version
65
- version: '1.62'
65
+ version: '1.75'
66
66
  - !ruby/object:Gem::Dependency
67
67
  name: google-protobuf
68
68
  requirement: !ruby/object:Gem::Requirement
@@ -235,14 +235,14 @@ dependencies:
235
235
  requirements:
236
236
  - - ">="
237
237
  - !ruby/object:Gem::Version
238
- version: '1.62'
238
+ version: '1.75'
239
239
  type: :development
240
240
  prerelease: false
241
241
  version_requirements: !ruby/object:Gem::Requirement
242
242
  requirements:
243
243
  - - ">="
244
244
  - !ruby/object:Gem::Version
245
- version: '1.62'
245
+ version: '1.75'
246
246
  - !ruby/object:Gem::Dependency
247
247
  name: httparty
248
248
  requirement: !ruby/object:Gem::Requirement
@@ -447,8 +447,8 @@ files:
447
447
  - LICENSE
448
448
  - README.md
449
449
  - Rakefile
450
- - config/covered_experiences/schema.json
451
- - config/covered_experiences/testing_sample.yml
450
+ - config/user_experience_slis/schema.json
451
+ - config/user_experience_slis/testing_sample.yml
452
452
  - gitlab-labkit.gemspec
453
453
  - lib/gitlab-labkit.rb
454
454
  - lib/labkit/context.rb
@@ -458,13 +458,6 @@ files:
458
458
  - lib/labkit/correlation/grpc/client_interceptor.rb
459
459
  - lib/labkit/correlation/grpc/grpc_common.rb
460
460
  - lib/labkit/correlation/grpc/server_interceptor.rb
461
- - lib/labkit/covered_experience.rb
462
- - lib/labkit/covered_experience/README.md
463
- - lib/labkit/covered_experience/current.rb
464
- - lib/labkit/covered_experience/error.rb
465
- - lib/labkit/covered_experience/experience.rb
466
- - lib/labkit/covered_experience/null.rb
467
- - lib/labkit/covered_experience/registry.rb
468
461
  - lib/labkit/excon_publisher.rb
469
462
  - lib/labkit/fields.rb
470
463
  - lib/labkit/fips.rb
@@ -487,18 +480,18 @@ files:
487
480
  - lib/labkit/middleware/sidekiq/context.rb
488
481
  - lib/labkit/middleware/sidekiq/context/client.rb
489
482
  - lib/labkit/middleware/sidekiq/context/server.rb
490
- - lib/labkit/middleware/sidekiq/covered_experience.rb
491
- - lib/labkit/middleware/sidekiq/covered_experience/client.rb
492
- - lib/labkit/middleware/sidekiq/covered_experience/server.rb
493
483
  - lib/labkit/middleware/sidekiq/server.rb
494
484
  - lib/labkit/middleware/sidekiq/tracing.rb
495
485
  - lib/labkit/middleware/sidekiq/tracing/client.rb
496
486
  - lib/labkit/middleware/sidekiq/tracing/server.rb
497
487
  - lib/labkit/middleware/sidekiq/tracing/sidekiq_common.rb
488
+ - lib/labkit/middleware/sidekiq/user_experience_sli.rb
489
+ - lib/labkit/middleware/sidekiq/user_experience_sli/client.rb
490
+ - lib/labkit/middleware/sidekiq/user_experience_sli/server.rb
498
491
  - lib/labkit/net_http_publisher.rb
499
492
  - lib/labkit/rspec/README.md
500
493
  - lib/labkit/rspec/matchers.rb
501
- - lib/labkit/rspec/matchers/covered_experience_matchers.rb
494
+ - lib/labkit/rspec/matchers/user_experience_matchers.rb
502
495
  - lib/labkit/system.rb
503
496
  - lib/labkit/tracing.rb
504
497
  - lib/labkit/tracing/abstract_instrumenter.rb
@@ -532,6 +525,13 @@ files:
532
525
  - lib/labkit/tracing/redis/redis_interceptor_helper.rb
533
526
  - lib/labkit/tracing/tracing_common.rb
534
527
  - lib/labkit/tracing/tracing_utils.rb
528
+ - lib/labkit/user_experience_sli.rb
529
+ - lib/labkit/user_experience_sli/README.md
530
+ - lib/labkit/user_experience_sli/current.rb
531
+ - lib/labkit/user_experience_sli/error.rb
532
+ - lib/labkit/user_experience_sli/experience.rb
533
+ - lib/labkit/user_experience_sli/null.rb
534
+ - lib/labkit/user_experience_sli/registry.rb
535
535
  - renovate.json
536
536
  - scripts/install-asdf-plugins.sh
537
537
  - scripts/prepare-dev-env.sh
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Labkit
4
- module CoveredExperience
5
- CoveredExperienceError = Class.new(StandardError)
6
- NotFoundError = Class.new(CoveredExperienceError)
7
- ReservedKeywordError = Class.new(CoveredExperienceError)
8
- end
9
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Labkit
4
- module Middleware
5
- module Sidekiq
6
- # This module contains all the sidekiq middleware regarding covered
7
- # experiences
8
- module CoveredExperience
9
- autoload :Client, "labkit/middleware/sidekiq/covered_experience/client"
10
- autoload :Server, "labkit/middleware/sidekiq/covered_experience/server"
11
- end
12
- end
13
- end
14
- end