rhcf-timeseries 0.0.6 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,182 +0,0 @@
1
- require 'spec_helper'
2
- require 'timecop'
3
- require 'redis'
4
- require 'rhcf/timeseries/redis'
5
- require 'benchmark'
6
- require 'stackprof'
7
-
8
- describe Rhcf::Timeseries::Redis do
9
- let(:redis_connection){Redis.new}
10
- subject{Rhcf::Timeseries::Redis.new(nil, redis_connection)}
11
-
12
- before(:each) do
13
- Timecop.return
14
- subject.flush!
15
- end
16
-
17
- describe 'descending' do
18
- it "is be fast to store and read" do
19
- total = 0
20
- start_time = Time.now
21
-
22
- bench = Benchmark.measure {
23
- StackProf.run(mode: :cpu, out: p('/tmp/stackprof-cpu-store-descend.dump')) do
24
- 1000.times do
25
- total +=1
26
- subject.store("a/b", {"e/f" => 1} ) #, time)
27
- end
28
- end
29
- }
30
-
31
-
32
- Benchmark.measure {
33
- expect(subject.find("a", start_time - 11100, Time.now + 11100).total['e'].to_i).to eq(total)
34
- }
35
-
36
- Benchmark.measure {
37
- expect(subject.find("a", start_time - 100000, Time.now + 100000).total(:year)['e/f'].to_i).to eq(total)
38
- }
39
-
40
- puts "Descend write speed %d points/seg | points:%d, duration:%0.3fs" % [speed = (1.0 * total / (bench.total + 0.00000001)), total, bench.total]
41
- expect(speed).to be > 100
42
- end
43
- end
44
-
45
- describe 'not descending' do
46
- it "is be fast to store and read" do
47
- total = 0
48
- bench = Benchmark.measure {
49
- StackProf.run(mode: :cpu, out: p('/tmp/stackprof-cpu-store-nodescend.dump')) do
50
- 10000.times do
51
- total +=1
52
- subject.store("a/b/c/d", {"e/f/g/h" => 1} , Time.now, false, false)
53
- end
54
- end
55
- }
56
-
57
- puts "No descend write speed %d points/seg | points:%d, duration:%0.3fs" % [new_speed = (1.0 * total / (bench.total + 0.00000001)), total, bench.total]
58
- expect(new_speed).to be > 300
59
- end
60
- end
61
-
62
- it "is similar to redistat" do
63
- start_time = Time.parse("2000-01-01 00:00:00")
64
- Timecop.travel(start_time)
65
- subject.store("views/product/15", {"web/firefox/3" => 1})
66
-
67
- Timecop.travel(15.minutes) #00:00:15
68
- subject.store("views/product/13", {"web/firefox/3" => 1}, Time.now)
69
- subject.store("views/product/13", {"web/firefox/3" => 1}, Time.now)
70
- subject.store("views/product/13", {"web/firefox/3" => 0}, Time.now)
71
-
72
- Timecop.travel(15.minutes) #00:00:30
73
- subject.store("views/product/15", {"web/ie/6" => 3})
74
-
75
- Timecop.travel(15.minutes) #00:00:45
76
- subject.store("views/product/15", {"web/ie/6" => 2})
77
-
78
- Timecop.travel(15.minutes) #00:00:00
79
- subject.store("views/product/11", {"web/ie/5" => 2})
80
-
81
- Timecop.travel(15.minutes) #00:00:15
82
- subject.store("views/product/11", {"web/chrome/11"=> 4})
83
-
84
- Timecop.travel(15.minutes) #00:00:30
85
- subject.store("views/product/11", {"web/chrome/11"=> 2})
86
-
87
- expect(subject.find("views/product", start_time, start_time + 55.minutes).total(:ever)).to eq({
88
- "web" => 16.0,
89
- "web/chrome" => 6.0,
90
- "web/chrome/11" => 6.0,
91
- "web/firefox" => 3.0,
92
- "web/firefox/3" => 3.0,
93
- "web/ie" => 7.0,
94
- "web/ie/5" => 2.0,
95
- "web/ie/6" => 5.0
96
- })
97
-
98
- expect(subject.find("views/product", start_time, start_time + 55.minutes).total(:year)).to eq({
99
- "web" => 16.0,
100
- "web/chrome" => 6.0,
101
- "web/chrome/11" => 6.0,
102
- "web/firefox" => 3.0,
103
- "web/firefox/3" => 3.0,
104
- "web/ie" => 7.0,
105
- "web/ie/5" => 2.0,
106
- "web/ie/6" => 5.0
107
- })
108
-
109
- expect( subject.find("views/product", start_time, start_time + 55.minutes).total ).to eq({
110
- 'web' => 8,
111
- 'web/firefox' => 3,
112
- 'web/firefox/3' => 3,
113
- 'web/ie' => 5,
114
- 'web/ie/6' => 5,
115
- })
116
-
117
- expect(subject.find("views/product/15", start_time, start_time + 55.minutes).points(:minute)).to eq([
118
- {:moment=>"2000-01-01T00:00", :values=>{"web/firefox"=>1, "web/firefox/3"=>1, "web"=>1}},
119
- {:moment=>"2000-01-01T00:30", :values=>{"web"=>3, "web/ie/6"=>3, "web/ie"=>3}},
120
- {:moment=>"2000-01-01T00:45", :values=>{"web"=>2, "web/ie/6"=>2, "web/ie"=>2}}
121
- ])
122
-
123
- expect(subject.find("views/product/13", start_time, start_time + 55.minutes).points(:minute)).to eq([
124
- {:moment=>"2000-01-01T00:15", :values=>{"web/firefox"=>2, "web/firefox/3"=>2, "web"=>2}},
125
- ])
126
-
127
- expect(subject.find("views/product", start_time, start_time + 55.minutes).points(:minute)).to eq([
128
- {:moment=>"2000-01-01T00:00", :values=>{"web/firefox"=>1, "web/firefox/3"=>1, "web"=>1}},
129
- {:moment=>"2000-01-01T00:15", :values=>{"web/firefox"=>2, "web/firefox/3"=>2, "web"=>2}},
130
- {:moment=>"2000-01-01T00:30", :values=>{"web"=>3, "web/ie/6"=>3, "web/ie"=>3}},
131
- {:moment=>"2000-01-01T00:45", :values=>{"web"=>2, "web/ie/6"=>2, "web/ie"=>2}}
132
- ])
133
-
134
- expect(subject.find("views", start_time, start_time + 55.minutes).points(:minute)).to eq([
135
- {:moment=>"2000-01-01T00:00", :values=>{"web/firefox"=>1, "web/firefox/3"=>1, "web"=>1}},
136
- {:moment=>"2000-01-01T00:15", :values=>{"web/firefox"=>2, "web/firefox/3"=>2, "web"=>2}},
137
- {:moment=>"2000-01-01T00:30", :values=>{"web"=>3, "web/ie/6"=>3, "web/ie"=>3}},
138
- {:moment=>"2000-01-01T00:45", :values=>{"web"=>2, "web/ie/6"=>2, "web/ie"=>2}}
139
- ])
140
-
141
- expect(subject.find("views", start_time).points(:hour)).to eq([
142
- {
143
- :moment=>"2000-01-01T00",
144
- :values=> {
145
- "web/ie"=>5.0,
146
- "web"=>8.0,
147
- "web/firefox"=>3.0,
148
- "web/ie/6"=>5.0,
149
- "web/firefox/3"=>3.0}
150
- },{
151
- :moment=>"2000-01-01T01",
152
- :values=>{
153
- "web/ie"=>2.0,
154
- "web/chrome"=>6.0,
155
- "web/chrome/11"=>6.0,
156
- "web"=>8.0,
157
- "web/ie/5"=>2.0
158
- }
159
- }
160
- ])
161
- end
162
-
163
- it "causes no stack overflow" do
164
- params_hash = {
165
- sender_domain: 'example.com',
166
- realm: 'realm',
167
- destination_domain: 'lvh.me',
168
- mail_server: 'aserver',
169
- bind_interface: '11.1.1.11'
170
- }
171
-
172
- {
173
- 'sender_domain' => '%{sender_domain}',
174
- 'realm_and_sender_domain' => '%{realm}/%{sender_domain}',
175
- 'mail_server_and_interface' => '%{mail_server}/%{bind_interface}',
176
- 'realm_and_destination_domain' => '%{realm}/%{destination_domain}',
177
- 'destination_domain' => '%{destination_domain}'
178
- }.each do |known, unknown|
179
- subject.store(known % params_hash, {[(unknown % params_hash),'sent'].join('/') => 1})
180
- end
181
- end
182
- end