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
|
@@ -1,57 +1,31 @@
|
|
|
1
1
|
module PulseMeter
|
|
2
2
|
module Visualize
|
|
3
3
|
module DSL
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
class Page < Base
|
|
5
|
+
self.data_class = PulseMeter::Visualize::Page
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
@widgets = []
|
|
11
|
-
@gchart_options = DEFAULT_GCHART_OPTIONS.dup
|
|
7
|
+
def initialize(title = '')
|
|
8
|
+
super()
|
|
9
|
+
self.title(title)
|
|
12
10
|
end
|
|
13
11
|
|
|
14
|
-
|
|
15
|
-
w = PulseMeter::Visualize::DSL::Widget.new(type, title)
|
|
16
|
-
w.process_args(widget_args) if widget_args
|
|
17
|
-
yield(w) if block_given?
|
|
18
|
-
@widgets << w
|
|
19
|
-
end
|
|
12
|
+
string_setter :title
|
|
20
13
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
EVAL
|
|
27
|
-
end
|
|
14
|
+
dsl_array_extender :widgets, :area, PulseMeter::Visualize::DSL::Widgets::Area
|
|
15
|
+
dsl_array_extender :widgets, :line, PulseMeter::Visualize::DSL::Widgets::Line
|
|
16
|
+
dsl_array_extender :widgets, :pie, PulseMeter::Visualize::DSL::Widgets::Pie
|
|
17
|
+
dsl_array_extender :widgets, :table, PulseMeter::Visualize::DSL::Widgets::Table
|
|
18
|
+
dsl_array_extender :widgets, :gauge, PulseMeter::Visualize::DSL::Widgets::Gauge
|
|
28
19
|
|
|
29
|
-
|
|
30
|
-
STDERR.puts "DEPRECATION: spline widget is no longer available. Using `line' as a fallback."
|
|
31
|
-
line(*args, &block)
|
|
32
|
-
end
|
|
20
|
+
hash_extender :gchart_options
|
|
33
21
|
|
|
34
|
-
def
|
|
35
|
-
|
|
22
|
+
def spline(*args)
|
|
23
|
+
STDERR.puts "DEPRECATION: spline widget is no longer available."
|
|
36
24
|
end
|
|
37
25
|
|
|
38
|
-
def highchart_options(
|
|
26
|
+
def highchart_options(*args)
|
|
39
27
|
STDERR.puts "DEPRECATION: highchart_options DSL helper does not take effect anymore, use gchart_options instead"
|
|
40
28
|
end
|
|
41
|
-
|
|
42
|
-
def gchart_options(options = {})
|
|
43
|
-
@gchart_options.merge!(options)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def to_page
|
|
47
|
-
args = {
|
|
48
|
-
title: @title,
|
|
49
|
-
widgets: @widgets.map(&:to_widget),
|
|
50
|
-
gchart_options: @gchart_options
|
|
51
|
-
}
|
|
52
|
-
PulseMeter::Visualize::Page.new(args)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
29
|
end
|
|
56
30
|
end
|
|
57
31
|
end
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
module PulseMeter
|
|
2
2
|
module Visualize
|
|
3
|
-
module DSL
|
|
4
|
-
class Sensor
|
|
5
|
-
def initialize(name)
|
|
6
|
-
@args = {:sensor => name}
|
|
7
|
-
end
|
|
3
|
+
module DSL
|
|
4
|
+
class Sensor < Base
|
|
8
5
|
|
|
9
|
-
|
|
10
|
-
@args.merge!(args)
|
|
11
|
-
end
|
|
6
|
+
self.data_class = PulseMeter::Visualize::Sensor
|
|
12
7
|
|
|
13
|
-
def
|
|
14
|
-
|
|
8
|
+
def initialize(name)
|
|
9
|
+
super()
|
|
10
|
+
self.name(name)
|
|
15
11
|
end
|
|
12
|
+
|
|
13
|
+
string_setter :color
|
|
14
|
+
string_setter :name
|
|
16
15
|
end
|
|
17
16
|
end
|
|
18
17
|
end
|
|
@@ -1,82 +1,35 @@
|
|
|
1
1
|
module PulseMeter
|
|
2
2
|
module Visualize
|
|
3
3
|
module DSL
|
|
4
|
-
class Widget
|
|
5
|
-
|
|
4
|
+
class Widget < Base
|
|
5
|
+
MAX_WIDTH = 10
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
DEFAULT_TIMESPAN = 60 * 60 * 24 # One day
|
|
7
|
+
self.data_class = PulseMeter::Visualize::Widget
|
|
9
8
|
|
|
10
|
-
def initialize(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@values_label = ''
|
|
15
|
-
@width = DEFAULT_WIDTH
|
|
16
|
-
@sensors = []
|
|
17
|
-
@show_last_point = false
|
|
18
|
-
@redraw_interval = nil
|
|
19
|
-
@timespan = DEFAULT_TIMESPAN
|
|
9
|
+
def initialize(title)
|
|
10
|
+
super()
|
|
11
|
+
self.title(title)
|
|
12
|
+
self.width(MAX_WIDTH)
|
|
20
13
|
end
|
|
21
14
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
send(arg, args[arg])
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def redraw_interval(new_redraw_interval)
|
|
31
|
-
new_redraw_interval = new_redraw_interval.to_i
|
|
32
|
-
raise BadWidgetRedrawInterval, new_redraw_interval unless new_redraw_interval > 0
|
|
33
|
-
@redraw_interval = new_redraw_interval
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def show_last_point(new_show_last_point)
|
|
37
|
-
@show_last_point = !!new_show_last_point
|
|
38
|
-
end
|
|
15
|
+
hash_extender :gchart_options
|
|
16
|
+
|
|
17
|
+
string_setter :title
|
|
39
18
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
raise BadWidgetTimeSpan, new_timespan unless new_timespan > 0
|
|
43
|
-
@timespan = new_timespan
|
|
19
|
+
int_setter :redraw_interval do |int|
|
|
20
|
+
raise BadWidgetRedrawInterval, int unless int > 0
|
|
44
21
|
end
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
22
|
+
|
|
23
|
+
int_setter :width do |w|
|
|
24
|
+
raise BadWidgetWidth, w unless w > 0 && w <= MAX_WIDTH
|
|
48
25
|
end
|
|
49
26
|
|
|
50
|
-
|
|
51
|
-
@title = new_title.to_s || ''
|
|
52
|
-
end
|
|
27
|
+
dsl_array_extender :sensors, :sensor, PulseMeter::Visualize::DSL::Sensor
|
|
53
28
|
|
|
54
|
-
def
|
|
55
|
-
|
|
56
|
-
w = new_width.to_i
|
|
57
|
-
raise BadWidgetWidth, new_width unless w > 0 && w <= 10
|
|
58
|
-
@width = new_width.to_i
|
|
29
|
+
def method_missing(name, value)
|
|
30
|
+
gchart_options(name => value)
|
|
59
31
|
end
|
|
60
32
|
|
|
61
|
-
def sensor(name, sensor_args = nil)
|
|
62
|
-
s = PulseMeter::Visualize::DSL::Sensor.new(name)
|
|
63
|
-
s.process_args(sensor_args) if sensor_args
|
|
64
|
-
@sensors << s
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def to_widget
|
|
68
|
-
args = {
|
|
69
|
-
title: @title,
|
|
70
|
-
type: @type,
|
|
71
|
-
values_label: @values_label,
|
|
72
|
-
width: @width,
|
|
73
|
-
sensors: @sensors.map(&:to_sensor),
|
|
74
|
-
redraw_interval: @redraw_interval,
|
|
75
|
-
show_last_point: @show_last_point,
|
|
76
|
-
timespan: @timespan
|
|
77
|
-
}
|
|
78
|
-
PulseMeter::Visualize::Widget.new(args)
|
|
79
|
-
end
|
|
80
33
|
end
|
|
81
34
|
end
|
|
82
35
|
end
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
module PulseMeter
|
|
2
|
+
module Visualize
|
|
3
|
+
module DSL
|
|
4
|
+
class Widget
|
|
5
|
+
include PulseMeter::Mixins::Utils
|
|
6
|
+
|
|
7
|
+
DEFAULT_WIDTH = 10
|
|
8
|
+
DEFAULT_TIMESPAN = 60 * 60 * 24 # One day
|
|
9
|
+
DEFAULT_GCHART_OPTIONS = {}
|
|
10
|
+
|
|
11
|
+
def initialize(type, title = '')
|
|
12
|
+
raise BadWidgetType, type if type.to_s.empty?
|
|
13
|
+
@type = type
|
|
14
|
+
@title = title.to_s || ''
|
|
15
|
+
@values_label = ''
|
|
16
|
+
@width = DEFAULT_WIDTH
|
|
17
|
+
@sensors = []
|
|
18
|
+
@show_last_point = false
|
|
19
|
+
@redraw_interval = nil
|
|
20
|
+
@timespan = DEFAULT_TIMESPAN
|
|
21
|
+
@gchart_options = DEFAULT_GCHART_OPTIONS.dup
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def process_args(args)
|
|
25
|
+
[:sensor, :title, :width, :values_label, :show_last_point, :redraw_interval, :timespan].each do |arg|
|
|
26
|
+
if args.has_key?(arg)
|
|
27
|
+
send(arg, args[arg])
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def redraw_interval(new_redraw_interval)
|
|
33
|
+
new_redraw_interval = new_redraw_interval.to_i
|
|
34
|
+
raise BadWidgetRedrawInterval, new_redraw_interval unless new_redraw_interval > 0
|
|
35
|
+
@redraw_interval = new_redraw_interval
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def show_last_point(new_show_last_point)
|
|
39
|
+
@show_last_point = !!new_show_last_point
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def timespan(new_timespan)
|
|
43
|
+
new_timespan = new_timespan.to_i
|
|
44
|
+
raise BadWidgetTimeSpan, new_timespan unless new_timespan > 0
|
|
45
|
+
@timespan = new_timespan
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def values_label(new_label)
|
|
49
|
+
@values_label = new_label.to_s
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def title(new_title)
|
|
53
|
+
@title = new_title.to_s || ''
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def width(new_width)
|
|
57
|
+
raise BadWidgetWidth, new_width unless new_width.respond_to?(:to_i)
|
|
58
|
+
w = new_width.to_i
|
|
59
|
+
raise BadWidgetWidth, new_width unless w > 0 && w <= 10
|
|
60
|
+
@width = new_width.to_i
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def gchart_options(options = {})
|
|
64
|
+
@gchart_options.merge!(options)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def sensor(name, sensor_args = nil)
|
|
68
|
+
s = PulseMeter::Visualize::DSL::Sensor.new(name)
|
|
69
|
+
s.process_args(sensor_args) if sensor_args
|
|
70
|
+
@sensors << s
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def method_missing(name, value)
|
|
74
|
+
@gchart_options[name] = value
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def to_widget
|
|
78
|
+
args = {
|
|
79
|
+
title: @title,
|
|
80
|
+
type: @type,
|
|
81
|
+
values_label: @values_label,
|
|
82
|
+
width: @width,
|
|
83
|
+
sensors: @sensors.map(&:to_sensor),
|
|
84
|
+
redraw_interval: @redraw_interval,
|
|
85
|
+
show_last_point: @show_last_point,
|
|
86
|
+
timespan: @timespan,
|
|
87
|
+
gchart_options: @gchart_options
|
|
88
|
+
}
|
|
89
|
+
PulseMeter::Visualize::Widget.new(args)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module PulseMeter
|
|
2
|
+
module Visualize
|
|
3
|
+
module DSL
|
|
4
|
+
module Widgets
|
|
5
|
+
class Area < PulseMeter::Visualize::DSL::Widget
|
|
6
|
+
self.data_class = PulseMeter::Visualize::Widgets::Area
|
|
7
|
+
|
|
8
|
+
string_setter :values_label
|
|
9
|
+
bool_setter :show_last_point
|
|
10
|
+
|
|
11
|
+
int_setter :timespan do |ts|
|
|
12
|
+
raise BadWidgetTimeSpan, ts unless ts > 0
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module PulseMeter
|
|
2
|
+
module Visualize
|
|
3
|
+
module DSL
|
|
4
|
+
module Widgets
|
|
5
|
+
class Line < PulseMeter::Visualize::DSL::Widget
|
|
6
|
+
self.data_class = PulseMeter::Visualize::Widgets::Line
|
|
7
|
+
|
|
8
|
+
string_setter :values_label
|
|
9
|
+
bool_setter :show_last_point
|
|
10
|
+
|
|
11
|
+
int_setter :timespan do |ts|
|
|
12
|
+
raise BadWidgetTimeSpan, ts unless ts > 0
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module PulseMeter
|
|
2
|
+
module Visualize
|
|
3
|
+
module DSL
|
|
4
|
+
module Widgets
|
|
5
|
+
class Pie < PulseMeter::Visualize::DSL::Widget
|
|
6
|
+
self.data_class = PulseMeter::Visualize::Widgets::Pie
|
|
7
|
+
|
|
8
|
+
string_setter :values_label
|
|
9
|
+
bool_setter :show_last_point
|
|
10
|
+
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module PulseMeter
|
|
2
|
+
module Visualize
|
|
3
|
+
module DSL
|
|
4
|
+
module Widgets
|
|
5
|
+
class Table < PulseMeter::Visualize::DSL::Widget
|
|
6
|
+
self.data_class = PulseMeter::Visualize::Widgets::Table
|
|
7
|
+
|
|
8
|
+
bool_setter :show_last_point
|
|
9
|
+
|
|
10
|
+
int_setter :timespan do |ts|
|
|
11
|
+
raise BadWidgetTimeSpan, ts unless ts > 0
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
module PulseMeter
|
|
2
2
|
module Visualize
|
|
3
|
-
class Layout
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
attr_reader :gchart_options
|
|
9
|
-
|
|
10
|
-
def initialize(args)
|
|
11
|
-
raise ArgumentError unless args.respond_to?('[]')
|
|
12
|
-
@title = args[:title] or raise ArgumentError, ":title not specified"
|
|
13
|
-
@pages = args[:pages] or raise ArgumentError, ":pages not specified"
|
|
14
|
-
@use_utc = args[:use_utc]
|
|
15
|
-
@gchart_options = args[:gchart_options]
|
|
3
|
+
class Layout < Base
|
|
4
|
+
def initialize(opts)
|
|
5
|
+
super
|
|
6
|
+
@opts[:pages] ||= []
|
|
7
|
+
@opts[:gchart_options] ||= {}
|
|
16
8
|
end
|
|
17
9
|
|
|
18
10
|
def to_app
|
|
@@ -33,8 +25,8 @@ module PulseMeter
|
|
|
33
25
|
|
|
34
26
|
def options
|
|
35
27
|
{
|
|
36
|
-
use_utc:
|
|
37
|
-
gchart_options:
|
|
28
|
+
use_utc: use_utc,
|
|
29
|
+
gchart_options: gchart_options
|
|
38
30
|
}
|
|
39
31
|
end
|
|
40
32
|
|
|
@@ -45,7 +37,6 @@ module PulseMeter
|
|
|
45
37
|
def widgets(page_id)
|
|
46
38
|
pages[page_id].widget_datas
|
|
47
39
|
end
|
|
48
|
-
|
|
49
40
|
end
|
|
50
41
|
end
|
|
51
42
|
end
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
module PulseMeter
|
|
2
2
|
module Visualize
|
|
3
|
-
class Page
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def initialize(args)
|
|
9
|
-
raise ArgumentError unless args.respond_to?('[]')
|
|
10
|
-
@title = args[:title] or raise ArgumentError, ":title not specified"
|
|
11
|
-
@widgets = args[:widgets] or raise ArgumentError, ":widgets not specified"
|
|
12
|
-
@gchart_options = args[:gchart_options] or raise ArgumentError, ":gchart_options not specified"
|
|
3
|
+
class Page < Base
|
|
4
|
+
def initialize(opts)
|
|
5
|
+
super
|
|
6
|
+
@opts[:widgets] ||= []
|
|
7
|
+
@opts[:gchart_options] ||= {}
|
|
13
8
|
end
|
|
14
9
|
|
|
15
10
|
def widget_data(widget_id, opts = {})
|