pulse_meter_visualizer 0.4.11

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 (124) hide show
  1. data/.gitignore +19 -0
  2. data/.rbenv-version +1 -0
  3. data/.rspec +1 -0
  4. data/.rvmrc +1 -0
  5. data/.travis.yml +8 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +22 -0
  8. data/Procfile +3 -0
  9. data/README.md +40 -0
  10. data/Rakefile +72 -0
  11. data/examples/basic.ru +145 -0
  12. data/examples/basic_sensor_data.rb +96 -0
  13. data/lib/pulse_meter/visualize/app.rb +78 -0
  14. data/lib/pulse_meter/visualize/base.rb +15 -0
  15. data/lib/pulse_meter/visualize/coffee/application.coffee +40 -0
  16. data/lib/pulse_meter/visualize/coffee/collections/page_info_list.coffee +17 -0
  17. data/lib/pulse_meter/visualize/coffee/collections/sensor_info_list.coffee +4 -0
  18. data/lib/pulse_meter/visualize/coffee/collections/widget_list.coffee +14 -0
  19. data/lib/pulse_meter/visualize/coffee/extensions.coffee +26 -0
  20. data/lib/pulse_meter/visualize/coffee/models/dinamic_widget.coffee +34 -0
  21. data/lib/pulse_meter/visualize/coffee/models/page_info.coffee +2 -0
  22. data/lib/pulse_meter/visualize/coffee/models/sensor_info.coffee +2 -0
  23. data/lib/pulse_meter/visualize/coffee/models/widget.coffee +54 -0
  24. data/lib/pulse_meter/visualize/coffee/presenters/area.coffee +2 -0
  25. data/lib/pulse_meter/visualize/coffee/presenters/gauge.coffee +11 -0
  26. data/lib/pulse_meter/visualize/coffee/presenters/line.coffee +2 -0
  27. data/lib/pulse_meter/visualize/coffee/presenters/pie.coffee +20 -0
  28. data/lib/pulse_meter/visualize/coffee/presenters/series.coffee +44 -0
  29. data/lib/pulse_meter/visualize/coffee/presenters/table.coffee +10 -0
  30. data/lib/pulse_meter/visualize/coffee/presenters/timeline.coffee +13 -0
  31. data/lib/pulse_meter/visualize/coffee/presenters/widget.coffee +65 -0
  32. data/lib/pulse_meter/visualize/coffee/router.coffee +21 -0
  33. data/lib/pulse_meter/visualize/coffee/views/dynamic_chart.coffee +91 -0
  34. data/lib/pulse_meter/visualize/coffee/views/dynamic_widget.coffee +58 -0
  35. data/lib/pulse_meter/visualize/coffee/views/page_title.coffee +17 -0
  36. data/lib/pulse_meter/visualize/coffee/views/page_titles.coffee +15 -0
  37. data/lib/pulse_meter/visualize/coffee/views/sensor_info_list.coffee +19 -0
  38. data/lib/pulse_meter/visualize/coffee/views/widget.coffee +99 -0
  39. data/lib/pulse_meter/visualize/coffee/views/widget_chart.coffee +13 -0
  40. data/lib/pulse_meter/visualize/coffee/views/widget_list.coffee +15 -0
  41. data/lib/pulse_meter/visualize/dsl/base.rb +131 -0
  42. data/lib/pulse_meter/visualize/dsl/errors.rb +40 -0
  43. data/lib/pulse_meter/visualize/dsl/layout.rb +27 -0
  44. data/lib/pulse_meter/visualize/dsl/page.rb +33 -0
  45. data/lib/pulse_meter/visualize/dsl/sensor.rb +20 -0
  46. data/lib/pulse_meter/visualize/dsl/widget.rb +37 -0
  47. data/lib/pulse_meter/visualize/dsl/widgets/area.rb +20 -0
  48. data/lib/pulse_meter/visualize/dsl/widgets/gauge.rb +12 -0
  49. data/lib/pulse_meter/visualize/dsl/widgets/line.rb +21 -0
  50. data/lib/pulse_meter/visualize/dsl/widgets/pie.rb +16 -0
  51. data/lib/pulse_meter/visualize/dsl/widgets/table.rb +19 -0
  52. data/lib/pulse_meter/visualize/layout.rb +79 -0
  53. data/lib/pulse_meter/visualize/page.rb +25 -0
  54. data/lib/pulse_meter/visualize/public/css/application.css +56 -0
  55. data/lib/pulse_meter/visualize/public/css/bootstrap.css +4883 -0
  56. data/lib/pulse_meter/visualize/public/css/bootstrap.min.css +729 -0
  57. data/lib/pulse_meter/visualize/public/css/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  58. data/lib/pulse_meter/visualize/public/css/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  59. data/lib/pulse_meter/visualize/public/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  60. data/lib/pulse_meter/visualize/public/css/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  61. data/lib/pulse_meter/visualize/public/css/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  62. data/lib/pulse_meter/visualize/public/css/images/ui-bg_glass_75_ffffff_1x400.png +0 -0
  63. data/lib/pulse_meter/visualize/public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  64. data/lib/pulse_meter/visualize/public/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png +0 -0
  65. data/lib/pulse_meter/visualize/public/css/images/ui-icons_222222_256x240.png +0 -0
  66. data/lib/pulse_meter/visualize/public/css/images/ui-icons_2e83ff_256x240.png +0 -0
  67. data/lib/pulse_meter/visualize/public/css/images/ui-icons_454545_256x240.png +0 -0
  68. data/lib/pulse_meter/visualize/public/css/images/ui-icons_888888_256x240.png +0 -0
  69. data/lib/pulse_meter/visualize/public/css/images/ui-icons_cd0a0a_256x240.png +0 -0
  70. data/lib/pulse_meter/visualize/public/css/images/ui-icons_f6cf3b_256x240.png +0 -0
  71. data/lib/pulse_meter/visualize/public/css/jquery-ui-1.8.16.bootstrap.css +1320 -0
  72. data/lib/pulse_meter/visualize/public/favicon.ico +208 -0
  73. data/lib/pulse_meter/visualize/public/img/glyphicons-halflings-white.png +0 -0
  74. data/lib/pulse_meter/visualize/public/img/glyphicons-halflings.png +0 -0
  75. data/lib/pulse_meter/visualize/public/js/application.js +973 -0
  76. data/lib/pulse_meter/visualize/public/js/backbone-min.js +38 -0
  77. data/lib/pulse_meter/visualize/public/js/bootstrap.js +1835 -0
  78. data/lib/pulse_meter/visualize/public/js/jquery-1.7.2.min.js +4 -0
  79. data/lib/pulse_meter/visualize/public/js/jquery-ui-1.8.16.bootstrap.min.js +791 -0
  80. data/lib/pulse_meter/visualize/public/js/jquery-ui-1.8.23.custom.min.js +21 -0
  81. data/lib/pulse_meter/visualize/public/js/jquery-ui-timepicker-addon.js +1687 -0
  82. data/lib/pulse_meter/visualize/public/js/json2.js +487 -0
  83. data/lib/pulse_meter/visualize/public/js/underscore-min.js +32 -0
  84. data/lib/pulse_meter/visualize/sensor.rb +63 -0
  85. data/lib/pulse_meter/visualize/series_extractor.rb +107 -0
  86. data/lib/pulse_meter/visualize/views/main.haml +30 -0
  87. data/lib/pulse_meter/visualize/views/sensors.haml +76 -0
  88. data/lib/pulse_meter/visualize/views/widgets/area.haml +53 -0
  89. data/lib/pulse_meter/visualize/views/widgets/extend_options.haml +11 -0
  90. data/lib/pulse_meter/visualize/views/widgets/gauge.haml +13 -0
  91. data/lib/pulse_meter/visualize/views/widgets/line.haml +54 -0
  92. data/lib/pulse_meter/visualize/views/widgets/pie.haml +13 -0
  93. data/lib/pulse_meter/visualize/views/widgets/table.haml +45 -0
  94. data/lib/pulse_meter/visualize/widget.rb +38 -0
  95. data/lib/pulse_meter/visualize/widgets/gauge.rb +47 -0
  96. data/lib/pulse_meter/visualize/widgets/pie.rb +36 -0
  97. data/lib/pulse_meter/visualize/widgets/timeline.rb +114 -0
  98. data/lib/pulse_meter/visualizer.rb +38 -0
  99. data/lib/pulse_meter_visualizer.rb +2 -0
  100. data/pulse_meter_visualizer.gemspec +41 -0
  101. data/spec/pulse_meter/visualize/app_spec.rb +27 -0
  102. data/spec/pulse_meter/visualize/dsl/layout_spec.rb +64 -0
  103. data/spec/pulse_meter/visualize/dsl/page_spec.rb +62 -0
  104. data/spec/pulse_meter/visualize/dsl/sensor_spec.rb +30 -0
  105. data/spec/pulse_meter/visualize/dsl/widget_spec.rb +6 -0
  106. data/spec/pulse_meter/visualize/dsl/widgets/area_spec.rb +44 -0
  107. data/spec/pulse_meter/visualize/dsl/widgets/gauge_spec.rb +22 -0
  108. data/spec/pulse_meter/visualize/dsl/widgets/line_spec.rb +44 -0
  109. data/spec/pulse_meter/visualize/dsl/widgets/pie_spec.rb +35 -0
  110. data/spec/pulse_meter/visualize/dsl/widgets/table_spec.rb +36 -0
  111. data/spec/pulse_meter/visualize/layout_spec.rb +54 -0
  112. data/spec/pulse_meter/visualize/page_spec.rb +153 -0
  113. data/spec/pulse_meter/visualize/sensor_spec.rb +120 -0
  114. data/spec/pulse_meter/visualize/series_extractor_spec.rb +80 -0
  115. data/spec/pulse_meter/visualize/widgets/area_spec.rb +6 -0
  116. data/spec/pulse_meter/visualize/widgets/gauge_spec.rb +63 -0
  117. data/spec/pulse_meter/visualize/widgets/line_spec.rb +6 -0
  118. data/spec/pulse_meter/visualize/widgets/pie_spec.rb +73 -0
  119. data/spec/pulse_meter/visualize/widgets/table_spec.rb +6 -0
  120. data/spec/pulse_meter/visualizer_spec.rb +42 -0
  121. data/spec/shared_examples/dsl_widget.rb +106 -0
  122. data/spec/shared_examples/widget.rb +97 -0
  123. data/spec/spec_helper.rb +36 -0
  124. metadata +518 -0
