Module: ABMeter
- Extended by:
- ErrorSafety
- Defined in:
- lib/abmeter.rb,
lib/abmeter/core.rb,
lib/abmeter/client.rb,
lib/abmeter/version.rb,
lib/abmeter/api_error.rb,
lib/abmeter/constants.rb,
lib/abmeter/core/user.rb,
lib/abmeter/error_safety.rb,
lib/abmeter/async_submitter.rb,
lib/abmeter/resolver_provider.rb,
lib/abmeter/core/protocol/type.rb,
lib/abmeter/core/utils/num_utils.rb,
lib/abmeter/core/assignment_config.rb,
lib/abmeter/core/assignment_config/space.rb,
lib/abmeter/core/user_parameter_resolver.rb,
lib/abmeter/core/assignment_config/variant.rb,
lib/abmeter/core/assignment_config/audience.rb,
lib/abmeter/core/assignment_config/exposable.rb,
lib/abmeter/core/assignment_config/parameter.rb,
lib/abmeter/core/assignment_config/experiment.rb,
lib/abmeter/core/assignment_config/feature_flag.rb
Defined Under Namespace
Modules: Core, ErrorSafety Classes: APIError, AsyncSubmitter, Client, Config, ResolverProvider
Constant Summary collapse
- VERSION =
'0.3.0'.freeze
- DEFAULT_BATCH_SIZE =
100- DEFAULT_FLUSH_INTERVAL =
seconds
60- DEFAULT_FETCH_INTERVAL =
seconds
60- DEFAULT_BASE_URL =
'https://abmeter.ai'- DEFAULT_MAX_SUBMIT_ATTEMPTS =
3- DEFAULT_MAX_RETRY_QUEUE_SIZE =
1000- DEFAULT_LOG_LEVEL =
:error
Class Method Summary collapse
- .client ⇒ Object
- .config ⇒ Object
- .configure {|config| ... } ⇒ Object
-
.get_exposure(user:, parameter_slug:) ⇒ Object
Only evaluates exposure with all details, including resolved value, without submitting it to the API Useful for testing/debugging.
-
.reset(timeout: AsyncSubmitter::DEFAULT_SHUTDOWN_TIMEOUT) ⇒ Object
Graceful, lossless, bounded blocking.
-
.reset! ⇒ Object
Immediate, lossy, non-blocking.
-
.resolve_parameter(user:, parameter_slug:) ⇒ Object
resolves paramater and submits parameter exposure to the API.
- .resolver_provider ⇒ Object
- .track_event(event_name, user_id, data) ⇒ Object
Methods included from ErrorSafety
Class Method Details
.client ⇒ Object
26 27 28 29 30 31 32 |
# File 'lib/abmeter.rb', line 26 def client unless @client raise 'ABMeter not configured or configured with "static" JSON. Call ABMeter.configure { |config| ... } first.' end @client end |
.config ⇒ Object
20 21 22 23 24 |
# File 'lib/abmeter.rb', line 20 def config raise 'ABMeter not configured. Call ABMeter.configure { |config| ... } first.' unless @config @config end |
.configure {|config| ... } ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/abmeter.rb', line 40 def configure config = Config.new config.base_url = DEFAULT_BASE_URL yield(config) config.validate! # Set logger level if both logger and log_level are configured config.send(:set_logger_level, config.log_level) @config = config if config.static_config # JSON-based configuration @resolver_provider = ResolverProvider.new(config: config) else # API-based configuration @client = Client.new(config) @resolver_provider = ResolverProvider.new(config: config, api_client: @client) # Configure and start async submitter AsyncSubmitter.configure( api_client: @client, config: config ) AsyncSubmitter.start end end |
.get_exposure(user:, parameter_slug:) ⇒ Object
Only evaluates exposure with all details, including resolved value, without submitting it to the API Useful for testing/debugging
103 104 105 |
# File 'lib/abmeter.rb', line 103 def get_exposure(user:, parameter_slug:) resolver_provider.get_exposure(user: user, parameter_slug: parameter_slug) end |
.reset(timeout: AsyncSubmitter::DEFAULT_SHUTDOWN_TIMEOUT) ⇒ Object
Graceful, lossless, bounded blocking. Flushes pending exposures/events before clearing state. Returns true on clean shutdown, false if the timeout elapsed and the worker had to be killed.
70 71 72 73 74 75 76 |
# File 'lib/abmeter.rb', line 70 def reset(timeout: AsyncSubmitter::DEFAULT_SHUTDOWN_TIMEOUT) result = AsyncSubmitter.reset(timeout: timeout) @config = nil @client = nil @resolver_provider = nil result end |
.reset! ⇒ Object
Immediate, lossy, non-blocking. Kills the worker thread and discards queued exposures/events without any network I/O.
80 81 82 83 84 85 86 |
# File 'lib/abmeter.rb', line 80 def reset! AsyncSubmitter.reset! @config = nil @client = nil @resolver_provider = nil nil end |
.resolve_parameter(user:, parameter_slug:) ⇒ Object
resolves paramater and submits parameter exposure to the API
96 97 98 |
# File 'lib/abmeter.rb', line 96 def resolve_parameter(user:, parameter_slug:) resolver_provider.resolve_parameter(user: user, parameter_slug: parameter_slug) end |
.resolver_provider ⇒ Object
34 35 36 37 38 |
# File 'lib/abmeter.rb', line 34 def resolver_provider raise 'ABMeter not configured. Call ABMeter.configure { |config| ... } first.' unless @resolver_provider @resolver_provider end |
.track_event(event_name, user_id, data) ⇒ Object
88 89 90 91 92 |
# File 'lib/abmeter.rb', line 88 def track_event(event_name, user_id, data) # Queue the event for background processing AsyncSubmitter.queue_event(event_name, user_id, data) nil end |