Module: AsyncExperiments
- Defined in:
- lib/async_experiments.rb,
lib/async_experiments/util.rb,
lib/async_experiments/version.rb,
lib/async_experiments/candidate_worker.rb,
lib/async_experiments/experiment_result.rb,
lib/async_experiments/experiment_control.rb,
lib/async_experiments/experiment_error_worker.rb,
lib/async_experiments/experiment_result_control_worker.rb,
lib/async_experiments/experiment_result_candidate_worker.rb
Defined Under Namespace
Modules: ExperimentControl, Util
Classes: CandidateWorker, ExperimentErrorWorker, ExperimentResult, ExperimentResultCandidateWorker, ExperimentResultControlWorker
Constant Summary
collapse
- VERSION =
"0.1.0"
Class Method Summary
collapse
Class Method Details
.fix_ordering_issues(missing_entries, extra_entries) ⇒ Object
54
55
56
57
58
59
60
61
|
# File 'lib/async_experiments.rb', line 54
def self.fix_ordering_issues(missing_entries, )
duplicate_entries = missing_entries &
missing_entries = missing_entries.reject { |entry| duplicate_entries.include?(entry) }
= .reject { |entry| duplicate_entries.include?(entry) }
[missing_entries, ]
end
|
.get_experiment_data(experiment_name) ⇒ Object
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/async_experiments.rb', line 16
def self.get_experiment_data(experiment_name)
key_pattern = "experiments:#{experiment_name}:mismatches:*"
mismatched_responses = redis_scan_and_retrieve(key_pattern).map do |json|
JSON.parse(json)
end
mismatched_responses.map do |parsed|
missing, other = parsed.partition { |(operator)| operator == "-" }
, changed = other.partition { |(operator)| operator == "+" }
missing_entries, = self.fix_ordering_issues(
missing.map(&:last),
.map(&:last),
)
{
missing: missing_entries,
extra: ,
changed: changed.map(&:last),
}
end
end
|
.get_experiment_exceptions(experiment_name) ⇒ Object
40
41
42
|
# File 'lib/async_experiments.rb', line 40
def self.get_experiment_exceptions(experiment_name)
redis_scan_and_retrieve("experiments:#{experiment_name}:exceptions:*")
end
|
.redis_scan_and_retrieve(key_pattern) ⇒ Object
44
45
46
47
48
49
50
51
52
|
# File 'lib/async_experiments.rb', line 44
def self.redis_scan_and_retrieve(key_pattern)
Sidekiq.redis do |redis|
enumerator = redis.scan_each(
match: key_pattern
)
retrieve = -> (key) { redis.get(key) }
enumerator.map(&retrieve).compact
end
end
|
.statsd ⇒ Object
8
9
10
|
# File 'lib/async_experiments.rb', line 8
def self.statsd
@statsd
end
|
.statsd=(statsd) ⇒ Object
12
13
14
|
# File 'lib/async_experiments.rb', line 12
def self.statsd=(statsd)
@statsd = statsd
end
|