@@ -0,0 +1,97 @@
1
+ shared_examples_for "widget" do
2
+ let(:interval){ 100 }
3
+ let!(:a_sensor){ PulseMeter::Sensor::Timelined::Counter.new(:a_sensor, :ttl => 1000, :interval => interval, annotation: 'A') }
4
+ let!(:b_sensor){ PulseMeter::Sensor::Timelined::Counter.new(:b_sensor, :ttl => 1000, :interval => interval, annotation: 'B') }
5
+
6
+ let(:widget_name){ "some_widget" }
7
+
8
+ let(:redraw_interval){5}
9
+ let(:values_label){'xxxx'}
10
+ let(:width){6}
11
+ let(:timespan){interval * 2}
12
+ let(:a_color){'#FF0000'}
13
+ let(:b_color){'#FFFF00'}
14
+
15
+ let(:interval_start){ Time.at((Time.now.to_i / interval) * interval) }
16
+
17
+ def constantize(const_name)
18
+ const_name.to_s.split('::').reduce(Module, :const_get)
19
+ end
20
+
21
+ def class_name
22
+ described_class.to_s.split('::').last
23
+ end
24
+
25
+ def dsl_class
26
+ constantize "PulseMeter::Visualize::DSL::Widgets::#{class_name}"
27
+ end
28
+
29
+ let(:widget) do
30
+ w = dsl_class.new(widget_name)
31
+ w.redraw_interval redraw_interval
32
+ w.width width
33
+ w.sensor :a_sensor, color: a_color
34
+ w.sensor :b_sensor, color: b_color
35
+ w.gchart_options a: 1
36
+ w.timespan timespan
37
+ w.to_data
38
+ end
39
+
40
+ describe "#data" do
41
+ it "should contain type, title, redraw_interval, width, gchart_options, timespan attriutes" do
42
+ wdata = widget.data
43
+ wdata[:type].should == class_name.downcase
44
+ wdata[:title].should == widget_name
45
+ wdata[:redraw_interval].should == redraw_interval
46
+ wdata[:width].should == width
47
+ wdata[:gchart_options].should == {a: 1}
48
+ wdata[:timespan].should == timespan
49
+ wdata[:interval].should == interval
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
+ end
63
+
64
+ it "should contain valid series" do
65
+ Timecop.freeze(@current_time) do
66
+ widget.data[:series].should ==
67
+ {
68
+ titles: [a_sensor.annotation, b_sensor.annotation],
69
+ rows: [[interval_start.to_i * 1000, 12, 33]],
70
+ options: [
71
+ {color: a_color},
72
+ {color: b_color}
73
+ ]
74
+ }
75
+ end
76
+ end
77
+
78
+ it "should accept custom timespan" do
79
+ Timecop.freeze(@current_time + interval) do
80
+ widget.data(timespan: timespan)[:series][:rows].size.should == 1
81
+ widget.data(timespan: timespan + interval)[:series][:rows].size.should == 2
82
+ end
83
+ end
84
+
85
+ it "should accept start_time and end_time" do
86
+ Timecop.freeze(@current_time + interval) do
87
+ widget.data(start_time: (Time.now - timespan).to_i)[:series][:rows].size.should == 1
88
+ widget.data(
89
+ start_time: (Time.now - interval - timespan).to_i,
90
+ end_time: Time.now.to_i
91
+ )[:series][:rows].size.should == 2
92
+ end
93
+ end
94
+
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,36 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ $:.unshift File.expand_path('../../lib/', __FILE__)
4
+
5
+ ROOT = File.expand_path('../..', __FILE__)
6
+
7
+ Bundler.require(:default, :test, :development)
8
+
9
+ SimpleCov.start
10
+
11
+ require 'pulse_meter_visualizer'
12
+ PulseMeter.redis = MockRedis.new
13
+
14
+ require 'rack/test'
15
+
16
+ Dir['spec/shared_examples/**/*.rb'].each{|f| require File.join(ROOT,f)}
17
+
18
+ require 'aquarium'
19
+ include Aquarium::Aspects
20
+
21
+ Aspect.new :after, :calls_to => [:event, :event_at], :for_types => [PulseMeter::Sensor::Base, PulseMeter::Sensor::Timeline] do |jp, obj, *args|
22
+ PulseMeter.command_aggregator.wait_for_pending_events
23
+ end
24
+
25
+ PulseMeter.command_aggregator.max_queue_length = 20
26
+
27
+ RSpec.configure do |config|
28
+ config.before(:each) do
29
+ PulseMeter.redis = MockRedis.new
30
+ Timecop.return
31
+ PulseMeter.logger = Logger.new("/dev/null")
32
+ end
33
+ config.filter_run :focus => true
34
+ config.run_all_when_everything_filtered = true
35
+ end
36
+
metadata ADDED
@@ -0,0 +1,518 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pulse_meter_visualizer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.11
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ilya Averyanov
9
+ - Sergey Averyanov
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-06-16 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: pulse_meter_core
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: gon-sinatra
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: haml
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: sinatra
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: sinatra-partial
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ type: :runtime
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: aquarium
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: coffee-script
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: foreman
129
+ requirement: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ - !ruby/object:Gem::Dependency
144
+ name: hashie
145
+ requirement: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ type: :development
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: listen
161
+ requirement: !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ! '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ type: :development
168
+ prerelease: false
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ! '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ - !ruby/object:Gem::Dependency
176
+ name: mock_redis
177
+ requirement: !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ! '>='
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ type: :development
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ - !ruby/object:Gem::Dependency
192
+ name: rack-test
193
+ requirement: !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ! '>='
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ type: :development
200
+ prerelease: false
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ! '>='
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ - !ruby/object:Gem::Dependency
208
+ name: rake
209
+ requirement: !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
212
+ - - ! '>='
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ type: :development
216
+ prerelease: false
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ none: false
219
+ requirements:
220
+ - - ! '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: rb-fsevent
225
+ requirement: !ruby/object:Gem::Requirement
226
+ none: false
227
+ requirements:
228
+ - - ! '>='
229
+ - !ruby/object:Gem::Version
230
+ version: '0'
231
+ type: :development
232
+ prerelease: false
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ none: false
235
+ requirements:
236
+ - - ! '>='
237
+ - !ruby/object:Gem::Version
238
+ version: '0'
239
+ - !ruby/object:Gem::Dependency
240
+ name: redcarpet
241
+ requirement: !ruby/object:Gem::Requirement
242
+ none: false
243
+ requirements:
244
+ - - ! '>='
245
+ - !ruby/object:Gem::Version
246
+ version: '0'
247
+ type: :development
248
+ prerelease: false
249
+ version_requirements: !ruby/object:Gem::Requirement
250
+ none: false
251
+ requirements:
252
+ - - ! '>='
253
+ - !ruby/object:Gem::Version
254
+ version: '0'
255
+ - !ruby/object:Gem::Dependency
256
+ name: rspec
257
+ requirement: !ruby/object:Gem::Requirement
258
+ none: false
259
+ requirements:
260
+ - - ! '>='
261
+ - !ruby/object:Gem::Version
262
+ version: '0'
263
+ type: :development
264
+ prerelease: false
265
+ version_requirements: !ruby/object:Gem::Requirement
266
+ none: false
267
+ requirements:
268
+ - - ! '>='
269
+ - !ruby/object:Gem::Version
270
+ version: '0'
271
+ - !ruby/object:Gem::Dependency
272
+ name: simplecov
273
+ requirement: !ruby/object:Gem::Requirement
274
+ none: false
275
+ requirements:
276
+ - - ! '>='
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ type: :development
280
+ prerelease: false
281
+ version_requirements: !ruby/object:Gem::Requirement
282
+ none: false
283
+ requirements:
284
+ - - ! '>='
285
+ - !ruby/object:Gem::Version
286
+ version: '0'
287
+ - !ruby/object:Gem::Dependency
288
+ name: sprockets
289
+ requirement: !ruby/object:Gem::Requirement
290
+ none: false
291
+ requirements:
292
+ - - ! '>='
293
+ - !ruby/object:Gem::Version
294
+ version: '0'
295
+ type: :development
296
+ prerelease: false
297
+ version_requirements: !ruby/object:Gem::Requirement
298
+ none: false
299
+ requirements:
300
+ - - ! '>='
301
+ - !ruby/object:Gem::Version
302
+ version: '0'
303
+ - !ruby/object:Gem::Dependency
304
+ name: timecop
305
+ requirement: !ruby/object:Gem::Requirement
306
+ none: false
307
+ requirements:
308
+ - - ! '>='
309
+ - !ruby/object:Gem::Version
310
+ version: '0'
311
+ type: :development
312
+ prerelease: false
313
+ version_requirements: !ruby/object:Gem::Requirement
314
+ none: false
315
+ requirements:
316
+ - - ! '>='
317
+ - !ruby/object:Gem::Version
318
+ version: '0'
319
+ - !ruby/object:Gem::Dependency
320
+ name: yard
321
+ requirement: !ruby/object:Gem::Requirement
322
+ none: false
323
+ requirements:
324
+ - - ! '>='
325
+ - !ruby/object:Gem::Version
326
+ version: '0'
327
+ type: :development
328
+ prerelease: false
329
+ version_requirements: !ruby/object:Gem::Requirement
330
+ none: false
331
+ requirements:
332
+ - - ! '>='
333
+ - !ruby/object:Gem::Version
334
+ version: '0'
335
+ description: Customizable web interface for PulseMeter gem
336
+ email:
337
+ - av@fun-box.ru
338
+ - averyanov@gmail.com
339
+ executables: []
340
+ extensions: []
341
+ extra_rdoc_files: []
342
+ files:
343
+ - .gitignore
344
+ - .rbenv-version
345
+ - .rspec
346
+ - .rvmrc
347
+ - .travis.yml
348
+ - Gemfile
349
+ - LICENSE
350
+ - Procfile
351
+ - README.md
352
+ - Rakefile
353
+ - examples/basic.ru
354
+ - examples/basic_sensor_data.rb
355
+ - lib/pulse_meter/visualize/app.rb
356
+ - lib/pulse_meter/visualize/base.rb
357
+ - lib/pulse_meter/visualize/coffee/application.coffee
358
+ - lib/pulse_meter/visualize/coffee/collections/page_info_list.coffee
359
+ - lib/pulse_meter/visualize/coffee/collections/sensor_info_list.coffee
360
+ - lib/pulse_meter/visualize/coffee/collections/widget_list.coffee
361
+ - lib/pulse_meter/visualize/coffee/extensions.coffee
362
+ - lib/pulse_meter/visualize/coffee/models/dinamic_widget.coffee
363
+ - lib/pulse_meter/visualize/coffee/models/page_info.coffee
364
+ - lib/pulse_meter/visualize/coffee/models/sensor_info.coffee
365
+ - lib/pulse_meter/visualize/coffee/models/widget.coffee
366
+ - lib/pulse_meter/visualize/coffee/presenters/area.coffee
367
+ - lib/pulse_meter/visualize/coffee/presenters/gauge.coffee
368
+ - lib/pulse_meter/visualize/coffee/presenters/line.coffee
369
+ - lib/pulse_meter/visualize/coffee/presenters/pie.coffee
370
+ - lib/pulse_meter/visualize/coffee/presenters/series.coffee
371
+ - lib/pulse_meter/visualize/coffee/presenters/table.coffee
372
+ - lib/pulse_meter/visualize/coffee/presenters/timeline.coffee
373
+ - lib/pulse_meter/visualize/coffee/presenters/widget.coffee
374
+ - lib/pulse_meter/visualize/coffee/router.coffee
375
+ - lib/pulse_meter/visualize/coffee/views/dynamic_chart.coffee
376
+ - lib/pulse_meter/visualize/coffee/views/dynamic_widget.coffee
377
+ - lib/pulse_meter/visualize/coffee/views/page_title.coffee
378
+ - lib/pulse_meter/visualize/coffee/views/page_titles.coffee
379
+ - lib/pulse_meter/visualize/coffee/views/sensor_info_list.coffee
380
+ - lib/pulse_meter/visualize/coffee/views/widget.coffee
381
+ - lib/pulse_meter/visualize/coffee/views/widget_chart.coffee
382
+ - lib/pulse_meter/visualize/coffee/views/widget_list.coffee
383
+ - lib/pulse_meter/visualize/dsl/base.rb
384
+ - lib/pulse_meter/visualize/dsl/errors.rb
385
+ - lib/pulse_meter/visualize/dsl/layout.rb
386
+ - lib/pulse_meter/visualize/dsl/page.rb
387
+ - lib/pulse_meter/visualize/dsl/sensor.rb
388
+ - lib/pulse_meter/visualize/dsl/widget.rb
389
+ - lib/pulse_meter/visualize/dsl/widgets/area.rb
390
+ - lib/pulse_meter/visualize/dsl/widgets/gauge.rb
391
+ - lib/pulse_meter/visualize/dsl/widgets/line.rb
392
+ - lib/pulse_meter/visualize/dsl/widgets/pie.rb
393
+ - lib/pulse_meter/visualize/dsl/widgets/table.rb
394
+ - lib/pulse_meter/visualize/layout.rb
395
+ - lib/pulse_meter/visualize/page.rb
396
+ - lib/pulse_meter/visualize/public/css/application.css
397
+ - lib/pulse_meter/visualize/public/css/bootstrap.css
398
+ - lib/pulse_meter/visualize/public/css/bootstrap.min.css
399
+ - lib/pulse_meter/visualize/public/css/images/ui-bg_flat_0_aaaaaa_40x100.png
400
+ - lib/pulse_meter/visualize/public/css/images/ui-bg_glass_55_fbf9ee_1x400.png
401
+ - lib/pulse_meter/visualize/public/css/images/ui-bg_glass_65_ffffff_1x400.png
402
+ - lib/pulse_meter/visualize/public/css/images/ui-bg_glass_75_dadada_1x400.png
403
+ - lib/pulse_meter/visualize/public/css/images/ui-bg_glass_75_e6e6e6_1x400.png
404
+ - lib/pulse_meter/visualize/public/css/images/ui-bg_glass_75_ffffff_1x400.png
405
+ - lib/pulse_meter/visualize/public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png
406
+ - lib/pulse_meter/visualize/public/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png
407
+ - lib/pulse_meter/visualize/public/css/images/ui-icons_222222_256x240.png
408
+ - lib/pulse_meter/visualize/public/css/images/ui-icons_2e83ff_256x240.png
409
+ - lib/pulse_meter/visualize/public/css/images/ui-icons_454545_256x240.png
410
+ - lib/pulse_meter/visualize/public/css/images/ui-icons_888888_256x240.png
411
+ - lib/pulse_meter/visualize/public/css/images/ui-icons_cd0a0a_256x240.png
412
+ - lib/pulse_meter/visualize/public/css/images/ui-icons_f6cf3b_256x240.png
413
+ - lib/pulse_meter/visualize/public/css/jquery-ui-1.8.16.bootstrap.css
414
+ - lib/pulse_meter/visualize/public/favicon.ico
415
+ - lib/pulse_meter/visualize/public/img/glyphicons-halflings-white.png
416
+ - lib/pulse_meter/visualize/public/img/glyphicons-halflings.png
417
+ - lib/pulse_meter/visualize/public/js/application.js
418
+ - lib/pulse_meter/visualize/public/js/backbone-min.js
419
+ - lib/pulse_meter/visualize/public/js/bootstrap.js
420
+ - lib/pulse_meter/visualize/public/js/jquery-1.7.2.min.js
421
+ - lib/pulse_meter/visualize/public/js/jquery-ui-1.8.16.bootstrap.min.js
422
+ - lib/pulse_meter/visualize/public/js/jquery-ui-1.8.23.custom.min.js
423
+ - lib/pulse_meter/visualize/public/js/jquery-ui-timepicker-addon.js
424
+ - lib/pulse_meter/visualize/public/js/json2.js
425
+ - lib/pulse_meter/visualize/public/js/underscore-min.js
426
+ - lib/pulse_meter/visualize/sensor.rb
427
+ - lib/pulse_meter/visualize/series_extractor.rb
428
+ - lib/pulse_meter/visualize/views/main.haml
429
+ - lib/pulse_meter/visualize/views/sensors.haml
430
+ - lib/pulse_meter/visualize/views/widgets/area.haml
431
+ - lib/pulse_meter/visualize/views/widgets/extend_options.haml
432
+ - lib/pulse_meter/visualize/views/widgets/gauge.haml
433
+ - lib/pulse_meter/visualize/views/widgets/line.haml
434
+ - lib/pulse_meter/visualize/views/widgets/pie.haml
435
+ - lib/pulse_meter/visualize/views/widgets/table.haml
436
+ - lib/pulse_meter/visualize/widget.rb
437
+ - lib/pulse_meter/visualize/widgets/gauge.rb
438
+ - lib/pulse_meter/visualize/widgets/pie.rb
439
+ - lib/pulse_meter/visualize/widgets/timeline.rb
440
+ - lib/pulse_meter/visualizer.rb
441
+ - lib/pulse_meter_visualizer.rb
442
+ - pulse_meter_visualizer.gemspec
443
+ - spec/pulse_meter/visualize/app_spec.rb
444
+ - spec/pulse_meter/visualize/dsl/layout_spec.rb
445
+ - spec/pulse_meter/visualize/dsl/page_spec.rb
446
+ - spec/pulse_meter/visualize/dsl/sensor_spec.rb
447
+ - spec/pulse_meter/visualize/dsl/widget_spec.rb
448
+ - spec/pulse_meter/visualize/dsl/widgets/area_spec.rb
449
+ - spec/pulse_meter/visualize/dsl/widgets/gauge_spec.rb
450
+ - spec/pulse_meter/visualize/dsl/widgets/line_spec.rb
451
+ - spec/pulse_meter/visualize/dsl/widgets/pie_spec.rb
452
+ - spec/pulse_meter/visualize/dsl/widgets/table_spec.rb
453
+ - spec/pulse_meter/visualize/layout_spec.rb
454
+ - spec/pulse_meter/visualize/page_spec.rb
455
+ - spec/pulse_meter/visualize/sensor_spec.rb
456
+ - spec/pulse_meter/visualize/series_extractor_spec.rb
457
+ - spec/pulse_meter/visualize/widgets/area_spec.rb
458
+ - spec/pulse_meter/visualize/widgets/gauge_spec.rb
459
+ - spec/pulse_meter/visualize/widgets/line_spec.rb
460
+ - spec/pulse_meter/visualize/widgets/pie_spec.rb
461
+ - spec/pulse_meter/visualize/widgets/table_spec.rb
462
+ - spec/pulse_meter/visualizer_spec.rb
463
+ - spec/shared_examples/dsl_widget.rb
464
+ - spec/shared_examples/widget.rb
465
+ - spec/spec_helper.rb
466
+ homepage: https://github.com/savonarola/pulse_meter_visualizer
467
+ licenses: []
468
+ post_install_message:
469
+ rdoc_options: []
470
+ require_paths:
471
+ - lib
472
+ required_ruby_version: !ruby/object:Gem::Requirement
473
+ none: false
474
+ requirements:
475
+ - - ! '>='
476
+ - !ruby/object:Gem::Version
477
+ version: 1.9.2
478
+ required_rubygems_version: !ruby/object:Gem::Requirement
479
+ none: false
480
+ requirements:
481
+ - - ! '>='
482
+ - !ruby/object:Gem::Version
483
+ version: '0'
484
+ segments:
485
+ - 0
486
+ hash: -1763607849573796280
487
+ requirements: []
488
+ rubyforge_project:
489
+ rubygems_version: 1.8.23
490
+ signing_key:
491
+ specification_version: 3
492
+ summary: Customizable web interface for lightweight Redis-based metrics aggregator
493
+ and processor PulseMeter
494
+ test_files:
495
+ - spec/pulse_meter/visualize/app_spec.rb
496
+ - spec/pulse_meter/visualize/dsl/layout_spec.rb
497
+ - spec/pulse_meter/visualize/dsl/page_spec.rb
498
+ - spec/pulse_meter/visualize/dsl/sensor_spec.rb
499
+ - spec/pulse_meter/visualize/dsl/widget_spec.rb
500
+ - spec/pulse_meter/visualize/dsl/widgets/area_spec.rb
501
+ - spec/pulse_meter/visualize/dsl/widgets/gauge_spec.rb
502
+ - spec/pulse_meter/visualize/dsl/widgets/line_spec.rb
503
+ - spec/pulse_meter/visualize/dsl/widgets/pie_spec.rb
504
+ - spec/pulse_meter/visualize/dsl/widgets/table_spec.rb
505
+ - spec/pulse_meter/visualize/layout_spec.rb
506
+ - spec/pulse_meter/visualize/page_spec.rb
507
+ - spec/pulse_meter/visualize/sensor_spec.rb
508
+ - spec/pulse_meter/visualize/series_extractor_spec.rb
509
+ - spec/pulse_meter/visualize/widgets/area_spec.rb
510
+ - spec/pulse_meter/visualize/widgets/gauge_spec.rb
511
+ - spec/pulse_meter/visualize/widgets/line_spec.rb
512
+ - spec/pulse_meter/visualize/widgets/pie_spec.rb
513
+ - spec/pulse_meter/visualize/widgets/table_spec.rb
514
+ - spec/pulse_meter/visualizer_spec.rb
515
+ - spec/shared_examples/dsl_widget.rb
516
+ - spec/shared_examples/widget.rb
517
+ - spec/spec_helper.rb
518
+ has_rdoc: