pulse-meter 0.4.9 → 0.4.11
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -48
- data/lib/pulse-meter.rb +1 -68
- data/lib/pulse-meter/visualizer.rb +1 -40
- data/pulse-meter.gemspec +4 -26
- metadata +10 -558
- data/Procfile +0 -3
- data/bin/pulse +0 -6
- data/examples/basic.ru +0 -145
- data/examples/basic_sensor_data.rb +0 -96
- data/examples/udp_benchmark.rb +0 -29
- data/lib/cmd.rb +0 -171
- data/lib/pulse-meter/command_aggregator/async.rb +0 -83
- data/lib/pulse-meter/command_aggregator/sync.rb +0 -18
- data/lib/pulse-meter/command_aggregator/udp.rb +0 -48
- data/lib/pulse-meter/extensions/enumerable.rb +0 -24
- data/lib/pulse-meter/mixins/cmd.rb +0 -46
- data/lib/pulse-meter/mixins/dumper.rb +0 -87
- data/lib/pulse-meter/mixins/utils.rb +0 -155
- data/lib/pulse-meter/observer.rb +0 -120
- data/lib/pulse-meter/observer/extended.rb +0 -34
- data/lib/pulse-meter/sensor.rb +0 -61
- data/lib/pulse-meter/sensor/base.rb +0 -88
- data/lib/pulse-meter/sensor/configuration.rb +0 -106
- data/lib/pulse-meter/sensor/counter.rb +0 -39
- data/lib/pulse-meter/sensor/hashed_counter.rb +0 -36
- data/lib/pulse-meter/sensor/hashed_indicator.rb +0 -24
- data/lib/pulse-meter/sensor/indicator.rb +0 -35
- data/lib/pulse-meter/sensor/multi.rb +0 -97
- data/lib/pulse-meter/sensor/timeline.rb +0 -236
- data/lib/pulse-meter/sensor/timeline_reduce.rb +0 -68
- data/lib/pulse-meter/sensor/timelined/average.rb +0 -32
- data/lib/pulse-meter/sensor/timelined/counter.rb +0 -23
- data/lib/pulse-meter/sensor/timelined/hashed_counter.rb +0 -31
- data/lib/pulse-meter/sensor/timelined/hashed_indicator.rb +0 -30
- data/lib/pulse-meter/sensor/timelined/indicator.rb +0 -23
- data/lib/pulse-meter/sensor/timelined/max.rb +0 -19
- data/lib/pulse-meter/sensor/timelined/median.rb +0 -14
- data/lib/pulse-meter/sensor/timelined/min.rb +0 -19
- data/lib/pulse-meter/sensor/timelined/multi_percentile.rb +0 -34
- data/lib/pulse-meter/sensor/timelined/percentile.rb +0 -22
- data/lib/pulse-meter/sensor/timelined/uniq_counter.rb +0 -22
- data/lib/pulse-meter/sensor/timelined/zset_based.rb +0 -38
- data/lib/pulse-meter/sensor/uniq_counter.rb +0 -24
- data/lib/pulse-meter/server.rb +0 -0
- data/lib/pulse-meter/server/command_line_options.rb +0 -0
- data/lib/pulse-meter/server/config_options.rb +0 -0
- data/lib/pulse-meter/server/sensors.rb +0 -0
- data/lib/pulse-meter/udp_server.rb +0 -45
- data/lib/pulse-meter/version.rb +0 -3
- data/lib/pulse-meter/visualize/app.rb +0 -78
- data/lib/pulse-meter/visualize/base.rb +0 -15
- data/lib/pulse-meter/visualize/coffee/application.coffee +0 -40
- data/lib/pulse-meter/visualize/coffee/collections/page_info_list.coffee +0 -17
- data/lib/pulse-meter/visualize/coffee/collections/sensor_info_list.coffee +0 -4
- data/lib/pulse-meter/visualize/coffee/collections/widget_list.coffee +0 -14
- data/lib/pulse-meter/visualize/coffee/extensions.coffee +0 -26
- data/lib/pulse-meter/visualize/coffee/models/dinamic_widget.coffee +0 -34
- data/lib/pulse-meter/visualize/coffee/models/page_info.coffee +0 -2
- data/lib/pulse-meter/visualize/coffee/models/sensor_info.coffee +0 -2
- data/lib/pulse-meter/visualize/coffee/models/widget.coffee +0 -54
- data/lib/pulse-meter/visualize/coffee/presenters/area.coffee +0 -2
- data/lib/pulse-meter/visualize/coffee/presenters/gauge.coffee +0 -11
- data/lib/pulse-meter/visualize/coffee/presenters/line.coffee +0 -2
- data/lib/pulse-meter/visualize/coffee/presenters/pie.coffee +0 -20
- data/lib/pulse-meter/visualize/coffee/presenters/series.coffee +0 -44
- data/lib/pulse-meter/visualize/coffee/presenters/table.coffee +0 -10
- data/lib/pulse-meter/visualize/coffee/presenters/timeline.coffee +0 -13
- data/lib/pulse-meter/visualize/coffee/presenters/widget.coffee +0 -65
- data/lib/pulse-meter/visualize/coffee/router.coffee +0 -21
- data/lib/pulse-meter/visualize/coffee/views/dynamic_chart.coffee +0 -91
- data/lib/pulse-meter/visualize/coffee/views/dynamic_widget.coffee +0 -58
- data/lib/pulse-meter/visualize/coffee/views/page_title.coffee +0 -17
- data/lib/pulse-meter/visualize/coffee/views/page_titles.coffee +0 -15
- data/lib/pulse-meter/visualize/coffee/views/sensor_info_list.coffee +0 -19
- data/lib/pulse-meter/visualize/coffee/views/widget.coffee +0 -99
- data/lib/pulse-meter/visualize/coffee/views/widget_chart.coffee +0 -13
- data/lib/pulse-meter/visualize/coffee/views/widget_list.coffee +0 -15
- data/lib/pulse-meter/visualize/dsl/base.rb +0 -131
- data/lib/pulse-meter/visualize/dsl/errors.rb +0 -40
- data/lib/pulse-meter/visualize/dsl/layout.rb +0 -27
- data/lib/pulse-meter/visualize/dsl/page.rb +0 -33
- data/lib/pulse-meter/visualize/dsl/sensor.rb +0 -20
- data/lib/pulse-meter/visualize/dsl/widget.rb +0 -37
- data/lib/pulse-meter/visualize/dsl/widgets/area.rb +0 -20
- data/lib/pulse-meter/visualize/dsl/widgets/gauge.rb +0 -12
- data/lib/pulse-meter/visualize/dsl/widgets/line.rb +0 -21
- data/lib/pulse-meter/visualize/dsl/widgets/pie.rb +0 -16
- data/lib/pulse-meter/visualize/dsl/widgets/table.rb +0 -19
- data/lib/pulse-meter/visualize/layout.rb +0 -79
- data/lib/pulse-meter/visualize/page.rb +0 -25
- data/lib/pulse-meter/visualize/public/css/application.css +0 -56
- data/lib/pulse-meter/visualize/public/css/bootstrap.css +0 -4883
- data/lib/pulse-meter/visualize/public/css/bootstrap.min.css +0 -729
- data/lib/pulse-meter/visualize/public/css/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/lib/pulse-meter/visualize/public/css/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/lib/pulse-meter/visualize/public/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/lib/pulse-meter/visualize/public/css/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/lib/pulse-meter/visualize/public/css/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/lib/pulse-meter/visualize/public/css/images/ui-bg_glass_75_ffffff_1x400.png +0 -0
- data/lib/pulse-meter/visualize/public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/lib/pulse-meter/visualize/public/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png +0 -0
- data/lib/pulse-meter/visualize/public/css/images/ui-icons_222222_256x240.png +0 -0
- data/lib/pulse-meter/visualize/public/css/images/ui-icons_2e83ff_256x240.png +0 -0
- data/lib/pulse-meter/visualize/public/css/images/ui-icons_454545_256x240.png +0 -0
- data/lib/pulse-meter/visualize/public/css/images/ui-icons_888888_256x240.png +0 -0
- data/lib/pulse-meter/visualize/public/css/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/lib/pulse-meter/visualize/public/css/images/ui-icons_f6cf3b_256x240.png +0 -0
- data/lib/pulse-meter/visualize/public/css/jquery-ui-1.8.16.bootstrap.css +0 -1320
- data/lib/pulse-meter/visualize/public/favicon.ico +0 -208
- data/lib/pulse-meter/visualize/public/img/glyphicons-halflings-white.png +0 -0
- data/lib/pulse-meter/visualize/public/img/glyphicons-halflings.png +0 -0
- data/lib/pulse-meter/visualize/public/js/application.js +0 -973
- data/lib/pulse-meter/visualize/public/js/backbone-min.js +0 -38
- data/lib/pulse-meter/visualize/public/js/bootstrap.js +0 -1835
- data/lib/pulse-meter/visualize/public/js/jquery-1.7.2.min.js +0 -4
- data/lib/pulse-meter/visualize/public/js/jquery-ui-1.8.16.bootstrap.min.js +0 -791
- data/lib/pulse-meter/visualize/public/js/jquery-ui-1.8.23.custom.min.js +0 -21
- data/lib/pulse-meter/visualize/public/js/jquery-ui-timepicker-addon.js +0 -1687
- data/lib/pulse-meter/visualize/public/js/json2.js +0 -487
- data/lib/pulse-meter/visualize/public/js/underscore-min.js +0 -32
- data/lib/pulse-meter/visualize/sensor.rb +0 -63
- data/lib/pulse-meter/visualize/series_extractor.rb +0 -107
- data/lib/pulse-meter/visualize/views/main.haml +0 -30
- data/lib/pulse-meter/visualize/views/sensors.haml +0 -76
- data/lib/pulse-meter/visualize/views/widgets/area.haml +0 -53
- data/lib/pulse-meter/visualize/views/widgets/extend_options.haml +0 -11
- data/lib/pulse-meter/visualize/views/widgets/gauge.haml +0 -13
- data/lib/pulse-meter/visualize/views/widgets/line.haml +0 -54
- data/lib/pulse-meter/visualize/views/widgets/pie.haml +0 -13
- data/lib/pulse-meter/visualize/views/widgets/table.haml +0 -45
- data/lib/pulse-meter/visualize/widget.rb +0 -38
- data/lib/pulse-meter/visualize/widgets/gauge.rb +0 -47
- data/lib/pulse-meter/visualize/widgets/pie.rb +0 -36
- data/lib/pulse-meter/visualize/widgets/timeline.rb +0 -114
- data/spec/pulse_meter/command_aggregator/async_spec.rb +0 -53
- data/spec/pulse_meter/command_aggregator/sync_spec.rb +0 -25
- data/spec/pulse_meter/command_aggregator/udp_spec.rb +0 -45
- data/spec/pulse_meter/extensions/enumerable_spec.rb +0 -58
- data/spec/pulse_meter/mixins/cmd_spec.rb +0 -117
- data/spec/pulse_meter/mixins/dumper_spec.rb +0 -162
- data/spec/pulse_meter/mixins/utils_spec.rb +0 -212
- data/spec/pulse_meter/observer/extended_spec.rb +0 -92
- data/spec/pulse_meter/observer_spec.rb +0 -207
- data/spec/pulse_meter/sensor/base_spec.rb +0 -106
- data/spec/pulse_meter/sensor/configuration_spec.rb +0 -103
- data/spec/pulse_meter/sensor/counter_spec.rb +0 -54
- data/spec/pulse_meter/sensor/hashed_counter_spec.rb +0 -43
- data/spec/pulse_meter/sensor/hashed_indicator_spec.rb +0 -39
- data/spec/pulse_meter/sensor/indicator_spec.rb +0 -43
- data/spec/pulse_meter/sensor/multi_spec.rb +0 -137
- data/spec/pulse_meter/sensor/timeline_spec.rb +0 -88
- data/spec/pulse_meter/sensor/timelined/average_spec.rb +0 -6
- data/spec/pulse_meter/sensor/timelined/counter_spec.rb +0 -6
- data/spec/pulse_meter/sensor/timelined/hashed_counter_spec.rb +0 -8
- data/spec/pulse_meter/sensor/timelined/hashed_indicator_spec.rb +0 -8
- data/spec/pulse_meter/sensor/timelined/indicator_spec.rb +0 -6
- data/spec/pulse_meter/sensor/timelined/max_spec.rb +0 -7
- data/spec/pulse_meter/sensor/timelined/median_spec.rb +0 -7
- data/spec/pulse_meter/sensor/timelined/min_spec.rb +0 -7
- data/spec/pulse_meter/sensor/timelined/multi_percentile_spec.rb +0 -21
- data/spec/pulse_meter/sensor/timelined/percentile_spec.rb +0 -17
- data/spec/pulse_meter/sensor/timelined/uniq_counter_spec.rb +0 -9
- data/spec/pulse_meter/sensor/uniq_counter_spec.rb +0 -28
- data/spec/pulse_meter/udp_server_spec.rb +0 -36
- data/spec/pulse_meter/visualize/app_spec.rb +0 -27
- data/spec/pulse_meter/visualize/dsl/layout_spec.rb +0 -64
- data/spec/pulse_meter/visualize/dsl/page_spec.rb +0 -62
- data/spec/pulse_meter/visualize/dsl/sensor_spec.rb +0 -30
- data/spec/pulse_meter/visualize/dsl/widget_spec.rb +0 -6
- data/spec/pulse_meter/visualize/dsl/widgets/area_spec.rb +0 -44
- data/spec/pulse_meter/visualize/dsl/widgets/gauge_spec.rb +0 -22
- data/spec/pulse_meter/visualize/dsl/widgets/line_spec.rb +0 -44
- data/spec/pulse_meter/visualize/dsl/widgets/pie_spec.rb +0 -35
- data/spec/pulse_meter/visualize/dsl/widgets/table_spec.rb +0 -36
- data/spec/pulse_meter/visualize/layout_spec.rb +0 -54
- data/spec/pulse_meter/visualize/page_spec.rb +0 -153
- data/spec/pulse_meter/visualize/sensor_spec.rb +0 -120
- data/spec/pulse_meter/visualize/series_extractor_spec.rb +0 -80
- data/spec/pulse_meter/visualize/widgets/area_spec.rb +0 -6
- data/spec/pulse_meter/visualize/widgets/gauge_spec.rb +0 -63
- data/spec/pulse_meter/visualize/widgets/line_spec.rb +0 -6
- data/spec/pulse_meter/visualize/widgets/pie_spec.rb +0 -73
- data/spec/pulse_meter/visualize/widgets/table_spec.rb +0 -6
- data/spec/pulse_meter/visualizer_spec.rb +0 -42
- data/spec/pulse_meter_spec.rb +0 -73
- data/spec/shared_examples/dsl_widget.rb +0 -106
- data/spec/shared_examples/timeline_sensor.rb +0 -439
- data/spec/shared_examples/timelined_subclass.rb +0 -23
- data/spec/shared_examples/widget.rb +0 -97
- data/spec/spec_helper.rb +0 -40
- data/spec/support/matchers.rb +0 -34
- data/spec/support/observered.rb +0 -40
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe PulseMeter::Visualize::DSL::Widgets::Pie do
|
4
|
-
it_should_behave_like "dsl widget"
|
5
|
-
|
6
|
-
let(:interval){ 100 }
|
7
|
-
let(:name) { "some_sensor" }
|
8
|
-
let!(:sensor){ PulseMeter::Sensor::Timelined::Max.new(name, :ttl => 1000, :interval => interval) }
|
9
|
-
|
10
|
-
let(:widget_name){ "some_widget" }
|
11
|
-
let(:w){ described_class.new(widget_name) }
|
12
|
-
|
13
|
-
describe "#to_data" do
|
14
|
-
it "should produce PulseMeter::Visualize::Widgets::Pie class" do
|
15
|
-
w.to_data.should be_kind_of(PulseMeter::Visualize::Widgets::Pie)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe "#values_label" do
|
20
|
-
it "should set values_label" do
|
21
|
-
w.values_label "some y-axis legend"
|
22
|
-
w.to_data.values_label.should == "some y-axis legend"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "#show_last_point" do
|
27
|
-
it "should set show_last_point" do
|
28
|
-
w.show_last_point true
|
29
|
-
w.to_data.show_last_point.should be_true
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe PulseMeter::Visualize::DSL::Widgets::Table do
|
4
|
-
it_should_behave_like "dsl widget"
|
5
|
-
|
6
|
-
let(:interval){ 100 }
|
7
|
-
let(:name) { "some_sensor" }
|
8
|
-
let!(:sensor){ PulseMeter::Sensor::Timelined::Max.new(name, :ttl => 1000, :interval => interval) }
|
9
|
-
|
10
|
-
let(:widget_name){ "some_widget" }
|
11
|
-
let(:w){ described_class.new(widget_name) }
|
12
|
-
|
13
|
-
describe "#to_data" do
|
14
|
-
it "should produce PulseMeter::Visualize::Widgets::Area class" do
|
15
|
-
w.to_data.should be_kind_of(PulseMeter::Visualize::Widgets::Table)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe "#show_last_point" do
|
20
|
-
it "should set show_last_point" do
|
21
|
-
w.show_last_point true
|
22
|
-
w.to_data.show_last_point.should be_true
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "#timespan" do
|
27
|
-
it "should set timespan" do
|
28
|
-
w.timespan 5
|
29
|
-
w.to_data.timespan.should == 5
|
30
|
-
end
|
31
|
-
it "should raise exception if timespan is negative" do
|
32
|
-
expect{ w.timespan(-1) }.to raise_exception(PulseMeter::Visualize::DSL::BadWidgetTimeSpan)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe PulseMeter::Visualize::Layout do
|
4
|
-
let(:layout) do
|
5
|
-
l = PulseMeter::Visualize::DSL::Layout.new
|
6
|
-
l.page "page1" do |p|
|
7
|
-
p.line "w1"
|
8
|
-
p.line "w2"
|
9
|
-
p.gchart_options({a: 1})
|
10
|
-
end
|
11
|
-
l.page "page2" do |p|
|
12
|
-
p.line "w3"
|
13
|
-
p.line "w4"
|
14
|
-
end
|
15
|
-
l.to_data
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "#page_infos" do
|
19
|
-
it "should return list of page infos with ids" do
|
20
|
-
layout.page_infos.should == [
|
21
|
-
{title: "page1", id: 1, gchart_options: {a: 1}},
|
22
|
-
{title: "page2", id: 2, gchart_options: {}}
|
23
|
-
]
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "#options" do
|
28
|
-
it "should return layout options" do
|
29
|
-
ldsl = PulseMeter::Visualize::DSL::Layout.new
|
30
|
-
ldsl.use_utc true
|
31
|
-
ldsl.gchart_options({a: 1})
|
32
|
-
l = ldsl.to_data
|
33
|
-
l.options.should == {use_utc: true, gchart_options: {a: 1}}
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "#widget" do
|
38
|
-
it "should return data for correct widget" do
|
39
|
-
w = layout.widget(1, 0)
|
40
|
-
w.should include(id: 1, title: "w3")
|
41
|
-
w = layout.widget(0, 1, timespan: 123)
|
42
|
-
w.should include(id: 2, title: "w2")
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
describe "#widgets" do
|
47
|
-
it "should return data for correct widgets of a page" do
|
48
|
-
datas = layout.widgets(1)
|
49
|
-
datas[0].should include(id: 1, title: "w3")
|
50
|
-
datas[1].should include(id: 2, title: "w4")
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
@@ -1,153 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe PulseMeter::Visualize::Page 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
|
-
let(:page_title){"Dashboard"}
|
21
|
-
|
22
|
-
|
23
|
-
let(:page) do
|
24
|
-
p = PulseMeter::Visualize::DSL::Page.new(page_title)
|
25
|
-
p.pie(widget_name) do |w|
|
26
|
-
w.redraw_interval redraw_interval
|
27
|
-
w.values_label values_label
|
28
|
-
w.width width
|
29
|
-
w.show_last_point show_last_point
|
30
|
-
w.timespan timespan
|
31
|
-
|
32
|
-
w.sensor :a_sensor, color: a_color
|
33
|
-
w.sensor :b_sensor, color: b_color
|
34
|
-
end
|
35
|
-
p.line(widget_name) do |w|
|
36
|
-
w.redraw_interval redraw_interval
|
37
|
-
w.values_label values_label
|
38
|
-
w.width width
|
39
|
-
w.show_last_point show_last_point
|
40
|
-
w.timespan timespan
|
41
|
-
|
42
|
-
w.sensor :a_sensor, color: a_color
|
43
|
-
w.sensor :b_sensor, color: b_color
|
44
|
-
end
|
45
|
-
p.to_data
|
46
|
-
end
|
47
|
-
|
48
|
-
before(:each) do
|
49
|
-
Timecop.freeze(interval_start + 1) do
|
50
|
-
a_sensor.event(12)
|
51
|
-
b_sensor.event(33)
|
52
|
-
end
|
53
|
-
Timecop.freeze(interval_start + interval + 1) do
|
54
|
-
a_sensor.event(111)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe "#widget_data" do
|
59
|
-
|
60
|
-
it "should generate correct data of single widget" do
|
61
|
-
Timecop.freeze(interval_start + 2 * interval - 1) do
|
62
|
-
page.widget_data(0)[:id].should == 1
|
63
|
-
page.widget_data(1)[:id].should == 2
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
it "should generate correct data of single widget" do
|
68
|
-
Timecop.freeze(interval_start + 2 * interval - 1) do
|
69
|
-
page.widget_data(0)[: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
|
-
page.widget_data(1)[:series].should ==
|
81
|
-
{
|
82
|
-
titles: [a_sensor.annotation, b_sensor.annotation],
|
83
|
-
rows: [[interval_start.to_i * 1000, 12, 33]],
|
84
|
-
options: [
|
85
|
-
{color: a_color},
|
86
|
-
{color: b_color}
|
87
|
-
]
|
88
|
-
}
|
89
|
-
end
|
90
|
-
|
91
|
-
Timecop.freeze(interval_start + 2 * interval - 1) do
|
92
|
-
page.widget_data(0, timespan: 0)[:series].should ==
|
93
|
-
{
|
94
|
-
data: [
|
95
|
-
[a_sensor.annotation, 12],
|
96
|
-
[b_sensor.annotation, 33]
|
97
|
-
],
|
98
|
-
options: [
|
99
|
-
{color: a_color},
|
100
|
-
{color: b_color}
|
101
|
-
]
|
102
|
-
}
|
103
|
-
page.widget_data(1, timespan: 1)[:series].should ==
|
104
|
-
{
|
105
|
-
titles: [a_sensor.annotation, b_sensor.annotation],
|
106
|
-
rows: [],
|
107
|
-
options: [
|
108
|
-
{color: a_color},
|
109
|
-
{color: b_color}
|
110
|
-
]
|
111
|
-
}
|
112
|
-
|
113
|
-
end
|
114
|
-
|
115
|
-
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
describe "#widget_datas" do
|
120
|
-
it "should generate correct ids for all widgets" do
|
121
|
-
Timecop.freeze(interval_start + 2 * interval - 1) do
|
122
|
-
page.widget_datas.map{|h| h[:id]}.should == [1,2]
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
it "should generate correct series data of all widgets" do
|
127
|
-
Timecop.freeze(interval_start + 2 * interval - 1) do
|
128
|
-
|
129
|
-
page.widget_datas.map{|h| h[:series]}.should == [
|
130
|
-
{
|
131
|
-
data: [
|
132
|
-
[a_sensor.annotation, 12],
|
133
|
-
[b_sensor.annotation, 33]
|
134
|
-
],
|
135
|
-
options: [
|
136
|
-
{color: a_color},
|
137
|
-
{color: b_color}
|
138
|
-
]
|
139
|
-
},
|
140
|
-
{
|
141
|
-
titles: [a_sensor.annotation, b_sensor.annotation],
|
142
|
-
rows: [[interval_start.to_i * 1000, 12, 33]],
|
143
|
-
options: [
|
144
|
-
{color: a_color},
|
145
|
-
{color: b_color}
|
146
|
-
]
|
147
|
-
}
|
148
|
-
]
|
149
|
-
end
|
150
|
-
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
@@ -1,120 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe PulseMeter::Visualize::Sensor do
|
4
|
-
let(:interval){ 100 }
|
5
|
-
let(:name) { "some_sensor" }
|
6
|
-
let(:annotation) { 'sensor descr' }
|
7
|
-
let!(:real_sensor){ PulseMeter::Sensor::Timelined::Counter.new(name, ttl: 1000, interval: interval, annotation: annotation) }
|
8
|
-
let(:sensor) { described_class.new(name: name) }
|
9
|
-
|
10
|
-
let(:color){ '#ABCDEF' }
|
11
|
-
let(:sensor_with_color) { described_class.new(name: name, color: color) }
|
12
|
-
|
13
|
-
let(:bad_sensor) { described_class.new(name: "bad_sensor_name") }
|
14
|
-
let(:interval_start){ Time.at((Time.now.to_i / interval) * interval) }
|
15
|
-
|
16
|
-
describe '#last_value' do
|
17
|
-
context "when sensor does not exist" do
|
18
|
-
it "should raise RestoreError" do
|
19
|
-
expect{ bad_sensor.last_value(Time.now) }.to raise_exception(PulseMeter::RestoreError)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
context "when sensor has no data" do
|
25
|
-
it "should return nil" do
|
26
|
-
sensor.last_value(Time.now).should be_nil
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context "when sensor has data" do
|
31
|
-
context "when need_incomplete arg is true" do
|
32
|
-
it "should return last value" do
|
33
|
-
Timecop.freeze(interval_start) do
|
34
|
-
real_sensor.event(101)
|
35
|
-
end
|
36
|
-
Timecop.freeze(interval_start+1) do
|
37
|
-
sensor.last_value(Time.now, true).should == 101
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
context "when need_incomplete arg is false" do
|
43
|
-
it "should return last complete value" do
|
44
|
-
Timecop.freeze(interval_start) do
|
45
|
-
real_sensor.event(101)
|
46
|
-
end
|
47
|
-
Timecop.freeze(interval_start + 1) do
|
48
|
-
sensor.last_value(Time.now).should be_nil
|
49
|
-
end
|
50
|
-
Timecop.freeze(interval_start + interval + 1) do
|
51
|
-
sensor.last_value(Time.now).should == 101
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe "#last_point_data" do
|
60
|
-
|
61
|
-
context "when sensor does not exist" do
|
62
|
-
it "should raise RestoreError" do
|
63
|
-
expect{ bad_sensor.last_point_data(Time.now) }.to raise_exception(PulseMeter::RestoreError)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
it "should return last value with annotation (and color)" do
|
68
|
-
Timecop.freeze(interval_start) do
|
69
|
-
real_sensor.event(101)
|
70
|
-
end
|
71
|
-
Timecop.freeze(interval_start + 1) do
|
72
|
-
sensor.last_point_data(Time.now, true).should == [{name: annotation, y: 101}]
|
73
|
-
sensor.last_point_data(Time.now).should == [{name: annotation, y: nil}]
|
74
|
-
sensor_with_color.last_point_data(Time.now, true).should == [{name: annotation, y: 101, color: color}]
|
75
|
-
sensor_with_color.last_point_data(Time.now).should == [{name: annotation, y: nil, color: color}]
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe "#timeline_data" do
|
81
|
-
before(:each) do
|
82
|
-
Timecop.freeze(interval_start) do
|
83
|
-
real_sensor.event(101)
|
84
|
-
end
|
85
|
-
Timecop.freeze(interval_start + interval) do
|
86
|
-
real_sensor.event(55)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
context "when sensor does not exist" do
|
91
|
-
it "should raise RestoreError" do
|
92
|
-
expect{ bad_sensor.timeline_data(Time.now - interval, Time.now) }.to raise_exception(PulseMeter::RestoreError)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
|
97
|
-
describe "returned value" do
|
98
|
-
it "should contain sensor annotation" do
|
99
|
-
Timecop.freeze(interval_start + interval + 1) do
|
100
|
-
sensor.timeline_data(Time.now - interval, Time.now).first[:name].should == annotation
|
101
|
-
end
|
102
|
-
end
|
103
|
-
it "should contain sensor color" do
|
104
|
-
Timecop.freeze(interval_start + interval + 1) do
|
105
|
-
sensor_with_color.timeline_data(Time.now - interval, Time.now).first[:color].should == color
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
it "should contain [interval_start, value] pairs for each interval" do
|
110
|
-
Timecop.freeze(interval_start + interval + 1) do
|
111
|
-
data = sensor.timeline_data(Time.now - interval * 2, Time.now)
|
112
|
-
data.first[:data].should == [{x: interval_start.to_i * 1000, y: 101}]
|
113
|
-
data = sensor.timeline_data(Time.now - interval * 2, Time.now, true)
|
114
|
-
data.first[:data].should == [{x: interval_start.to_i * 1000, y: 101}, {x: (interval_start + interval).to_i * 1000, y: 55}]
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe PulseMeter::Visualize::SeriesExtractor do
|
4
|
-
let(:interval){ 100 }
|
5
|
-
let!(:real_simple_sensor){ PulseMeter::Sensor::Timelined::Counter.new(:simple_sensor,
|
6
|
-
ttl: 1000,
|
7
|
-
interval: interval,
|
8
|
-
annotation: 'simple sensor'
|
9
|
-
) }
|
10
|
-
let!(:real_hashed_sensor){ PulseMeter::Sensor::Timelined::HashedCounter.new(:hashed_sensor,
|
11
|
-
ttl: 1000,
|
12
|
-
interval: interval,
|
13
|
-
annotation: 'hashed sensor'
|
14
|
-
) }
|
15
|
-
|
16
|
-
let!(:simple_sensor){PulseMeter::Visualize::Sensor.new(name: :simple_sensor)}
|
17
|
-
let!(:hashed_sensor){PulseMeter::Visualize::Sensor.new(name: :hashed_sensor)}
|
18
|
-
|
19
|
-
describe "simple extractor" do
|
20
|
-
|
21
|
-
let(:extractor) {PulseMeter::Visualize.extractor(simple_sensor)}
|
22
|
-
|
23
|
-
it "should be created for simple sensors" do
|
24
|
-
extractor.should be_kind_of(PulseMeter::Visualize::SeriesExtractor::Simple)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should create point data correctly" do
|
28
|
-
extractor.point_data(123).should == [{y: 123, name: 'simple sensor'}]
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should create timeline data correctly" do
|
32
|
-
tl_data = [
|
33
|
-
PulseMeter::SensorData.new(Time.at(1), 11),
|
34
|
-
PulseMeter::SensorData.new(Time.at(2), "22")
|
35
|
-
]
|
36
|
-
extractor.series_data(tl_data).should == [{
|
37
|
-
name: 'simple sensor',
|
38
|
-
data: [{x: 1000, y: 11}, {x: 2000, y: 22}]
|
39
|
-
}]
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "hash extractor" do
|
45
|
-
let(:extractor) {PulseMeter::Visualize.extractor(hashed_sensor)}
|
46
|
-
|
47
|
-
it "should be created for hash sensors" do
|
48
|
-
extractor.should be_kind_of(PulseMeter::Visualize::SeriesExtractor::Hashed)
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should create point data correctly" do
|
52
|
-
extractor.point_data('{"x": 123, "y": 321}').should == [
|
53
|
-
{y: 123, name: 'hashed sensor: x'},
|
54
|
-
{y: 321, name: 'hashed sensor: y'}
|
55
|
-
]
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should create timeline data correctly" do
|
59
|
-
tl_data = [
|
60
|
-
PulseMeter::SensorData.new(Time.at(1), {"a" => 5, "b" => 6}),
|
61
|
-
PulseMeter::SensorData.new(Time.at(2), '{"c": 7, "b": 6}')
|
62
|
-
]
|
63
|
-
extractor.series_data(tl_data).should == [
|
64
|
-
{
|
65
|
-
name: 'hashed sensor: a',
|
66
|
-
data: [{x: 1000, y: 5}, {x: 2000, y: nil}]
|
67
|
-
},
|
68
|
-
{
|
69
|
-
name: 'hashed sensor: b',
|
70
|
-
data: [{x: 1000, y: 6}, {x: 2000, y: 6}]
|
71
|
-
},
|
72
|
-
{
|
73
|
-
name: 'hashed sensor: c',
|
74
|
-
data: [{x: 1000, y: nil}, {x: 2000, y: 7}]
|
75
|
-
}
|
76
|
-
]
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|