voucher 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.rubocop.yml +1 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +11 -7
- data/README.md +43 -1
- data/lib/voucher.rb +4 -3
- data/lib/voucher/chain_contract.rb +46 -0
- data/lib/voucher/cli.rb +1 -1
- data/lib/voucher/config.rb +17 -9
- data/lib/voucher/config/json/chain.json +753 -0
- data/lib/voucher/errors.rb +2 -2
- data/lib/voucher/metrics.rb +339 -0
- data/lib/voucher/model/segment.rb +45 -95
- data/lib/voucher/validator.rb +4 -4
- data/lib/voucher/version.rb +1 -1
- data/voucher.gemspec +2 -1
- metadata +21 -6
- data/lib/voucher/config/json/election.json +0 -210
- data/lib/voucher/election_contract.rb +0 -41
data/lib/voucher/errors.rb
CHANGED
@@ -10,8 +10,8 @@ module Voucher
|
|
10
10
|
end
|
11
11
|
|
12
12
|
class RootHashNotFound < VoucherError
|
13
|
-
def initialize(shard)
|
14
|
-
super("Root hash from shard #{shard} was not found.")
|
13
|
+
def initialize(block_height, shard)
|
14
|
+
super("Root hash from blockHeight #{block_height}, shard #{shard} was not found.")
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -0,0 +1,339 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Config.aggregated_metric_types = %w(
|
4
|
+
click
|
5
|
+
conversion
|
6
|
+
impression
|
7
|
+
video_25
|
8
|
+
video_50
|
9
|
+
video_75
|
10
|
+
video_100
|
11
|
+
).freeze
|
12
|
+
|
13
|
+
Config.non_aggregated_metric_types = %w(
|
14
|
+
bot
|
15
|
+
decision
|
16
|
+
non_bot
|
17
|
+
non_viewable
|
18
|
+
viewable
|
19
|
+
win
|
20
|
+
render
|
21
|
+
).freeze
|
22
|
+
|
23
|
+
Config.cost_metrics = %w(
|
24
|
+
win_cost
|
25
|
+
decision_cost
|
26
|
+
).freeze
|
27
|
+
|
28
|
+
Config.compound_metrics = {
|
29
|
+
'bot_click' => %w(bot click),
|
30
|
+
'bot_decision_win_click' => %w(bot decision win click),
|
31
|
+
'bot_decision_win_impression' => %w(bot decision win impression),
|
32
|
+
'bot_decision_win_render_click' => %w(bot decision win click render),
|
33
|
+
'bot_decision_win_render_impression' => %w(bot decision win render impression),
|
34
|
+
'bot_impression' => %w(impression bot),
|
35
|
+
'bot_loaded_impression' => %w(impression win bot),
|
36
|
+
'bot_loaded_click' => %w(bot click win),
|
37
|
+
'bot_loaded_render_impression' => %w(impression win bot render),
|
38
|
+
'bot_render_impression' => %w(impression bot render),
|
39
|
+
'decision_win_click' => %w(decision win click),
|
40
|
+
'decision_win_impression' => %w(impression decision win),
|
41
|
+
'decision_win_render_click' => %w(decision win click render),
|
42
|
+
'decision_win_render_impression' => %w(decision win render impression),
|
43
|
+
'loaded_click' => %w(click win),
|
44
|
+
'loaded_impression' => %w(impression win),
|
45
|
+
'loaded_render_click' => %w(click win render),
|
46
|
+
'loaded_render_impression' => %w(impression render win),
|
47
|
+
'non_bot_decision_win_click' => %w(non_bot decision win click),
|
48
|
+
'non_bot_decision_win_impression' => %w(non_bot decision win impression),
|
49
|
+
'non_bot_decision_win_render_click' => %w(non_bot decision win click render),
|
50
|
+
'non_bot_decision_win_render_impression' => %w(non_bot decision win render impression),
|
51
|
+
'non_bot_impression' => %w(impression non_bot),
|
52
|
+
'non_bot_click' => %w(non_bot click),
|
53
|
+
'non_bot_loaded_impression' => %w(impression win non_bot),
|
54
|
+
'non_bot_loaded_click' => %w(non_bot win click),
|
55
|
+
'non_bot_loaded_render_impression' => %w(impression win non_bot render),
|
56
|
+
'non_bot_render_impression' => %w(impression non_bot render),
|
57
|
+
'non_viewable_bot_decision_win_click' => %w(non_viewable bot decision win click),
|
58
|
+
'non_viewable_bot_decision_win_impression' => %w(non_viewable bot decision win impression),
|
59
|
+
'non_viewable_bot_decision_win_render_click' => %w(non_viewable bot decision win click render),
|
60
|
+
'non_viewable_bot_decision_win_render_impression' => %w(non_viewable bot decision win render impression),
|
61
|
+
'non_viewable_bot_loaded_click' => %w(non_viewable bot win click),
|
62
|
+
'non_viewable_bot_loaded_impression' => %w(non_viewable bot win impression),
|
63
|
+
'non_viewable_bot_loaded_render_click' => %w(non_viewable bot win click render),
|
64
|
+
'non_viewable_bot_loaded_render_impression' => %w(non_viewable bot win render impression),
|
65
|
+
'non_viewable_click' => %w(click non_viewable),
|
66
|
+
'non_viewable_decision_win_click' => %w(non_viewable decision win click),
|
67
|
+
'non_viewable_decision_win_impression' => %w(non_viewable decision win impression),
|
68
|
+
'non_viewable_decision_win_render_click' => %w(non_viewable decision win click render),
|
69
|
+
'non_viewable_decision_win_render_impression' => %w(non_viewable decision win render impression),
|
70
|
+
'non_viewable_impression' => %w(impression non_viewable),
|
71
|
+
'non_viewable_loaded_click' => %w(non_viewable click win),
|
72
|
+
'non_viewable_loaded_impression' => %w(non_viewable impression win),
|
73
|
+
'non_viewable_loaded_render_click' => %w(non_viewable click win render),
|
74
|
+
'non_viewable_loaded_render_impression' => %w(non_viewable impression win render),
|
75
|
+
'non_viewable_non_bot_impression' => %w(non_viewable non_bot impression),
|
76
|
+
'non_viewable_non_bot_click' => %w(non_viewable non_bot click),
|
77
|
+
'non_viewable_non_bot_decision_win_click' => %w(non_viewable non_bot decision win click),
|
78
|
+
'non_viewable_non_bot_decision_win_impression' => %w(non_viewable non_bot decision win impression),
|
79
|
+
'non_viewable_non_bot_decision_win_render_click' => %w(non_viewable non_bot decision win click render),
|
80
|
+
'non_viewable_non_bot_decision_win_render_impression' => %w(non_viewable non_bot decision win render impression),
|
81
|
+
'non_viewable_non_bot_loaded_click' => %w(non_viewable non_bot win click),
|
82
|
+
'non_viewable_non_bot_loaded_impression' => %w(non_viewable non_bot win impression),
|
83
|
+
'non_viewable_non_bot_loaded_render_click' => %w(non_viewable non_bot win click render),
|
84
|
+
'non_viewable_non_bot_loaded_render_impression' => %w(non_viewable non_bot win render impression),
|
85
|
+
'non_viewable_render_click' => %w(click non_viewable render),
|
86
|
+
'non_viewable_render_impression' => %w(impression non_viewable render),
|
87
|
+
'render_click' => %w(click render),
|
88
|
+
'render_impression' => %w(impression render),
|
89
|
+
'viewable_bot_impression' => %w(viewable bot impression),
|
90
|
+
'viewable_bot_click' => %w(viewable bot click),
|
91
|
+
'viewable_bot_decision_win_click' => %w(viewable bot decision win click),
|
92
|
+
'viewable_bot_decision_win_impression' => %w(viewable bot decision win impression),
|
93
|
+
'viewable_bot_decision_win_render_click' => %w(viewable bot decision win click render),
|
94
|
+
'viewable_bot_decision_win_render_impression' => %w(viewable bot decision win render impression),
|
95
|
+
'viewable_bot_loaded_click' => %w(viewable bot click win),
|
96
|
+
'viewable_bot_loaded_impression' => %w(viewable bot impression win),
|
97
|
+
'viewable_bot_loaded_render_click' => %w(viewable bot click win render),
|
98
|
+
'viewable_bot_loaded_render_impression' => %w(viewable bot impression win render),
|
99
|
+
'viewable_click' => %w(click viewable),
|
100
|
+
'viewable_decision_win_click' => %w(viewable decision click win),
|
101
|
+
'viewable_decision_win_impression' => %w(viewable decision impression win),
|
102
|
+
'viewable_decision_win_render_click' => %w(viewable decision click win render),
|
103
|
+
'viewable_decision_win_render_impression' => %w(viewable decision win render impression),
|
104
|
+
'viewable_impression' => %w(impression viewable),
|
105
|
+
'viewable_loaded_click' => %w(viewable click win),
|
106
|
+
'viewable_loaded_impression' => %w(viewable impression win),
|
107
|
+
'viewable_loaded_render_click' => %w(viewable click win render),
|
108
|
+
'viewable_loaded_render_impression' => %w(viewable impression win render),
|
109
|
+
'viewable_non_bot_impression' => %w(viewable non_bot impression),
|
110
|
+
'viewable_non_bot_click' => %w(viewable non_bot click),
|
111
|
+
'viewable_non_bot_decision_win_click' => %w(viewable non_bot decision win click),
|
112
|
+
'viewable_non_bot_decision_win_impression' => %w(viewable non_bot decision win impression),
|
113
|
+
'viewable_non_bot_decision_win_render_click' => %w(viewable non_bot decision win click render),
|
114
|
+
'viewable_non_bot_decision_win_render_impression' => %w(viewable non_bot decision win render impression),
|
115
|
+
'viewable_non_bot_loaded_click' => %w(viewable non_bot win click),
|
116
|
+
'viewable_non_bot_loaded_impression' => %w(viewable non_bot win impression),
|
117
|
+
'viewable_non_bot_loaded_render_click' => %w(viewable non_bot win click render),
|
118
|
+
'viewable_non_bot_loaded_render_impression' => %w(viewable non_bot win render impression),
|
119
|
+
'viewable_render_click' => %w(click viewable render),
|
120
|
+
'viewable_render_impression' => %w(impression viewable render),
|
121
|
+
'loaded_video_25' => %w(video_25 win),
|
122
|
+
'decision_win_video_25' => %w(video_25 decision win),
|
123
|
+
'bot_video_25' => %w(video_25 bot),
|
124
|
+
'loaded_bot_video_25' => %w(video_25 bot win),
|
125
|
+
'bot_decision_win_video_25' => %w(bot video_25 decision win),
|
126
|
+
'non_bot_video_25' => %w(video_25 non_bot),
|
127
|
+
'non_bot_loaded_video_25' => %w(video_25 non_bot win),
|
128
|
+
'non_bot_decision_win_video_25' => %w(video_25 non_bot decision win),
|
129
|
+
'viewable_video_25' => %w(viewable video_25),
|
130
|
+
'viewable_loaded_video_25' => %w(viewable video_25 win),
|
131
|
+
'viewable_decision_win_video_25' => %w(viewable video_25 decision win),
|
132
|
+
'non_viewable_video_25' => %w(non_viewable video_25),
|
133
|
+
'non_viewable_loaded_video_25' => %w(non_viewable video_25 win),
|
134
|
+
'non_viewable_decision_win_video_25' => %w(non_viewable video_25 decision win),
|
135
|
+
'render_video_25' => %w(render video_25),
|
136
|
+
'loaded_render_video_25' => %w(render win video_25),
|
137
|
+
'decision_win_render_video_25' => %w(render decision win video_25),
|
138
|
+
'viewable_bot_video_25' => %w(viewable bot video_25),
|
139
|
+
'viewable_bot_loaded_video_25' => %w(viewable bot win video_25),
|
140
|
+
'viewable_bot_decision_win_video_25' => %w(viewable bot decision win video_25),
|
141
|
+
'viewable_non_bot_video_25' => %w(viewable non_bot video_25),
|
142
|
+
'viewable_non_bot_loaded_video_25' => %w(viewable non_bot win video_25),
|
143
|
+
'viewable_non_bot_decision_win_video_25' => %w(viewable non_bot decision win video_25),
|
144
|
+
'viewable_render_video_25' => %w(viewable render video_25),
|
145
|
+
'viewable_loaded_render_video_25' => %w(viewable render win video_25),
|
146
|
+
'viewable_decision_win_render_video_25' => %w(viewable render decision win video_25),
|
147
|
+
'vieawable_bot_render_video_25' => %w(viewable bot render video_25),
|
148
|
+
'viewable_bot_loaded_render_video_25' => %w(viewable bot render win video_25),
|
149
|
+
'viewable_bot_decision_win_render_video_25' => %w(viewable bot render decision win video_25),
|
150
|
+
'viewable_non_bot_render_video_25' => %w(viewable non_bot render video_25),
|
151
|
+
'viewable_non_bot_loaded_render_video_25' => %w(viewable non_bot render win video_25),
|
152
|
+
'viewable_non_bot_decision_win_render_video_25' => %w(viewable non_bot render decision win video_25),
|
153
|
+
'non_viewable_bot_video_25' => %w(non_viewable bot video_25),
|
154
|
+
'non_viewable_bot_loaded_video_25' => %w(non_viewable bot win video_25),
|
155
|
+
'non_viewable_bot_decision_win_video_25' => %w(non_viewable bot decision win video_25),
|
156
|
+
'non_viewable_non_bot_video_25' => %w(non_viewable non_bot video_25),
|
157
|
+
'non_viewable_non_bot_loaded_video_25' => %w(non_viewable non_bot win video_25),
|
158
|
+
'non_viewable_non_bot_decision_win_video_25' => %w(non_viewable non_bot decision win video_25),
|
159
|
+
'non_viewable_render_video_25' => %w(non_viewable render video_25),
|
160
|
+
'non_viewable_loaded_render_video_25' => %w(non_viewable render win video_25),
|
161
|
+
'non_viewable_decision_win_render_video_25' => %w(non_viewable render decision win video_25),
|
162
|
+
'non_viewable_bot_render_video_25' => %w(non_viewable bot render video_25),
|
163
|
+
'non_viewable_bot_loaded_render_video_25' => %w(non_viewable bot render win video_25),
|
164
|
+
'non_viewable_bot_decision_win_render_video_25' => %w(non_viewable bot render decision win video_25),
|
165
|
+
'non_viewable_non_bot_render_video_25' => %w(non_viewable non_bot render video_25),
|
166
|
+
'non_viewable_non_bot_loaded_render_video_25' => %w(non_viewable non_bot render win video_25),
|
167
|
+
'non_viewable_non_bot_decision_win_render_video_25' => %w(non_viewable non_bot render decision win video_25),
|
168
|
+
'bot_render_video_25' => %w(bot render video_25),
|
169
|
+
'bot_loaded_render_video_25' => %w(bot render video_25 win),
|
170
|
+
'bot_decision_win_render_video_25' => %w(bot render video_25 decision win),
|
171
|
+
'non_bot_render_video_25' => %w(non_bot render video_25),
|
172
|
+
'non_bot_loaded_render_video_25' => %w(non_bot render win video_25),
|
173
|
+
'non_bot_decision_win_render_video_25' => %w(non_bot render decision win video_25),
|
174
|
+
'loaded_video_50' => %w(video_50 win),
|
175
|
+
'decision_win_video_50' => %w(video_50 decision win),
|
176
|
+
'bot_video_50' => %w(video_50 bot),
|
177
|
+
'loaded_bot_video_50' => %w(video_50 bot win),
|
178
|
+
'bot_decision_win_video_50' => %w(bot video_50 decision win),
|
179
|
+
'non_bot_video_50' => %w(video_50 non_bot),
|
180
|
+
'non_bot_loaded_video_50' => %w(video_50 non_bot win),
|
181
|
+
'non_bot_decision_win_video_50' => %w(video_50 non_bot decision win),
|
182
|
+
'viewable_video_50' => %w(viewable video_50),
|
183
|
+
'viewable_loaded_video_50' => %w(viewable video_50 win),
|
184
|
+
'viewable_decision_win_video_50' => %w(viewable video_50 decision win),
|
185
|
+
'non_viewable_video_50' => %w(non_viewable video_50),
|
186
|
+
'non_viewable_loaded_video_50' => %w(non_viewable video_50 win),
|
187
|
+
'non_viewable_decision_win_video_50' => %w(non_viewable video_50 decision win),
|
188
|
+
'render_video_50' => %w(render video_50),
|
189
|
+
'loaded_render_video_50' => %w(render win video_50),
|
190
|
+
'decision_win_render_video_50' => %w(render decision win video_50),
|
191
|
+
'viewable_bot_video_50' => %w(viewable bot video_50),
|
192
|
+
'viewable_bot_loaded_video_50' => %w(viewable bot win video_50),
|
193
|
+
'viewable_bot_decision_win_video_50' => %w(viewable bot decision win video_50),
|
194
|
+
'viewable_non_bot_video_50' => %w(viewable non_bot video_50),
|
195
|
+
'viewable_non_bot_loaded_video_50' => %w(viewable non_bot win video_50),
|
196
|
+
'viewable_non_bot_decision_win_video_50' => %w(viewable non_bot decision win video_50),
|
197
|
+
'viewable_render_video_50' => %w(viewable render video_50),
|
198
|
+
'viewable_loaded_render_video_50' => %w(viewable render win video_50),
|
199
|
+
'viewable_decision_win_render_video_50' => %w(viewable render decision win video_50),
|
200
|
+
'vieawable_bot_render_video_50' => %w(viewable bot render video_50),
|
201
|
+
'viewable_bot_loaded_render_video_50' => %w(viewable bot render win video_50),
|
202
|
+
'viewable_bot_decision_win_render_video_50' => %w(viewable bot render decision win video_50),
|
203
|
+
'viewable_non_bot_render_video_50' => %w(viewable non_bot render video_50),
|
204
|
+
'viewable_non_bot_loaded_render_video_50' => %w(viewable non_bot render win video_50),
|
205
|
+
'viewable_non_bot_decision_win_render_video_50' => %w(viewable non_bot render decision win video_50),
|
206
|
+
'non_viewable_bot_video_50' => %w(non_viewable bot video_50),
|
207
|
+
'non_viewable_bot_loaded_video_50' => %w(non_viewable bot win video_50),
|
208
|
+
'non_viewable_bot_decision_win_video_50' => %w(non_viewable bot decision win video_50),
|
209
|
+
'non_viewable_non_bot_video_50' => %w(non_viewable non_bot video_50),
|
210
|
+
'non_viewable_non_bot_loaded_video_50' => %w(non_viewable non_bot win video_50),
|
211
|
+
'non_viewable_non_bot_decision_win_video_50' => %w(non_viewable non_bot decision win video_50),
|
212
|
+
'non_viewable_render_video_50' => %w(non_viewable render video_50),
|
213
|
+
'non_viewable_loaded_render_video_50' => %w(non_viewable render win video_50),
|
214
|
+
'non_viewable_decision_win_render_video_50' => %w(non_viewable render decision win video_50),
|
215
|
+
'non_viewable_bot_render_video_50' => %w(non_viewable bot render video_50),
|
216
|
+
'non_viewable_bot_loaded_render_video_50' => %w(non_viewable bot render win video_50),
|
217
|
+
'non_viewable_bot_decision_win_render_video_50' => %w(non_viewable bot render decision win video_50),
|
218
|
+
'non_viewable_non_bot_render_video_50' => %w(non_viewable non_bot render video_50),
|
219
|
+
'non_viewable_non_bot_loaded_render_video_50' => %w(non_viewable non_bot render win video_50),
|
220
|
+
'non_viewable_non_bot_decision_win_render_video_50' => %w(non_viewable non_bot render decision win video_50),
|
221
|
+
'bot_render_video_50' => %w(bot render video_50),
|
222
|
+
'bot_loaded_render_video_50' => %w(bot render video_50 win),
|
223
|
+
'bot_decision_win_render_video_50' => %w(bot render video_50 decision win),
|
224
|
+
'non_bot_render_video_50' => %w(non_bot render video_50),
|
225
|
+
'non_bot_loaded_render_video_50' => %w(non_bot render win video_50),
|
226
|
+
'non_bot_decision_win_render_video_50' => %w(non_bot render decision win video_50),
|
227
|
+
'loaded_video_75' => %w(video_75 win),
|
228
|
+
'decision_win_video_75' => %w(video_75 decision win),
|
229
|
+
'bot_video_75' => %w(video_75 bot),
|
230
|
+
'loaded_bot_video_75' => %w(video_75 bot win),
|
231
|
+
'bot_decision_win_video_75' => %w(bot video_75 decision win),
|
232
|
+
'non_bot_video_75' => %w(video_75 non_bot),
|
233
|
+
'non_bot_loaded_video_75' => %w(video_75 non_bot win),
|
234
|
+
'non_bot_decision_win_video_75' => %w(video_75 non_bot decision win),
|
235
|
+
'viewable_video_75' => %w(viewable video_75),
|
236
|
+
'viewable_loaded_video_75' => %w(viewable video_75 win),
|
237
|
+
'viewable_decision_win_video_75' => %w(viewable video_75 decision win),
|
238
|
+
'non_viewable_video_75' => %w(non_viewable video_75),
|
239
|
+
'non_viewable_loaded_video_75' => %w(non_viewable video_75 win),
|
240
|
+
'non_viewable_decision_win_video_75' => %w(non_viewable video_75 decision win),
|
241
|
+
'render_video_75' => %w(render video_75),
|
242
|
+
'loaded_render_video_75' => %w(render win video_75),
|
243
|
+
'decision_win_render_video_75' => %w(render decision win video_75),
|
244
|
+
'viewable_bot_video_75' => %w(viewable bot video_75),
|
245
|
+
'viewable_bot_loaded_video_75' => %w(viewable bot win video_75),
|
246
|
+
'viewable_bot_decision_win_video_75' => %w(viewable bot decision win video_75),
|
247
|
+
'viewable_non_bot_video_75' => %w(viewable non_bot video_75),
|
248
|
+
'viewable_non_bot_loaded_video_75' => %w(viewable non_bot win video_75),
|
249
|
+
'viewable_non_bot_decision_win_video_75' => %w(viewable non_bot decision win video_75),
|
250
|
+
'viewable_render_video_75' => %w(viewable render video_75),
|
251
|
+
'viewable_loaded_render_video_75' => %w(viewable render win video_75),
|
252
|
+
'viewable_decision_win_render_video_75' => %w(viewable render decision win video_75),
|
253
|
+
'vieawable_bot_render_video_75' => %w(viewable bot render video_75),
|
254
|
+
'viewable_bot_loaded_render_video_75' => %w(viewable bot render win video_75),
|
255
|
+
'viewable_bot_decision_win_render_video_75' => %w(viewable bot render decision win video_75),
|
256
|
+
'viewable_non_bot_render_video_75' => %w(viewable non_bot render video_75),
|
257
|
+
'viewable_non_bot_loaded_render_video_75' => %w(viewable non_bot render win video_75),
|
258
|
+
'viewable_non_bot_decision_win_render_video_75' => %w(viewable non_bot render decision win video_75),
|
259
|
+
'non_viewable_bot_video_75' => %w(non_viewable bot video_75),
|
260
|
+
'non_viewable_bot_loaded_video_75' => %w(non_viewable bot win video_75),
|
261
|
+
'non_viewable_bot_decision_win_video_75' => %w(non_viewable bot decision win video_75),
|
262
|
+
'non_viewable_non_bot_video_75' => %w(non_viewable non_bot video_75),
|
263
|
+
'non_viewable_non_bot_loaded_video_75' => %w(non_viewable non_bot win video_75),
|
264
|
+
'non_viewable_non_bot_decision_win_video_75' => %w(non_viewable non_bot decision win video_75),
|
265
|
+
'non_viewable_render_video_75' => %w(non_viewable render video_75),
|
266
|
+
'non_viewable_loaded_render_video_75' => %w(non_viewable render win video_75),
|
267
|
+
'non_viewable_decision_win_render_video_75' => %w(non_viewable render decision win video_75),
|
268
|
+
'non_viewable_bot_render_video_75' => %w(non_viewable bot render video_75),
|
269
|
+
'non_viewable_bot_loaded_render_video_75' => %w(non_viewable bot render win video_75),
|
270
|
+
'non_viewable_bot_decision_win_render_video_75' => %w(non_viewable bot render decision win video_75),
|
271
|
+
'non_viewable_non_bot_render_video_75' => %w(non_viewable non_bot render video_75),
|
272
|
+
'non_viewable_non_bot_loaded_render_video_75' => %w(non_viewable non_bot render win video_75),
|
273
|
+
'non_viewable_non_bot_decision_win_render_video_75' => %w(non_viewable non_bot render decision win video_75),
|
274
|
+
'bot_render_video_75' => %w(bot render video_75),
|
275
|
+
'bot_loaded_render_video_75' => %w(bot render video_75 win),
|
276
|
+
'bot_decision_win_render_video_75' => %w(bot render video_75 decision win),
|
277
|
+
'non_bot_render_video_75' => %w(non_bot render video_75),
|
278
|
+
'non_bot_loaded_render_video_75' => %w(non_bot render win video_75),
|
279
|
+
'non_bot_decision_win_render_video_75' => %w(non_bot render decision win video_75),
|
280
|
+
'loaded_video_100' => %w(video_100 win),
|
281
|
+
'decision_win_video_100' => %w(video_100 decision win),
|
282
|
+
'bot_video_100' => %w(video_100 bot),
|
283
|
+
'loaded_bot_video_100' => %w(video_100 bot win),
|
284
|
+
'bot_decision_win_video_100' => %w(bot video_100 decision win),
|
285
|
+
'non_bot_video_100' => %w(video_100 non_bot),
|
286
|
+
'non_bot_loaded_video_100' => %w(video_100 non_bot win),
|
287
|
+
'non_bot_decision_win_video_100' => %w(video_100 non_bot decision win),
|
288
|
+
'viewable_video_100' => %w(viewable video_100),
|
289
|
+
'viewable_loaded_video_100' => %w(viewable video_100 win),
|
290
|
+
'viewable_decision_win_video_100' => %w(viewable video_100 decision win),
|
291
|
+
'non_viewable_video_100' => %w(non_viewable video_100),
|
292
|
+
'non_viewable_loaded_video_100' => %w(non_viewable video_100 win),
|
293
|
+
'non_viewable_decision_win_video_100' => %w(non_viewable video_100 decision win),
|
294
|
+
'render_video_100' => %w(render video_100),
|
295
|
+
'loaded_render_video_100' => %w(render win video_100),
|
296
|
+
'decision_win_render_video_100' => %w(render decision win video_100),
|
297
|
+
'viewable_bot_video_100' => %w(viewable bot video_100),
|
298
|
+
'viewable_bot_loaded_video_100' => %w(viewable bot win video_100),
|
299
|
+
'viewable_bot_decision_win_video_100' => %w(viewable bot decision win video_100),
|
300
|
+
'viewable_non_bot_video_100' => %w(viewable non_bot video_100),
|
301
|
+
'viewable_non_bot_loaded_video_100' => %w(viewable non_bot win video_100),
|
302
|
+
'viewable_non_bot_decision_win_video_100' => %w(viewable non_bot decision win video_100),
|
303
|
+
'viewable_render_video_100' => %w(viewable render video_100),
|
304
|
+
'viewable_loaded_render_video_100' => %w(viewable render win video_100),
|
305
|
+
'viewable_decision_win_render_video_100' => %w(viewable render decision win video_100),
|
306
|
+
'vieawable_bot_render_video_100' => %w(viewable bot render video_100),
|
307
|
+
'viewable_bot_loaded_render_video_100' => %w(viewable bot render win video_100),
|
308
|
+
'viewable_bot_decision_win_render_video_100' => %w(viewable bot render decision win video_100),
|
309
|
+
'viewable_non_bot_render_video_100' => %w(viewable non_bot render video_100),
|
310
|
+
'viewable_non_bot_loaded_render_video_100' => %w(viewable non_bot render win video_100),
|
311
|
+
'viewable_non_bot_decision_win_render_video_100' => %w(viewable non_bot render decision win video_100),
|
312
|
+
'non_viewable_bot_video_100' => %w(non_viewable bot video_100),
|
313
|
+
'non_viewable_bot_loaded_video_100' => %w(non_viewable bot win video_100),
|
314
|
+
'non_viewable_bot_decision_win_video_100' => %w(non_viewable bot decision win video_100),
|
315
|
+
'non_viewable_non_bot_video_100' => %w(non_viewable non_bot video_100),
|
316
|
+
'non_viewable_non_bot_loaded_video_100' => %w(non_viewable non_bot win video_100),
|
317
|
+
'non_viewable_non_bot_decision_win_video_100' => %w(non_viewable non_bot decision win video_100),
|
318
|
+
'non_viewable_render_video_100' => %w(non_viewable render video_100),
|
319
|
+
'non_viewable_loaded_render_video_100' => %w(non_viewable render win video_100),
|
320
|
+
'non_viewable_decision_win_render_video_100' => %w(non_viewable render decision win video_100),
|
321
|
+
'non_viewable_bot_render_video_100' => %w(non_viewable bot render video_100),
|
322
|
+
'non_viewable_bot_loaded_render_video_100' => %w(non_viewable bot render win video_100),
|
323
|
+
'non_viewable_bot_decision_win_render_video_100' => %w(non_viewable bot render decision win video_100),
|
324
|
+
'non_viewable_non_bot_render_video_100' => %w(non_viewable non_bot render video_100),
|
325
|
+
'non_viewable_non_bot_loaded_render_video_100' => %w(non_viewable non_bot render win video_100),
|
326
|
+
'non_viewable_non_bot_decision_win_render_video_100' => %w(non_viewable non_bot render decision win video_100),
|
327
|
+
'bot_render_video_100' => %w(bot render video_100),
|
328
|
+
'bot_loaded_render_video_100' => %w(bot render video_100 win),
|
329
|
+
'bot_decision_win_render_video_100' => %w(bot render video_100 decision win),
|
330
|
+
'non_bot_render_video_100' => %w(non_bot render video_100),
|
331
|
+
'non_bot_loaded_render_video_100' => %w(non_bot render win video_100),
|
332
|
+
'non_bot_decision_win_render_video_100' => %w(non_bot render decision win video_100)
|
333
|
+
}.freeze
|
334
|
+
|
335
|
+
Config.compound_metric_types = Config.compound_metrics.keys
|
336
|
+
|
337
|
+
Config.metrics = (Config.aggregated_metric_types + Config.non_aggregated_metric_types).freeze
|
338
|
+
|
339
|
+
Config.metric_types = (Config.metrics + Config.compound_metrics.keys)
|
@@ -1,104 +1,54 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
include Virtus.model
|
3
|
+
class Segment
|
4
|
+
include Virtus.model
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
non_bot_decision_win_impressions
|
21
|
-
non_bot_impressions
|
22
|
-
non_bot_loaded_clicks
|
23
|
-
non_bot_loaded_impressions
|
24
|
-
non_viewable_bot_decision_win_clicks
|
25
|
-
non_viewable_bot_decision_win_impressions
|
26
|
-
non_viewable_bot_loaded_clicks
|
27
|
-
non_viewable_bot_loaded_impressions
|
28
|
-
non_viewable_clicks
|
29
|
-
non_viewable_decision_win_clicks
|
30
|
-
non_viewable_decision_win_impressions
|
31
|
-
non_viewable_impressions
|
32
|
-
non_viewable_loaded_clicks
|
33
|
-
non_viewable_loaded_impressions
|
34
|
-
non_viewable_non_bot_clicks
|
35
|
-
non_viewable_non_bot_decision_win_clicks
|
36
|
-
non_viewable_non_bot_decision_win_impressions
|
37
|
-
non_viewable_non_bot_impressions
|
38
|
-
non_viewable_non_bot_loaded_clicks
|
39
|
-
non_viewable_non_bot_loaded_impressions
|
40
|
-
viewable_bot_clicks
|
41
|
-
viewable_bot_decision_win_clicks
|
42
|
-
viewable_bot_decision_win_impressions
|
43
|
-
viewable_bot_impressions
|
44
|
-
viewable_bot_loaded_clicks
|
45
|
-
viewable_bot_loaded_impressions
|
46
|
-
viewable_clicks
|
47
|
-
viewable_decision_win_clicks
|
48
|
-
viewable_decision_win_impressions
|
49
|
-
viewable_impressions
|
50
|
-
viewable_loaded_clicks
|
51
|
-
viewable_loaded_impressions
|
52
|
-
viewable_non_bot_clicks
|
53
|
-
viewable_non_bot_decision_win_clicks
|
54
|
-
viewable_non_bot_decision_win_impressions
|
55
|
-
viewable_non_bot_impressions
|
56
|
-
viewable_non_bot_loaded_clicks
|
57
|
-
viewable_non_bot_loaded_impressions
|
58
|
-
).freeze
|
6
|
+
GROUP_BY_FIELDS = %w(
|
7
|
+
advertiser_id
|
8
|
+
advertisement_id
|
9
|
+
campaign_id
|
10
|
+
channel_id
|
11
|
+
app_id
|
12
|
+
exchange_id
|
13
|
+
publisher_id
|
14
|
+
agency_id
|
15
|
+
site_id
|
16
|
+
third_party_id
|
17
|
+
supply_id
|
18
|
+
).freeze
|
59
19
|
|
60
|
-
|
61
|
-
|
62
|
-
agency_id
|
63
|
-
app_id
|
64
|
-
campaign_id
|
65
|
-
channel_id
|
66
|
-
clicks
|
67
|
-
conversions
|
68
|
-
decision_cost
|
69
|
-
exchange_id
|
70
|
-
impressions
|
71
|
-
publisher_id
|
72
|
-
site_id
|
73
|
-
supply_id
|
74
|
-
third_party_id
|
75
|
-
win_cost
|
76
|
-
).sort.freeze + COMPOUND_METRICS
|
20
|
+
COMPOUND_METRICS_FIELDS =
|
21
|
+
Config.compound_metric_types.reject { |m| m.include?('render') }.map(&:pluralize)
|
77
22
|
|
78
|
-
|
79
|
-
|
80
|
-
attribute :app_id, String
|
81
|
-
attribute :campaign_id, String
|
82
|
-
attribute :channel_id, String
|
83
|
-
attribute :clicks, Integer
|
84
|
-
attribute :conversions, Integer
|
85
|
-
attribute :decision_cost, Integer
|
86
|
-
attribute :exchange_id, String
|
87
|
-
attribute :impressions, Integer
|
88
|
-
attribute :publisher_id, String
|
89
|
-
attribute :site_id, String
|
90
|
-
attribute :supply_id, String
|
91
|
-
attribute :third_party_id, String
|
92
|
-
attribute :win_cost, Integer
|
93
|
-
attribute :shard, Integer
|
94
|
-
attribute :siblings, Array[String]
|
23
|
+
AGGREGATED_METRIC_FIELDS = Config.aggregated_metric_types.map(&:pluralize)
|
24
|
+
COST_METRIC_FIELDS = Config.cost_metrics
|
95
25
|
|
96
|
-
|
97
|
-
|
98
|
-
|
26
|
+
VERIFIED_FIELDS =
|
27
|
+
(GROUP_BY_FIELDS +
|
28
|
+
AGGREGATED_METRIC_FIELDS +
|
29
|
+
COMPOUND_METRICS_FIELDS +
|
30
|
+
COST_METRIC_FIELDS).sort.freeze
|
99
31
|
|
100
|
-
|
101
|
-
|
102
|
-
|
32
|
+
attribute :shard, Integer
|
33
|
+
attribute :siblings, Array[String]
|
34
|
+
|
35
|
+
GROUP_BY_FIELDS.each do |f|
|
36
|
+
attribute f.to_sym, String
|
37
|
+
end
|
38
|
+
|
39
|
+
AGGREGATED_METRIC_FIELDS.each do |f|
|
40
|
+
attribute f.to_sym, Integer
|
41
|
+
end
|
42
|
+
|
43
|
+
COMPOUND_METRICS_FIELDS.each do |f|
|
44
|
+
attribute f.to_sym, Integer
|
45
|
+
end
|
46
|
+
|
47
|
+
COST_METRIC_FIELDS.each do |f|
|
48
|
+
attribute f.to_sym, Float
|
49
|
+
end
|
50
|
+
|
51
|
+
def hash
|
52
|
+
Hashtastic::DictionaryValuesHasher.call(attributes, VERIFIED_FIELDS)
|
103
53
|
end
|
104
54
|
end
|