diff --git a/lib/split/alternative.rb b/lib/split/alternative.rb index e575e8b6..a6b45df9 100644 --- a/lib/split/alternative.rb +++ b/lib/split/alternative.rb @@ -8,6 +8,7 @@ class Alternative attr_accessor :name attr_accessor :experiment_name attr_accessor :weight + attr_accessor :recorded_info include Zscore @@ -127,10 +128,37 @@ def z_score(goal = nil) z_score = Split::Zscore.calculate(p_a, n_a, p_c, n_c) end + def extra_info + data = Split.redis.hget(key, 'recorded_info') + if data && data.length > 1 + begin + JSON.parse(data) + rescue + {} + end + else + {} + end + end + + def record_extra_info(k, value = 1) + @recorded_info = self.extra_info || {} + + if value.kind_of?(Numeric) + @recorded_info[k] ||= 0 + @recorded_info[k] += value + else + @recorded_info[k] = value + end + + Split.redis.hset key, 'recorded_info', (@recorded_info || {}).to_json + end + def save Split.redis.hsetnx key, 'participant_count', 0 Split.redis.hsetnx key, 'completed_count', 0 Split.redis.hsetnx key, 'p_winner', p_winner + Split.redis.hsetnx key, 'recorded_info', (@recorded_info || {}).to_json end def validate! @@ -140,7 +168,7 @@ def validate! end def reset - Split.redis.hmset key, 'participant_count', 0, 'completed_count', 0 + Split.redis.hmset key, 'participant_count', 0, 'completed_count', 0, 'recorded_info', nil unless goals.empty? goals.each do |g| field = "completed_count:#{g}" diff --git a/lib/split/dashboard/views/_experiment.erb b/lib/split/dashboard/views/_experiment.erb index ab9c62e1..2f2459ad 100644 --- a/lib/split/dashboard/views/_experiment.erb +++ b/lib/split/dashboard/views/_experiment.erb @@ -5,6 +5,25 @@ <% end %> <% experiment.calc_winning_alternatives %> +<% + extra_columns = [] + experiment.alternatives.each do |alternative| + extra_info = alternative.extra_info || {} + extra_columns += extra_info.keys + end + + extra_columns.uniq! + summary_texts = {} + extra_columns.each do |column| + extra_infos = experiment.alternatives.map(&:extra_info).select{|extra_info| extra_info && extra_info[column] } + if extra_infos[0][column].kind_of?(Numeric) + summary_texts[column] = extra_infos.inject(0){|sum, extra_info| sum += extra_info[column]} + else + summary_texts[column] = "N/A" + end + end +%> +
@@ -32,6 +51,9 @@ Non-finished Completed Conversion Rate + <% extra_columns.each do |column| %> + <%= column %> + <% end %>