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.
Files changed (82) hide show
  1. data/.travis.yml +4 -0
  2. data/examples/basic.ru +23 -5
  3. data/examples/basic_sensor_data.rb +15 -2
  4. data/examples/full/server.ru +2 -3
  5. data/examples/minimal/server.ru +3 -2
  6. data/lib/pulse-meter/sensor.rb +2 -1
  7. data/lib/pulse-meter/sensor/configuration.rb +3 -1
  8. data/lib/pulse-meter/sensor/hashed_indicator.rb +22 -0
  9. data/lib/pulse-meter/sensor/timeline.rb +13 -1
  10. data/lib/pulse-meter/version.rb +1 -1
  11. data/lib/pulse-meter/visualize/app.rb +6 -2
  12. data/lib/pulse-meter/visualize/base.rb +15 -0
  13. data/lib/pulse-meter/visualize/dsl/base.rb +131 -0
  14. data/lib/pulse-meter/visualize/dsl/errors.rb +0 -6
  15. data/lib/pulse-meter/visualize/dsl/layout.rb +12 -41
  16. data/lib/pulse-meter/visualize/dsl/page.rb +15 -41
  17. data/lib/pulse-meter/visualize/dsl/sensor.rb +9 -10
  18. data/lib/pulse-meter/visualize/dsl/widget.rb +18 -65
  19. data/lib/pulse-meter/visualize/dsl/widget_old.rb +95 -0
  20. data/lib/pulse-meter/visualize/dsl/widgets/area.rb +20 -0
  21. data/lib/pulse-meter/visualize/dsl/widgets/gauge.rb +12 -0
  22. data/lib/pulse-meter/visualize/dsl/widgets/line.rb +21 -0
  23. data/lib/pulse-meter/visualize/dsl/widgets/pie.rb +16 -0
  24. data/lib/pulse-meter/visualize/dsl/widgets/table.rb +19 -0
  25. data/lib/pulse-meter/visualize/layout.rb +7 -16
  26. data/lib/pulse-meter/visualize/page.rb +5 -10
  27. data/lib/pulse-meter/visualize/public/favicon.ico +0 -0
  28. data/lib/pulse-meter/visualize/public/js/application.coffee +156 -107
  29. data/lib/pulse-meter/visualize/public/js/application.js +283 -122
  30. data/lib/pulse-meter/visualize/sensor.rb +7 -13
  31. data/lib/pulse-meter/visualize/views/main.haml +8 -52
  32. data/lib/pulse-meter/visualize/views/widgets/area.haml +31 -0
  33. data/lib/pulse-meter/visualize/views/widgets/extend_options.haml +11 -0
  34. data/lib/pulse-meter/visualize/views/widgets/gauge.haml +13 -0
  35. data/lib/pulse-meter/visualize/views/widgets/line.haml +31 -0
  36. data/lib/pulse-meter/visualize/views/widgets/pie.haml +13 -0
  37. data/lib/pulse-meter/visualize/views/widgets/table.haml +23 -0
  38. data/lib/pulse-meter/visualize/widget.rb +17 -87
  39. data/lib/pulse-meter/visualize/widgets/gauge.rb +47 -0
  40. data/lib/pulse-meter/visualize/widgets/pie.rb +36 -0
  41. data/lib/pulse-meter/visualize/widgets/timeline.rb +90 -0
  42. data/lib/pulse-meter/visualizer.rb +18 -8
  43. data/perl/PulseMeter/Sensor/Base.pm +42 -0
  44. data/perl/PulseMeter/Sensor/Counter.pm +19 -0
  45. data/perl/PulseMeter/Sensor/HashedIndicator.pm +12 -0
  46. data/perl/PulseMeter/Sensor/Indicator.pm +17 -0
  47. data/perl/PulseMeter/Sensor/Timeline.pm +51 -0
  48. data/perl/PulseMeter/Sensor/Timelined/Average.pm +13 -0
  49. data/perl/PulseMeter/Sensor/Timelined/Counter.pm +12 -0
  50. data/perl/PulseMeter/Sensor/Timelined/HashedCounter.pm +12 -0
  51. data/perl/PulseMeter/Sensor/Timelined/Max.pm +18 -0
  52. data/perl/PulseMeter/Sensor/Timelined/Median.pm +8 -0
  53. data/perl/PulseMeter/Sensor/Timelined/Min.pm +18 -0
  54. data/perl/PulseMeter/Sensor/Timelined/Percentile.pm +17 -0
  55. data/perl/PulseMeter/Sensor/Timelined/UniqCounter.pm +13 -0
  56. data/perl/PulseMeter/Sensor/UniqCounter.pm +12 -0
  57. data/pulse-meter.gemspec +1 -0
  58. data/spec/pulse_meter/sensor/configuration_spec.rb +10 -2
  59. data/spec/pulse_meter/sensor/hashed_indicator_spec.rb +39 -0
  60. data/spec/pulse_meter/visualize/dsl/layout_spec.rb +8 -8
  61. data/spec/pulse_meter/visualize/dsl/page_spec.rb +29 -42
  62. data/spec/pulse_meter/visualize/dsl/sensor_spec.rb +5 -5
  63. data/spec/pulse_meter/visualize/dsl/widget_spec.rb +1 -122
  64. data/spec/pulse_meter/visualize/dsl/widgets/area_spec.rb +44 -0
  65. data/spec/pulse_meter/visualize/dsl/widgets/gauge_spec.rb +22 -0
  66. data/spec/pulse_meter/visualize/dsl/widgets/line_spec.rb +44 -0
  67. data/spec/pulse_meter/visualize/dsl/widgets/pie_spec.rb +35 -0
  68. data/spec/pulse_meter/visualize/dsl/widgets/table_spec.rb +36 -0
  69. data/spec/pulse_meter/visualize/layout_spec.rb +3 -3
  70. data/spec/pulse_meter/visualize/page_spec.rb +2 -2
  71. data/spec/pulse_meter/visualize/sensor_spec.rb +4 -4
  72. data/spec/pulse_meter/visualize/series_extractor_spec.rb +3 -3
  73. data/spec/pulse_meter/visualize/widgets/area_spec.rb +78 -0
  74. data/spec/pulse_meter/visualize/widgets/gauge_spec.rb +63 -0
  75. data/spec/pulse_meter/visualize/widgets/line_spec.rb +77 -0
  76. data/spec/pulse_meter/visualize/widgets/pie_spec.rb +73 -0
  77. data/spec/pulse_meter/visualize/widgets/table_spec.rb +78 -0
  78. data/spec/shared_examples/dsl_widget.rb +106 -0
  79. data/spec/shared_examples/timeline_sensor.rb +32 -2
  80. metadata +75 -6
  81. data/lib/pulse-meter/visualize/dsl.rb +0 -0
  82. 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(key) }
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.1
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-22 00:00:00.000000000 Z
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/dsl.rb
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/widget_spec.rb
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: -872514711759576933
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/widget_spec.rb
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