annotate lucene/src/luan/modules/lucene/Ab_testing.luan @ 505:7bc63886d4f2

web page modules now return a function
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 May 2015 01:45:49 -0600
parents 92c3d22745b8
children 473e456444ff
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
323
cd2924a1052c improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 321
diff changeset
1 local Luan = require "luan:Luan"
cd2924a1052c improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 321
diff changeset
2 local pairs = Luan.pairs
cd2924a1052c improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 321
diff changeset
3 local ipairs = Luan.ipairs
cd2924a1052c improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 321
diff changeset
4 local error = Luan.error
cd2924a1052c improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 321
diff changeset
5 local range = Luan.range
cd2924a1052c improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 321
diff changeset
6 local Math = require "luan:Math"
cd2924a1052c improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 321
diff changeset
7 local Table = require "luan:Table"
cd2924a1052c improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 321
diff changeset
8 local Io = require "luan:Io"
494
2b9bc97f0439 change luan:web to luan:http
Franklin Schmidt <fschmidt@gmail.com>
parents: 435
diff changeset
9 local Http = require "luan:http/Http"
323
cd2924a1052c improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 321
diff changeset
10 local Logging = require "luan:logging/Logging"
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
11
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 495
diff changeset
12 local M = {}
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
13
295
1f4cc8505308 fix Ab_testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 294
diff changeset
14 local logger = Logging.logger "Ab_testing"
1f4cc8505308 fix Ab_testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 294
diff changeset
15
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 495
diff changeset
16 function M.of(index)
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
17
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
18 local ab_testing = {}
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
19
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
20 ab_testing.test_map = {}
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
21
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
22 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
23 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
24 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
25
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
26 -- 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
27 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
28
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
29 -- 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
30 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
31
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
32 -- 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
33
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
34 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
35 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
36 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
37 test.field = field
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
38
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
39 -- 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
40 function test.results()
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
41 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
42 local results = {}
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
43 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
44 results[name] = {}
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
45 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
46 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
47 local start_date = nil
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
48 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
49 local aggregators = {}
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
50 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
51 aggregators[name] = factory()
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
52 end
435
5b36f663a1b8 make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents: 325
diff changeset
53 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
54 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
55 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
56 aggregator.aggregate(doc)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
57 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
58 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
59 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
60 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
61 start_date = date
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 end)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
65 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
66 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
67 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
68 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
69 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
70 return results
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
71 end )
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
72 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
73
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
74 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
75 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
76 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
77 local fancy = {}
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
78 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
79 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
80 fancy[event] = {}
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
81 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
82 fancy[event][value] = {}
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
83 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
84 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
85 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
86 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
87 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
88 local prev = all
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
89 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
90 event = events[i]
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
91 fancy[event] = {}
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
92 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
93 fancy[event][value] = {}
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
94 fancy[event][value].count = count
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 495
diff changeset
95 fancy[event][value].pct_of_total = M.percent(count,all[value])
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 495
diff changeset
96 fancy[event][value].pct_of_prev = M.percent(count,prev[value])
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
97 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
98 prev = results[event]
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
99 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
100 return fancy
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
101 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
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 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
104
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
105 return test
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
106 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
107
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
108 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
109 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
110 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
111
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
112 -- 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
113 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
114 local values = {}
292
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 291
diff changeset
115 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
116 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
117 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
118 return values
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
119 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
120
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
121 function ab_testing.to_doc(doc,values,tests)
292
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 291
diff changeset
122 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
123 if values == nil then
295
1f4cc8505308 fix Ab_testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 294
diff changeset
124 values = {}
1f4cc8505308 fix Ab_testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 294
diff changeset
125 for _, test in pairs(tests) do
1f4cc8505308 fix Ab_testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 294
diff changeset
126 values[test.name] = test.values[Math.random(#test.values)]
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
127 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
128 end
295
1f4cc8505308 fix Ab_testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 294
diff changeset
129 for _, test in pairs(tests) do
1f4cc8505308 fix Ab_testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 294
diff changeset
130 doc[test.field] = values[test.name]
1f4cc8505308 fix Ab_testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 294
diff changeset
131 end
1f4cc8505308 fix Ab_testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 294
diff changeset
132 return values
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
133 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
134
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
135 function ab_testing.web_page(test_names)
505
7bc63886d4f2 web page modules now return a function
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
136 return function()
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
137 local results = {}
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
138 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
139 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
140 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
141 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
142 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
143 Io.stdout = Http.response.text_writer()
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 495
diff changeset
144 M.html(test_names,ab_testing.test_map,results)
505
7bc63886d4f2 web page modules now return a function
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
145 end
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
146 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
147
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
148 return ab_testing
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
149 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
150
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
151
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
152 -- aggregator factories
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
153
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
154 -- fn(doc) should return boolean whether doc should be counted
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 495
diff changeset
155 function M.count(fn)
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
156 return function()
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
157 local aggregator = {}
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
158 aggregator.result = 0
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
159 function aggregator.aggregate(doc)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
160 if fn(doc) then
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
161 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
162 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
163 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
164 return aggregator
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
165 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
166 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
167
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 495
diff changeset
168 M.count_all = M.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
169
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
170 -- fn(doc) should return number to add to result, return 0 for nothing
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 495
diff changeset
171 function M.sum(fn)
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
172 return function()
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
173 local aggregator = {}
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
174 aggregator.result = 0
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
175 function aggregator.aggregate(doc)
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
176 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
177 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
178 return aggregator
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
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
182
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
183
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 495
diff changeset
184 function M.percent(x,total)
274
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
185 if total==0 then
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
186 return 0
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
187 else
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
188 return 100 * x / total
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
189 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
190 end
8afe9f2fdfec AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
191
325
78a6a71afbfd use SimplyHTML
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 323
diff changeset
192 -- I will change this to use SimplyHTML when this is used again.
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
193 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
194 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
195 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
196 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
197 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
198 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
199 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
200 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
201 <% 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
202
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 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
204 v = v .. ''
315
6e11eace1091 fix Ab_testing.format()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 295
diff changeset
205 return v.gsub([[(\d+\.\d{1})\d+]],'$1')
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
206 end
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
207
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 495
diff changeset
208 function M.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
209 <!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
210 <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
211 <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
212 <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
213 <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
214 </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
215 <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
216 <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
217 <%
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 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
219 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
220 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
221 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
222 %>
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 <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
224 <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
225 <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
226 <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
227 <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
228 <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
229 <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
230 </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
231 <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
232 <th></th>
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
233 <%
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
234 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
235 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
236 %><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
237 end
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
238 end
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
239 %>
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
240 </tr>
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
241 <%
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
242 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
243 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
244 %>
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 <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
246 <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
247 <%
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 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
249 %><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
250 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
251 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
252 %><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
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 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
255 %><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
256 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
257 %>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
258 </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
259 <%
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
260 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
261 %>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
262 </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
263 <%
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
264 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
265 %>
5652cdea25f5 Improve html code of core tools.
hugo.tech@gmail.com <hugo.tech@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 292
diff changeset
266 </body>
291
a35d1177bbf0 implement Ab_testing.web_page()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 274
diff changeset
267 </html>
321
7f7708e8fdd4 remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 315
diff changeset
268 <% end
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 495
diff changeset
269
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 495
diff changeset
270 return M