|
8 | 8 | column_id: :integer,
|
9 | 9 | value: :integer,
|
10 | 10 | date: :date,
|
11 |
| - subject: [:enum, {name: :subject_types}] |
| 11 | + subject: [:enum, {name: :subject_types}], |
| 12 | + params: :hstore |
12 | 13 |
|
13 | 14 | destination do
|
14 | 15 | model StatsByDay
|
15 |
| - take :record_id, :column_id, :hits, :date |
16 |
| - key_fields :record_id, :column_id, :date |
| 16 | + take :record_id, :column_id, :hits, :date, :params |
| 17 | + key_fields :record_id, :column_id, :date, :params |
17 | 18 | increment_fields :hits
|
18 | 19 | map :hits, to: :value
|
19 | 20 | condition 'target.date = :date'
|
20 | 21 | end
|
21 | 22 |
|
22 | 23 | destination do
|
23 | 24 | model StatsTotal
|
24 |
| - take :record_id, :column_id, :hits |
25 |
| - key_fields :record_id, :column_id |
| 25 | + take :record_id, :column_id, :hits, :params |
| 26 | + key_fields :record_id, :column_id, :params |
26 | 27 | increment_fields :hits
|
27 | 28 | map :hits, to: :value
|
28 | 29 | end
|
|
52 | 53 | RedisCounters.create_counter(Redis.current,
|
53 | 54 | counter_class: RedisCounters::HashCounter,
|
54 | 55 | counter_name: :record_hits_by_day,
|
55 |
| - group_keys: [:record_id, :column_id, :subject], |
| 56 | + group_keys: [:record_id, :column_id, :subject, :params], |
56 | 57 | partition_keys: [:date]
|
57 | 58 | )
|
58 | 59 | end
|
|
63 | 64 |
|
64 | 65 | describe '#process!' do
|
65 | 66 | before do
|
66 |
| - counter.increment(date: prev_date_s, record_id: 1, column_id: 100, subject: '') |
67 |
| - counter.increment(date: prev_date_s, record_id: 1, column_id: 200, subject: '') |
68 |
| - counter.increment(date: prev_date_s, record_id: 1, column_id: 200, subject: '') |
69 |
| - counter.increment(date: prev_date_s, record_id: 2, column_id: 100, subject: nil) |
| 67 | + counter.increment(date: prev_date_s, record_id: 1, column_id: 100, subject: '', params: '') |
| 68 | + counter.increment(date: prev_date_s, record_id: 1, column_id: 200, subject: '', params: '') |
| 69 | + counter.increment(date: prev_date_s, record_id: 1, column_id: 200, subject: '', params: '') |
| 70 | + counter.increment(date: prev_date_s, record_id: 2, column_id: 100, subject: nil, params: '') |
| 71 | + |
| 72 | + params = {a: 1}.stringify_keys.to_s[1..-2] |
| 73 | + counter.increment(date: prev_date_s, record_id: 3, column_id: 300, subject: nil, params: params) |
70 | 74 |
|
71 | 75 | dumper.process!(counter, date: prev_date)
|
72 | 76 |
|
73 |
| - counter.increment(date: date_s, record_id: 1, column_id: 100, subject: '') |
74 |
| - counter.increment(date: date_s, record_id: 1, column_id: 200, subject: '') |
75 |
| - counter.increment(date: date_s, record_id: 1, column_id: 200, subject: '') |
76 |
| - counter.increment(date: date_s, record_id: 2, column_id: 100, subject: nil) |
| 77 | + counter.increment(date: date_s, record_id: 1, column_id: 100, subject: '', params: '') |
| 78 | + counter.increment(date: date_s, record_id: 1, column_id: 200, subject: '', params: '') |
| 79 | + counter.increment(date: date_s, record_id: 1, column_id: 200, subject: '', params: '') |
| 80 | + counter.increment(date: date_s, record_id: 2, column_id: 100, subject: nil, params: '') |
77 | 81 |
|
78 | 82 | dumper.process!(counter, date: date)
|
79 | 83 | end
|
80 | 84 |
|
81 |
| - Then { expect(StatsByDay.count).to eq 6 } |
| 85 | + Then { expect(StatsByDay.count).to eq 7 } |
82 | 86 | And { expect(StatsByDay.where(record_id: 1, column_id: 100, date: prev_date).first.hits).to eq 1 }
|
83 | 87 | And { expect(StatsByDay.where(record_id: 1, column_id: 200, date: prev_date).first.hits).to eq 2 }
|
84 | 88 | And { expect(StatsByDay.where(record_id: 2, column_id: 100, date: prev_date).first.hits).to eq 1 }
|
| 89 | + And { expect(StatsByDay.where(record_id: 3, column_id: 300, date: prev_date).first.params).to eq("a" => "1") } |
85 | 90 | And { expect(StatsByDay.where(record_id: 1, column_id: 100, date: date).first.hits).to eq 1 }
|
86 | 91 | And { expect(StatsByDay.where(record_id: 1, column_id: 200, date: date).first.hits).to eq 2 }
|
87 | 92 | And { expect(StatsByDay.where(record_id: 2, column_id: 100, date: date).first.hits).to eq 1 }
|
88 | 93 |
|
89 |
| - And { expect(StatsTotal.count).to eq 3 } |
| 94 | + And { expect(StatsTotal.count).to eq 4 } |
90 | 95 | And { expect(StatsTotal.where(record_id: 1, column_id: 100).first.hits).to eq 2 }
|
91 | 96 | And { expect(StatsTotal.where(record_id: 1, column_id: 200).first.hits).to eq 4 }
|
92 | 97 | And { expect(StatsTotal.where(record_id: 2, column_id: 100).first.hits).to eq 2 }
|
93 | 98 |
|
94 |
| - And { expect(StatsAggTotal.count).to eq 2 } |
| 99 | + And { expect(StatsAggTotal.count).to eq 3 } |
95 | 100 | And { expect(StatsAggTotal.where(record_id: 1).first.hits).to eq 6 }
|
96 | 101 | And { expect(StatsAggTotal.where(record_id: 2).first.hits).to eq 2 }
|
97 | 102 |
|
|
0 commit comments