pulse-meter 0.2.1 → 0.2.2
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.
- data/.travis.yml +4 -0
- data/examples/basic.ru +23 -5
- data/examples/basic_sensor_data.rb +15 -2
- data/examples/full/server.ru +2 -3
- data/examples/minimal/server.ru +3 -2
- data/lib/pulse-meter/sensor.rb +2 -1
- data/lib/pulse-meter/sensor/configuration.rb +3 -1
- data/lib/pulse-meter/sensor/hashed_indicator.rb +22 -0
- data/lib/pulse-meter/sensor/timeline.rb +13 -1
- data/lib/pulse-meter/version.rb +1 -1
- data/lib/pulse-meter/visualize/app.rb +6 -2
- data/lib/pulse-meter/visualize/base.rb +15 -0
- data/lib/pulse-meter/visualize/dsl/base.rb +131 -0
- data/lib/pulse-meter/visualize/dsl/errors.rb +0 -6
- data/lib/pulse-meter/visualize/dsl/layout.rb +12 -41
- data/lib/pulse-meter/visualize/dsl/page.rb +15 -41
- data/lib/pulse-meter/visualize/dsl/sensor.rb +9 -10
- data/lib/pulse-meter/visualize/dsl/widget.rb +18 -65
- data/lib/pulse-meter/visualize/dsl/widget_old.rb +95 -0
- data/lib/pulse-meter/visualize/dsl/widgets/area.rb +20 -0
- data/lib/pulse-meter/visualize/dsl/widgets/gauge.rb +12 -0
- data/lib/pulse-meter/visualize/dsl/widgets/line.rb +21 -0
- data/lib/pulse-meter/visualize/dsl/widgets/pie.rb +16 -0
- data/lib/pulse-meter/visualize/dsl/widgets/table.rb +19 -0
- data/lib/pulse-meter/visualize/layout.rb +7 -16
- data/lib/pulse-meter/visualize/page.rb +5 -10
- data/lib/pulse-meter/visualize/public/favicon.ico +0 -0
- data/lib/pulse-meter/visualize/public/js/application.coffee +156 -107
- data/lib/pulse-meter/visualize/public/js/application.js +283 -122
- data/lib/pulse-meter/visualize/sensor.rb +7 -13
- data/lib/pulse-meter/visualize/views/main.haml +8 -52
- data/lib/pulse-meter/visualize/views/widgets/area.haml +31 -0
- data/lib/pulse-meter/visualize/views/widgets/extend_options.haml +11 -0
- data/lib/pulse-meter/visualize/views/widgets/gauge.haml +13 -0
- data/lib/pulse-meter/visualize/views/widgets/line.haml +31 -0
- data/lib/pulse-meter/visualize/views/widgets/pie.haml +13 -0
- data/lib/pulse-meter/visualize/views/widgets/table.haml +23 -0
- data/lib/pulse-meter/visualize/widget.rb +17 -87
- data/lib/pulse-meter/visualize/widgets/gauge.rb +47 -0
- data/lib/pulse-meter/visualize/widgets/pie.rb +36 -0
- data/lib/pulse-meter/visualize/widgets/timeline.rb +90 -0
- data/lib/pulse-meter/visualizer.rb +18 -8
- data/perl/PulseMeter/Sensor/Base.pm +42 -0
- data/perl/PulseMeter/Sensor/Counter.pm +19 -0
- data/perl/PulseMeter/Sensor/HashedIndicator.pm +12 -0
- data/perl/PulseMeter/Sensor/Indicator.pm +17 -0
- data/perl/PulseMeter/Sensor/Timeline.pm +51 -0
- data/perl/PulseMeter/Sensor/Timelined/Average.pm +13 -0
- data/perl/PulseMeter/Sensor/Timelined/Counter.pm +12 -0
- data/perl/PulseMeter/Sensor/Timelined/HashedCounter.pm +12 -0
- data/perl/PulseMeter/Sensor/Timelined/Max.pm +18 -0
- data/perl/PulseMeter/Sensor/Timelined/Median.pm +8 -0
- data/perl/PulseMeter/Sensor/Timelined/Min.pm +18 -0
- data/perl/PulseMeter/Sensor/Timelined/Percentile.pm +17 -0
- data/perl/PulseMeter/Sensor/Timelined/UniqCounter.pm +13 -0
- data/perl/PulseMeter/Sensor/UniqCounter.pm +12 -0
- data/pulse-meter.gemspec +1 -0
- data/spec/pulse_meter/sensor/configuration_spec.rb +10 -2
- data/spec/pulse_meter/sensor/hashed_indicator_spec.rb +39 -0
- data/spec/pulse_meter/visualize/dsl/layout_spec.rb +8 -8
- data/spec/pulse_meter/visualize/dsl/page_spec.rb +29 -42
- data/spec/pulse_meter/visualize/dsl/sensor_spec.rb +5 -5
- data/spec/pulse_meter/visualize/dsl/widget_spec.rb +1 -122
- data/spec/pulse_meter/visualize/dsl/widgets/area_spec.rb +44 -0
- data/spec/pulse_meter/visualize/dsl/widgets/gauge_spec.rb +22 -0
- data/spec/pulse_meter/visualize/dsl/widgets/line_spec.rb +44 -0
- data/spec/pulse_meter/visualize/dsl/widgets/pie_spec.rb +35 -0
- data/spec/pulse_meter/visualize/dsl/widgets/table_spec.rb +36 -0
- data/spec/pulse_meter/visualize/layout_spec.rb +3 -3
- data/spec/pulse_meter/visualize/page_spec.rb +2 -2
- data/spec/pulse_meter/visualize/sensor_spec.rb +4 -4
- data/spec/pulse_meter/visualize/series_extractor_spec.rb +3 -3
- data/spec/pulse_meter/visualize/widgets/area_spec.rb +78 -0
- data/spec/pulse_meter/visualize/widgets/gauge_spec.rb +63 -0
- data/spec/pulse_meter/visualize/widgets/line_spec.rb +77 -0
- data/spec/pulse_meter/visualize/widgets/pie_spec.rb +73 -0
- data/spec/pulse_meter/visualize/widgets/table_spec.rb +78 -0
- data/spec/shared_examples/dsl_widget.rb +106 -0
- data/spec/shared_examples/timeline_sensor.rb +32 -2
- metadata +75 -6
- data/lib/pulse-meter/visualize/dsl.rb +0 -0
- data/spec/pulse_meter/visualize/widget_spec.rb +0 -122
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe PulseMeter::Visualize::Widgets::Table do
|
|
4
|
+
let(:interval){ 100 }
|
|
5
|
+
let!(:a_sensor){ PulseMeter::Sensor::Timelined::Counter.new(:a_sensor, :ttl => 1000, :interval => interval, annotation: 'A') }
|
|
6
|
+
let!(:b_sensor){ PulseMeter::Sensor::Timelined::Counter.new(:b_sensor, :ttl => 1000, :interval => interval, annotation: 'B') }
|
|
7
|
+
|
|
8
|
+
let(:widget_name){ "some_widget" }
|
|
9
|
+
|
|
10
|
+
let(:redraw_interval){5}
|
|
11
|
+
let(:values_label){'xxxx'}
|
|
12
|
+
let(:width){6}
|
|
13
|
+
let(:timespan){interval * 2}
|
|
14
|
+
let(:a_color){'#FF0000'}
|
|
15
|
+
let(:b_color){'#FFFF00'}
|
|
16
|
+
|
|
17
|
+
let(:interval_start){ Time.at((Time.now.to_i / interval) * interval) }
|
|
18
|
+
|
|
19
|
+
let(:widget) do
|
|
20
|
+
w = PulseMeter::Visualize::DSL::Widgets::Table.new(widget_name)
|
|
21
|
+
w.redraw_interval redraw_interval
|
|
22
|
+
w.width width
|
|
23
|
+
w.sensor :a_sensor, color: a_color
|
|
24
|
+
w.sensor :b_sensor, color: b_color
|
|
25
|
+
w.gchart_options a: 1
|
|
26
|
+
w.timespan timespan
|
|
27
|
+
w.to_data
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe "#data" do
|
|
31
|
+
it "should contain type, title, redraw_interval, width, gchart_options, timespan attriutes" do
|
|
32
|
+
wdata = widget.data
|
|
33
|
+
wdata[:type].should == 'table'
|
|
34
|
+
wdata[:title].should == widget_name
|
|
35
|
+
wdata[:redraw_interval].should == redraw_interval
|
|
36
|
+
wdata[:width].should == width
|
|
37
|
+
wdata[:gchart_options].should == {a: 1}
|
|
38
|
+
wdata[:timespan].should == timespan
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe "series attribute" do
|
|
42
|
+
before(:each) do
|
|
43
|
+
Timecop.freeze(interval_start + 1) do
|
|
44
|
+
a_sensor.event(12)
|
|
45
|
+
b_sensor.event(33)
|
|
46
|
+
end
|
|
47
|
+
Timecop.freeze(interval_start + interval + 1) do
|
|
48
|
+
a_sensor.event(111)
|
|
49
|
+
end
|
|
50
|
+
@current_time = interval_start + 2 * interval - 1
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should contain valid series" do
|
|
54
|
+
Timecop.freeze(@current_time) do
|
|
55
|
+
widget.data[:series].should ==
|
|
56
|
+
{
|
|
57
|
+
titles: [a_sensor.annotation, b_sensor.annotation],
|
|
58
|
+
rows: [[interval_start.to_i * 1000, 12, 33]],
|
|
59
|
+
options: [
|
|
60
|
+
{color: a_color},
|
|
61
|
+
{color: b_color}
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "should accept custom timespan" do
|
|
68
|
+
Timecop.freeze(@current_time + interval) do
|
|
69
|
+
widget.data(timespan: timespan)[:series][:rows].size.should == 1
|
|
70
|
+
widget.data(timespan: timespan + interval)[:series][:rows].size.should == 2
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
shared_examples_for "dsl widget" do
|
|
2
|
+
|
|
3
|
+
let(:interval){ 100 }
|
|
4
|
+
let(:name) { "some_sensor" }
|
|
5
|
+
let!(:sensor){ PulseMeter::Sensor::Timelined::Max.new(name, :ttl => 1000, :interval => interval) }
|
|
6
|
+
|
|
7
|
+
let(:widget_name){ "some_widget" }
|
|
8
|
+
let(:w){ described_class.new(widget_name) }
|
|
9
|
+
|
|
10
|
+
describe '.new' do
|
|
11
|
+
it "should set default value for width papram" do
|
|
12
|
+
wid = w.to_data
|
|
13
|
+
wid.width.should == PulseMeter::Visualize::DSL::Widget::MAX_WIDTH
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should set title param from .new argument" do
|
|
17
|
+
wid = w.to_data
|
|
18
|
+
wid.title.should == widget_name
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe "#process_args" do
|
|
23
|
+
it "should set sensor by :sensor param" do
|
|
24
|
+
w.process_args :sensor => :sss
|
|
25
|
+
sensors = w.to_data.sensors
|
|
26
|
+
sensors.size.should == 1
|
|
27
|
+
sensors.first.name.to_s.should == 'sss'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should set title by :title param" do
|
|
31
|
+
w.process_args :title => 'Title XXX'
|
|
32
|
+
w.to_data.title.should == 'Title XXX'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should set width by :width param" do
|
|
36
|
+
w.process_args :width => 5
|
|
37
|
+
w.to_data.width.should == 5
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe "#sensor" do
|
|
43
|
+
it "should add sensor" do
|
|
44
|
+
w.sensor :s1
|
|
45
|
+
w.sensor :s2
|
|
46
|
+
sensors = w.to_data.sensors
|
|
47
|
+
sensors.size.should == 2
|
|
48
|
+
sensors.first.name.to_s.should == 's1'
|
|
49
|
+
sensors.last.name.to_s.should == 's2'
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe "#title" do
|
|
54
|
+
it "should set title" do
|
|
55
|
+
w.title 'Title XXX'
|
|
56
|
+
w.to_data.title.should == 'Title XXX'
|
|
57
|
+
w.title 'Title YYY'
|
|
58
|
+
w.to_data.title.should == 'Title YYY'
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe "#width" do
|
|
63
|
+
it "should set width" do
|
|
64
|
+
w.width 6
|
|
65
|
+
w.to_data.width.should == 6
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should raise exception if width is invalid" do
|
|
69
|
+
expect { w.width -1 }.to raise_exception(PulseMeter::Visualize::DSL::BadWidgetWidth)
|
|
70
|
+
expect { w.width 11 }.to raise_exception(PulseMeter::Visualize::DSL::BadWidgetWidth)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe "#redraw_interval" do
|
|
75
|
+
it "should set redraw_interval" do
|
|
76
|
+
w.redraw_interval 5
|
|
77
|
+
w.to_data.redraw_interval.should == 5
|
|
78
|
+
end
|
|
79
|
+
it "should raise exception if redraw_interval is negative" do
|
|
80
|
+
expect{ w.redraw_interval(-1) }.to raise_exception(PulseMeter::Visualize::DSL::BadWidgetRedrawInterval)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
describe "#to_data" do
|
|
86
|
+
it "should convert dsl data to widget" do
|
|
87
|
+
w.to_data.should be_kind_of(PulseMeter::Visualize::Widget)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
describe "#gchart_options" do
|
|
92
|
+
it "should add options to gchart_options hash" do
|
|
93
|
+
w.gchart_options a: 1
|
|
94
|
+
w.gchart_options b: 2
|
|
95
|
+
w.to_data.gchart_options.should == {a: 1, b: 2}
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
describe "any anknown method" do
|
|
100
|
+
it "should add options to gchart_options hash" do
|
|
101
|
+
w.foobar 123
|
|
102
|
+
w.to_data.gchart_options.should == {foobar: 123}
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
@@ -19,9 +19,15 @@ shared_examples_for "timeline sensor" do |extra_init_values, default_event|
|
|
|
19
19
|
|
|
20
20
|
before(:each) do
|
|
21
21
|
@interval_id = (Time.now.to_i / interval) * interval
|
|
22
|
+
@prev_interval_id = (Time.now.to_i / interval) * interval - interval
|
|
23
|
+
|
|
22
24
|
@raw_data_key = sensor.raw_data_key(@interval_id)
|
|
25
|
+
@prev_raw_data_key = sensor.raw_data_key(@prev_interval_id)
|
|
26
|
+
|
|
23
27
|
@next_raw_data_key = sensor.raw_data_key(@interval_id + interval)
|
|
28
|
+
|
|
24
29
|
@start_of_interval = Time.at(@interval_id)
|
|
30
|
+
@start_of_prev_interval = Time.at(@prev_interval_id)
|
|
25
31
|
end
|
|
26
32
|
|
|
27
33
|
describe "#dump" do
|
|
@@ -66,12 +72,36 @@ shared_examples_for "timeline sensor" do |extra_init_values, default_event|
|
|
|
66
72
|
end
|
|
67
73
|
|
|
68
74
|
it "should write data to bucket indicated by truncated timestamp" do
|
|
69
|
-
key = sensor.raw_data_key(@interval_id)
|
|
70
75
|
expect{
|
|
71
76
|
Timecop.freeze(@start_of_interval) do
|
|
72
77
|
sensor.event(sample_event)
|
|
73
78
|
end
|
|
74
|
-
}.to change{ redis.ttl(
|
|
79
|
+
}.to change{ redis.ttl(@raw_data_key) }
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
describe "#event_at" do
|
|
84
|
+
let(:now) {Time.now}
|
|
85
|
+
it "should write events to redis" do
|
|
86
|
+
expect{
|
|
87
|
+
sensor.event_at(now, sample_event)
|
|
88
|
+
}.to change{ redis.keys('*').count }.by(1)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "should write data so that it totally expires after :raw_data_ttl" do
|
|
92
|
+
key_count = redis.keys('*').count
|
|
93
|
+
sensor.event_at(now, sample_event)
|
|
94
|
+
Timecop.freeze(Time.now + raw_data_ttl + 1) do
|
|
95
|
+
redis.keys('*').count.should == key_count
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "should write data to bucket indicated by passed time" do
|
|
100
|
+
expect{
|
|
101
|
+
Timecop.freeze(@start_of_interval) do
|
|
102
|
+
sensor.event_at(@start_of_prev_interval, sample_event)
|
|
103
|
+
end
|
|
104
|
+
}.to change{ redis.ttl(@prev_raw_data_key) }
|
|
75
105
|
end
|
|
76
106
|
end
|
|
77
107
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pulse-meter
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.2
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2012-06-
|
|
13
|
+
date: 2012-06-30 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: gon-sinatra
|
|
@@ -92,6 +92,22 @@ dependencies:
|
|
|
92
92
|
- - ! '>='
|
|
93
93
|
- !ruby/object:Gem::Version
|
|
94
94
|
version: '0'
|
|
95
|
+
- !ruby/object:Gem::Dependency
|
|
96
|
+
name: sinatra-partial
|
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
|
98
|
+
none: false
|
|
99
|
+
requirements:
|
|
100
|
+
- - ! '>='
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '0'
|
|
103
|
+
type: :runtime
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
none: false
|
|
107
|
+
requirements:
|
|
108
|
+
- - ! '>='
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
95
111
|
- !ruby/object:Gem::Dependency
|
|
96
112
|
name: terminal-table
|
|
97
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -325,6 +341,7 @@ files:
|
|
|
325
341
|
- lib/pulse-meter/sensor/configuration.rb
|
|
326
342
|
- lib/pulse-meter/sensor/counter.rb
|
|
327
343
|
- lib/pulse-meter/sensor/hashed_counter.rb
|
|
344
|
+
- lib/pulse-meter/sensor/hashed_indicator.rb
|
|
328
345
|
- lib/pulse-meter/sensor/indicator.rb
|
|
329
346
|
- lib/pulse-meter/sensor/remote.rb
|
|
330
347
|
- lib/pulse-meter/sensor/timeline.rb
|
|
@@ -343,12 +360,19 @@ files:
|
|
|
343
360
|
- lib/pulse-meter/server/sensors.rb
|
|
344
361
|
- lib/pulse-meter/version.rb
|
|
345
362
|
- lib/pulse-meter/visualize/app.rb
|
|
346
|
-
- lib/pulse-meter/visualize/
|
|
363
|
+
- lib/pulse-meter/visualize/base.rb
|
|
364
|
+
- lib/pulse-meter/visualize/dsl/base.rb
|
|
347
365
|
- lib/pulse-meter/visualize/dsl/errors.rb
|
|
348
366
|
- lib/pulse-meter/visualize/dsl/layout.rb
|
|
349
367
|
- lib/pulse-meter/visualize/dsl/page.rb
|
|
350
368
|
- lib/pulse-meter/visualize/dsl/sensor.rb
|
|
351
369
|
- lib/pulse-meter/visualize/dsl/widget.rb
|
|
370
|
+
- lib/pulse-meter/visualize/dsl/widget_old.rb
|
|
371
|
+
- lib/pulse-meter/visualize/dsl/widgets/area.rb
|
|
372
|
+
- lib/pulse-meter/visualize/dsl/widgets/gauge.rb
|
|
373
|
+
- lib/pulse-meter/visualize/dsl/widgets/line.rb
|
|
374
|
+
- lib/pulse-meter/visualize/dsl/widgets/pie.rb
|
|
375
|
+
- lib/pulse-meter/visualize/dsl/widgets/table.rb
|
|
352
376
|
- lib/pulse-meter/visualize/layout.rb
|
|
353
377
|
- lib/pulse-meter/visualize/page.rb
|
|
354
378
|
- lib/pulse-meter/visualize/public/css/application.css
|
|
@@ -367,8 +391,31 @@ files:
|
|
|
367
391
|
- lib/pulse-meter/visualize/sensor.rb
|
|
368
392
|
- lib/pulse-meter/visualize/series_extractor.rb
|
|
369
393
|
- lib/pulse-meter/visualize/views/main.haml
|
|
394
|
+
- lib/pulse-meter/visualize/views/widgets/area.haml
|
|
395
|
+
- lib/pulse-meter/visualize/views/widgets/extend_options.haml
|
|
396
|
+
- lib/pulse-meter/visualize/views/widgets/gauge.haml
|
|
397
|
+
- lib/pulse-meter/visualize/views/widgets/line.haml
|
|
398
|
+
- lib/pulse-meter/visualize/views/widgets/pie.haml
|
|
399
|
+
- lib/pulse-meter/visualize/views/widgets/table.haml
|
|
370
400
|
- lib/pulse-meter/visualize/widget.rb
|
|
401
|
+
- lib/pulse-meter/visualize/widgets/gauge.rb
|
|
402
|
+
- lib/pulse-meter/visualize/widgets/pie.rb
|
|
403
|
+
- lib/pulse-meter/visualize/widgets/timeline.rb
|
|
371
404
|
- lib/pulse-meter/visualizer.rb
|
|
405
|
+
- perl/PulseMeter/Sensor/Base.pm
|
|
406
|
+
- perl/PulseMeter/Sensor/Counter.pm
|
|
407
|
+
- perl/PulseMeter/Sensor/HashedIndicator.pm
|
|
408
|
+
- perl/PulseMeter/Sensor/Indicator.pm
|
|
409
|
+
- perl/PulseMeter/Sensor/Timeline.pm
|
|
410
|
+
- perl/PulseMeter/Sensor/Timelined/Average.pm
|
|
411
|
+
- perl/PulseMeter/Sensor/Timelined/Counter.pm
|
|
412
|
+
- perl/PulseMeter/Sensor/Timelined/HashedCounter.pm
|
|
413
|
+
- perl/PulseMeter/Sensor/Timelined/Max.pm
|
|
414
|
+
- perl/PulseMeter/Sensor/Timelined/Median.pm
|
|
415
|
+
- perl/PulseMeter/Sensor/Timelined/Min.pm
|
|
416
|
+
- perl/PulseMeter/Sensor/Timelined/Percentile.pm
|
|
417
|
+
- perl/PulseMeter/Sensor/Timelined/UniqCounter.pm
|
|
418
|
+
- perl/PulseMeter/Sensor/UniqCounter.pm
|
|
372
419
|
- pulse-meter.gemspec
|
|
373
420
|
- spec/pulse_meter/mixins/dumper_spec.rb
|
|
374
421
|
- spec/pulse_meter/mixins/utils_spec.rb
|
|
@@ -376,6 +423,7 @@ files:
|
|
|
376
423
|
- spec/pulse_meter/sensor/configuration_spec.rb
|
|
377
424
|
- spec/pulse_meter/sensor/counter_spec.rb
|
|
378
425
|
- spec/pulse_meter/sensor/hashed_counter_spec.rb
|
|
426
|
+
- spec/pulse_meter/sensor/hashed_indicator_spec.rb
|
|
379
427
|
- spec/pulse_meter/sensor/indicator_spec.rb
|
|
380
428
|
- spec/pulse_meter/sensor/remote_spec.rb
|
|
381
429
|
- spec/pulse_meter/sensor/timeline_spec.rb
|
|
@@ -393,13 +441,23 @@ files:
|
|
|
393
441
|
- spec/pulse_meter/visualize/dsl/page_spec.rb
|
|
394
442
|
- spec/pulse_meter/visualize/dsl/sensor_spec.rb
|
|
395
443
|
- spec/pulse_meter/visualize/dsl/widget_spec.rb
|
|
444
|
+
- spec/pulse_meter/visualize/dsl/widgets/area_spec.rb
|
|
445
|
+
- spec/pulse_meter/visualize/dsl/widgets/gauge_spec.rb
|
|
446
|
+
- spec/pulse_meter/visualize/dsl/widgets/line_spec.rb
|
|
447
|
+
- spec/pulse_meter/visualize/dsl/widgets/pie_spec.rb
|
|
448
|
+
- spec/pulse_meter/visualize/dsl/widgets/table_spec.rb
|
|
396
449
|
- spec/pulse_meter/visualize/layout_spec.rb
|
|
397
450
|
- spec/pulse_meter/visualize/page_spec.rb
|
|
398
451
|
- spec/pulse_meter/visualize/sensor_spec.rb
|
|
399
452
|
- spec/pulse_meter/visualize/series_extractor_spec.rb
|
|
400
|
-
- spec/pulse_meter/visualize/
|
|
453
|
+
- spec/pulse_meter/visualize/widgets/area_spec.rb
|
|
454
|
+
- spec/pulse_meter/visualize/widgets/gauge_spec.rb
|
|
455
|
+
- spec/pulse_meter/visualize/widgets/line_spec.rb
|
|
456
|
+
- spec/pulse_meter/visualize/widgets/pie_spec.rb
|
|
457
|
+
- spec/pulse_meter/visualize/widgets/table_spec.rb
|
|
401
458
|
- spec/pulse_meter/visualizer_spec.rb
|
|
402
459
|
- spec/pulse_meter_spec.rb
|
|
460
|
+
- spec/shared_examples/dsl_widget.rb
|
|
403
461
|
- spec/shared_examples/timeline_sensor.rb
|
|
404
462
|
- spec/shared_examples/timelined_subclass.rb
|
|
405
463
|
- spec/spec_helper.rb
|
|
@@ -424,7 +482,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
424
482
|
version: '0'
|
|
425
483
|
segments:
|
|
426
484
|
- 0
|
|
427
|
-
hash:
|
|
485
|
+
hash: 3972958232601263142
|
|
428
486
|
requirements: []
|
|
429
487
|
rubyforge_project:
|
|
430
488
|
rubygems_version: 1.8.24
|
|
@@ -439,6 +497,7 @@ test_files:
|
|
|
439
497
|
- spec/pulse_meter/sensor/configuration_spec.rb
|
|
440
498
|
- spec/pulse_meter/sensor/counter_spec.rb
|
|
441
499
|
- spec/pulse_meter/sensor/hashed_counter_spec.rb
|
|
500
|
+
- spec/pulse_meter/sensor/hashed_indicator_spec.rb
|
|
442
501
|
- spec/pulse_meter/sensor/indicator_spec.rb
|
|
443
502
|
- spec/pulse_meter/sensor/remote_spec.rb
|
|
444
503
|
- spec/pulse_meter/sensor/timeline_spec.rb
|
|
@@ -456,13 +515,23 @@ test_files:
|
|
|
456
515
|
- spec/pulse_meter/visualize/dsl/page_spec.rb
|
|
457
516
|
- spec/pulse_meter/visualize/dsl/sensor_spec.rb
|
|
458
517
|
- spec/pulse_meter/visualize/dsl/widget_spec.rb
|
|
518
|
+
- spec/pulse_meter/visualize/dsl/widgets/area_spec.rb
|
|
519
|
+
- spec/pulse_meter/visualize/dsl/widgets/gauge_spec.rb
|
|
520
|
+
- spec/pulse_meter/visualize/dsl/widgets/line_spec.rb
|
|
521
|
+
- spec/pulse_meter/visualize/dsl/widgets/pie_spec.rb
|
|
522
|
+
- spec/pulse_meter/visualize/dsl/widgets/table_spec.rb
|
|
459
523
|
- spec/pulse_meter/visualize/layout_spec.rb
|
|
460
524
|
- spec/pulse_meter/visualize/page_spec.rb
|
|
461
525
|
- spec/pulse_meter/visualize/sensor_spec.rb
|
|
462
526
|
- spec/pulse_meter/visualize/series_extractor_spec.rb
|
|
463
|
-
- spec/pulse_meter/visualize/
|
|
527
|
+
- spec/pulse_meter/visualize/widgets/area_spec.rb
|
|
528
|
+
- spec/pulse_meter/visualize/widgets/gauge_spec.rb
|
|
529
|
+
- spec/pulse_meter/visualize/widgets/line_spec.rb
|
|
530
|
+
- spec/pulse_meter/visualize/widgets/pie_spec.rb
|
|
531
|
+
- spec/pulse_meter/visualize/widgets/table_spec.rb
|
|
464
532
|
- spec/pulse_meter/visualizer_spec.rb
|
|
465
533
|
- spec/pulse_meter_spec.rb
|
|
534
|
+
- spec/shared_examples/dsl_widget.rb
|
|
466
535
|
- spec/shared_examples/timeline_sensor.rb
|
|
467
536
|
- spec/shared_examples/timelined_subclass.rb
|
|
468
537
|
- spec/spec_helper.rb
|
|
File without changes
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
require "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe PulseMeter::Visualize::Widget do
|
|
4
|
-
let(:interval){ 100 }
|
|
5
|
-
let!(:a_sensor){ PulseMeter::Sensor::Timelined::Counter.new(:a_sensor, :ttl => 1000, :interval => interval, annotation: 'A') }
|
|
6
|
-
let!(:b_sensor){ PulseMeter::Sensor::Timelined::Counter.new(:b_sensor, :ttl => 1000, :interval => interval, annotation: 'B') }
|
|
7
|
-
|
|
8
|
-
let(:type) { :some_type }
|
|
9
|
-
let(:widget_name){ "some_widget" }
|
|
10
|
-
|
|
11
|
-
let(:redraw_interval){5}
|
|
12
|
-
let(:values_label){'xxxx'}
|
|
13
|
-
let(:width){6}
|
|
14
|
-
let(:show_last_point){false}
|
|
15
|
-
let(:timespan){interval * 2}
|
|
16
|
-
let(:a_color){'#FF0000'}
|
|
17
|
-
let(:b_color){'#FFFF00'}
|
|
18
|
-
|
|
19
|
-
let(:interval_start){ Time.at((Time.now.to_i / interval) * interval) }
|
|
20
|
-
|
|
21
|
-
def add_widget_settings(w)
|
|
22
|
-
w.redraw_interval redraw_interval
|
|
23
|
-
w.values_label values_label
|
|
24
|
-
w.width width
|
|
25
|
-
w.show_last_point show_last_point
|
|
26
|
-
w.timespan timespan
|
|
27
|
-
|
|
28
|
-
w.sensor :a_sensor, color: a_color
|
|
29
|
-
w.sensor :b_sensor, color: b_color
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
let(:widgets) do
|
|
33
|
-
[:line, :area, :pie].each_with_object({}) do |type, h|
|
|
34
|
-
w = PulseMeter::Visualize::DSL::Widget.new(type, widget_name)
|
|
35
|
-
add_widget_settings(w)
|
|
36
|
-
h[type] = w.to_widget
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
describe "#data" do
|
|
41
|
-
it "should contain type, title, interval, values_label, width, show_last_point attriutes" do
|
|
42
|
-
widgets.each do |k,w|
|
|
43
|
-
wdata = w.data
|
|
44
|
-
wdata[:type].should == k
|
|
45
|
-
wdata[:title].should == widget_name
|
|
46
|
-
wdata[:interval].should == redraw_interval
|
|
47
|
-
wdata[:values_title].should == values_label
|
|
48
|
-
wdata[:width].should == width
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
describe "series attribute" do
|
|
53
|
-
before(:each) do
|
|
54
|
-
Timecop.freeze(interval_start + 1) do
|
|
55
|
-
a_sensor.event(12)
|
|
56
|
-
b_sensor.event(33)
|
|
57
|
-
end
|
|
58
|
-
Timecop.freeze(interval_start + interval + 1) do
|
|
59
|
-
a_sensor.event(111)
|
|
60
|
-
end
|
|
61
|
-
@current_time = interval_start + 2 * interval - 1
|
|
62
|
-
|
|
63
|
-
end
|
|
64
|
-
context "pie widget" do
|
|
65
|
-
|
|
66
|
-
it "should contain valid pie series" do
|
|
67
|
-
|
|
68
|
-
Timecop.freeze(@current_time) do
|
|
69
|
-
widgets[:pie].data[:series].should ==
|
|
70
|
-
{
|
|
71
|
-
data: [
|
|
72
|
-
[a_sensor.annotation, 12],
|
|
73
|
-
[b_sensor.annotation, 33]
|
|
74
|
-
],
|
|
75
|
-
options: [
|
|
76
|
-
{color: a_color},
|
|
77
|
-
{color: b_color}
|
|
78
|
-
]
|
|
79
|
-
}
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
context "line, spline, area widgets" do
|
|
85
|
-
|
|
86
|
-
it "should contain valid series" do
|
|
87
|
-
|
|
88
|
-
Timecop.freeze(@current_time) do
|
|
89
|
-
|
|
90
|
-
[:line, :area].each do |type|
|
|
91
|
-
|
|
92
|
-
widget = widgets[type]
|
|
93
|
-
widget.data[:series].should ==
|
|
94
|
-
{
|
|
95
|
-
titles: [a_sensor.annotation, b_sensor.annotation],
|
|
96
|
-
rows: [[interval_start.to_i * 1000, 12, 33]],
|
|
97
|
-
options: [
|
|
98
|
-
{color: a_color},
|
|
99
|
-
{color: b_color}
|
|
100
|
-
]
|
|
101
|
-
}
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it "should accept custom timespan" do
|
|
107
|
-
Timecop.freeze(@current_time + interval) do
|
|
108
|
-
[:line, :area].each do |type|
|
|
109
|
-
widget = widgets[type]
|
|
110
|
-
widget.data(timespan: timespan)[:series][:rows].size.should == 1
|
|
111
|
-
widget.data(timespan: timespan + interval)[:series][:rows].size.should == 2
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
end
|
|
122
|
-
end
|