annotate lucene/src/luan/modules/lucene/Ab_testing.luan @ 294:5652cdea25f5

Improve html code of core tools. git-svn-id: https://luan-java.googlecode.com/svn/trunk@295 21e917c8-12df-6dd8-5cb6-c86387c605b9
author hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Thu, 11 Dec 2014 03:12:26 +0000
parents e8a2153f6ce1
children 1f4cc8505308
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
1 import "luan:Math"
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
2 import "luan:Table"
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
3 import "luan:Io"
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
4 import "luan:web/Http"
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
5
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
6
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
7 function of(index)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
8
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
9 local ab_testing = {}
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
10
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
11 ab_testing.test_map = {}
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
12
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
13 function ab_testing.test(test)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
14 test.name or error "name not defined"
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
15 test.values or error "values not defined"
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
16
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
17 -- list of event names
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
18 test.events or error "events not defined"
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
19
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
20 -- map of event name to aggregator factory
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
21 test.aggregator_factories or error "aggregator_factories not defined"
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
22
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
23 -- test.date_field is optional
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
24
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
25 local field = "ab_test_" .. test.name
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
26 index.fields[field] == nil or error("test "+test.name+" already defined")
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
27 index.fields[field] = field .. " index"
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
28 test.field = field
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
29
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
30 -- returns map of event name to (map of value to result) and "start_date"
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
31 function test.results()
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
32 return index.Searcher( function(searcher)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
33 local results = {}
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
34 for name in pairs(test.aggregator_factories) do
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
35 results[name] = {}
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
36 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
37 local date_field = test.date_field
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
38 local start_date = nil
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
39 for _, value in ipairs(test.values) do
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
40 local aggregators = {}
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
41 for name, factory in pairs(test.aggregator_factories) do
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
42 aggregators[name] = factory()
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
43 end
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
44 local query = index.Query.term{ [field] = value }
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
45 searcher.search(query, function(doc)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
46 for _, aggregator in pairs(aggregators) do
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
47 aggregator.aggregate(doc)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
48 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
49 if date_field ~= nil then
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
50 local date = doc[date_field]
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
51 if date ~= nil and (start_date==nil or start_date > date) then
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
52 start_date = date
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
53 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
54 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
55 end)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
56 for name, aggregator in pairs(aggregators) do
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
57 results[name][value] = aggregator.result
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
58 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
59 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
60 results.start_date = start_date
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
61 return results
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
62 end )
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
63 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
64
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
65 function test.fancy_results()
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
66 local events = test.events
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
67 local results = test.results()
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
68 local fancy = {}
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
69 fancy.start_date = results.start_date
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
70 local event = events[1]
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
71 fancy[event] = {}
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
72 for value, count in pairs(results[event]) do
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
73 fancy[event][value] = {}
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
74 fancy[event][value].count = count
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
75 fancy[event][value].pct_of_total = 100
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
76 fancy[event][value].pct_of_prev = 100
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
77 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
78 local all = results[event]
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
79 local prev = all
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
80 for i in range(2,#events) do
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
81 event = events[i]
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
82 fancy[event] = {}
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
83 for value, count in pairs(results[event]) do
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
84 fancy[event][value] = {}
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
85 fancy[event][value].count = count
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
86 fancy[event][value].pct_of_total = percent(count,all[value])
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
87 fancy[event][value].pct_of_prev = percent(count,prev[value])
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
88 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
89 prev = results[event]
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
90 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
91 return fancy
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
92 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
93
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
94 ab_testing.test_map[test.name] = test
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
95
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
96 return test
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
97 end
294
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
98
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
99 function ab_testing.value(test_name,values)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
100 return values[test_name] or ab_testing.test_map[test_name].values[1]
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
101 end
294
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
102
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
103 -- returns map from test name to value
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
104 function ab_testing.from_doc(doc)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
105 local values = {}
292
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 291
diff changeset
106 for _, test in pairs(ab_testing.test_map) do
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
107 values[test.name] = doc[test.field]
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
108 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
109 return values
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
110 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
111
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
112 function ab_testing.to_doc(doc,values,tests)
292
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 291
diff changeset
113 tests = tests or ab_testing.test_map
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
114 if values == nil then
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
115 for _, test in ipairs(tests) do
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
116 doc[test.field] = test.values[Math.random(#test.values)]
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
117 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
118 else
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
119 for _, test in ipairs(tests) do
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
120 doc[test.field] = values[test.name]
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
121 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
122 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
123 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
124
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
125 function ab_testing.web_page(test_names)
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
126 return { service = function()
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
127 local results = {}
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
128 for _, name in ipairs(test_names) do
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
129 local test = ab_testing.test_map[name]
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
130 test or error("test not found: "..name)
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
131 results[name] = test.fancy_results()
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
132 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
133 Io.stdout = Http.response.text_writer()
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
134 html(test_names,ab_testing.test_map,results)
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
135 end }
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
136 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
137
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
138 return ab_testing
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
139 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
140
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
141
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
142 -- aggregator factories
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
143
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
144 -- fn(doc) should return boolean whether doc should be counted
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
145 function count(fn)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
146 return function()
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
147 local aggregator = {}
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
148 aggregator.result = 0
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
149 function aggregator.aggregate(doc)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
150 if fn(doc) then
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
151 aggregator.result = aggregator.result + 1
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
152 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
153 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
154 return aggregator
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
155 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
156 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
157
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
158 count_all = count( function(doc) return true end )
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
159
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
160 -- fn(doc) should return number to add to result, return 0 for nothing
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
161 function sum(fn)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
162 return function()
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
163 local aggregator = {}
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
164 aggregator.result = 0
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
165 function aggregator.aggregate(doc)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
166 aggregator.result = aggregator.result + fn(doc)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
167 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
168 return aggregator
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
169 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
170 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
171
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
172
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
173
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
174 function percent(x,total)
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
175 if total==0 then
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
176 return 0
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
177 else
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
178 return 100 * x / total
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
179 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
180 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
181
294
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
182 local function basic_style() %>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
183 body {font-family:'Arial',sans-serif;font-size:16px;padding:1em 2em}
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
184 h1 {font-weight:bold;font-size:20px}
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
185 h2 {margin:2em 0 0em;font-size:18px;color:#3589B1}
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
186 table.results {margin-top:.5em;border-collapse:collapse;font-size:90%}
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
187 table.results th {background:#eee}
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
188 table.results th,table.results td {border-left:1px solid #bbb;padding:.4em 2em}
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
189 table.results tr:nth-child(odd) td {background:#f8f8f8}
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
190 <% end
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
191
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
192 local function format(v)
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
193 v = v .. ''
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
194 return v.gsub('(\d+.\d{1})\d+','$1')
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
195 end
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
196
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
197 function html(test_names,tests,results) %>
294
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
198 <!DOCTYPE html>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
199 <html lang="en">
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
200 <head>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
201 <title>A/B Test Results</title>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
202 <style><% basic_style() %></style>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
203 </head>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
204 <body>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
205 <h1>A/B Test Results</h1>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
206 <%
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
207 for _, test_name in ipairs(test_names) do
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
208 local test = tests[test_name]
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
209 local result = results[test_name]
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
210 local n = #test.values
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
211 %>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
212 <h2><%=test_name%></h2>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
213 <table class="results">
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
214 <tr>
294
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
215 <th>Event</th>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
216 <th class="top" colspan="<%=n%>">Count</th>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
217 <th class="top" colspan="<%=n%>">% of total</th>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
218 <th class="top" colspan="<%=n%>">% of prev</th>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
219 </tr>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
220 <tr>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
221 <th></th>
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
222 <%
294
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
223 for _ in range(1,3) do
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
224 for _, value in ipairs(test.values) do
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
225 %><th class="top"><%=value%></th><%
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
226 end
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
227 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
228 %>
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
229 </tr>
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
230 <%
294
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
231 for _, event in ipairs(test.events) do
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
232 local event_values = result[event]
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
233 %>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
234 <tr>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
235 <td><%=event%></td>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
236 <%
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
237 for _, value in ipairs(test.values) do
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
238 %><td><%=format(event_values[value].count)%></th><%
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
239 end
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
240 for _, value in ipairs(test.values) do
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
241 %><td><%=format(event_values[value].pct_of_total)%></th><%
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
242 end
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
243 for _, value in ipairs(test.values) do
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
244 %><td><%=format(event_values[value].pct_of_prev)%></th><%
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
245 end
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
246 %>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
247 </tr>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
248 <%
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
249 end
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
250 %>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
251 </table>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
252 <%
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
253 end
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
254 %>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
255 </body>
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
256 </html>
294
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
257 <% end