Module: Labkit::UserExperienceSli

Defined in:
lib/labkit/user_experience_sli.rb,
lib/labkit/user_experience_sli/null.rb,
lib/labkit/user_experience_sli/error.rb,
lib/labkit/user_experience_sli/current.rb,
lib/labkit/user_experience_sli/registry.rb,
lib/labkit/user_experience_sli/experience.rb

Overview

Labkit::UserExperienceSli namespace module.

This module is responsible for managing user experience SLIs, which are specific events or activities within the application that are measured and reported for performance monitoring and analysis.

Defined Under Namespace

Classes: Configuration, Current, Definition, Experience, Null, Registry

Constant Summary collapse

UserExperienceError =
Class.new(StandardError)
NotFoundError =
Class.new(UserExperienceError)
ReservedKeywordError =
Class.new(UserExperienceError)
URGENCY_THRESHOLDS_IN_SECONDS =
{
  sync_fast: 2,
  sync_slow: 5,
  async_fast: 15,
  async_slow: 300
}.freeze
RESERVED_KEYWORDS =
%w[
  checkpoint
  user_experience_id
  feature_category
  urgency
  start_time
  checkpoint_time
  end_time
  elapsed_time_s
  urgency_threshold_s
  error
  error_message
  success
].freeze

Class Method Summary collapse

Class Method Details

.configurationObject



57
58
59
# File 'lib/labkit/user_experience_sli.rb', line 57

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



65
66
67
68
69
# File 'lib/labkit/user_experience_sli.rb', line 65

def configure
  yield(configuration) if block_given?
  # Reset registry when configuration changes to pick up new registry_path
  @registry = nil
end

.get(experience_id) ⇒ Experience, Null

Retrieves a covered experience using the experience_id. It retrieves from the current context when available, otherwise it instantiates a new experience with the definition from the registry.

Parameters:

  • experience_id (String, Symbol)

    The ID of the experience to retrieve.

Returns:

  • (Experience, Null)

    The found experience or a Null object if not found (in production/staging).



87
88
89
# File 'lib/labkit/user_experience_sli.rb', line 87

def get(experience_id)
  find_current(experience_id) || raise_or_null(experience_id)
end

.registryObject



71
72
73
# File 'lib/labkit/user_experience_sli.rb', line 71

def registry
  @registry ||= Registry.new(dir: configuration.registry_path)
end

.resetObject



75
76
77
78
# File 'lib/labkit/user_experience_sli.rb', line 75

def reset
  @registry = nil
  reset_configuration
end

.reset_configurationObject



61
62
63
# File 'lib/labkit/user_experience_sli.rb', line 61

def reset_configuration
  @configuration = nil
end

.resume(experience_id, **extra) ⇒ Experience, Null

Resumes a covered experience using the experience_id.

Parameters:

  • experience_id (String, Symbol)

    The ID of the experience to resume.

Returns:

  • (Experience, Null)

    The started experience or a Null object if not found (in production/staging).



104
105
106
# File 'lib/labkit/user_experience_sli.rb', line 104

def resume(experience_id, **extra, &)
  get(experience_id).resume(**extra, &)
end

.start(experience_id, **extra) ⇒ Experience, Null

Starts a covered experience using the experience_id.

Parameters:

  • experience_id (String, Symbol)

    The ID of the experience to start.

  • extra (Hash)

    Additional data to include in the log event.

Returns:

  • (Experience, Null)

    The started experience or a Null object if not found (in production/staging).



96
97
98
# File 'lib/labkit/user_experience_sli.rb', line 96

def start(experience_id, **extra, &)
  get(experience_id).start(**extra, &)
end