pulse_meter-dygraphs_visualizer 0.4.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) 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 +9 -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 +54 -0
  11. data/examples/basic.ru +125 -0
  12. data/examples/basic_sensor_data.rb +97 -0
  13. data/lib/pulse_meter/dygraphs_visualize/app.rb +78 -0
  14. data/lib/pulse_meter/dygraphs_visualize/base.rb +15 -0
  15. data/lib/pulse_meter/dygraphs_visualize/coffee/application.coffee +37 -0
  16. data/lib/pulse_meter/dygraphs_visualize/coffee/collections/page_info_list.coffee +17 -0
  17. data/lib/pulse_meter/dygraphs_visualize/coffee/collections/sensor_info_list.coffee +4 -0
  18. data/lib/pulse_meter/dygraphs_visualize/coffee/collections/widget_list.coffee +14 -0
  19. data/lib/pulse_meter/dygraphs_visualize/coffee/extensions.coffee +26 -0
  20. data/lib/pulse_meter/dygraphs_visualize/coffee/models/dinamic_widget.coffee +34 -0
  21. data/lib/pulse_meter/dygraphs_visualize/coffee/models/page_info.coffee +2 -0
  22. data/lib/pulse_meter/dygraphs_visualize/coffee/models/sensor_info.coffee +2 -0
  23. data/lib/pulse_meter/dygraphs_visualize/coffee/models/widget.coffee +63 -0
  24. data/lib/pulse_meter/dygraphs_visualize/coffee/presenters/line.coffee +1 -0
  25. data/lib/pulse_meter/dygraphs_visualize/coffee/presenters/series.coffee +26 -0
  26. data/lib/pulse_meter/dygraphs_visualize/coffee/presenters/stack.coffee +1 -0
  27. data/lib/pulse_meter/dygraphs_visualize/coffee/presenters/timeline.coffee +13 -0
  28. data/lib/pulse_meter/dygraphs_visualize/coffee/presenters/widget.coffee +48 -0
  29. data/lib/pulse_meter/dygraphs_visualize/coffee/router.coffee +21 -0
  30. data/lib/pulse_meter/dygraphs_visualize/coffee/views/dynamic_chart.coffee +92 -0
  31. data/lib/pulse_meter/dygraphs_visualize/coffee/views/dynamic_widget.coffee +58 -0
  32. data/lib/pulse_meter/dygraphs_visualize/coffee/views/page_title.coffee +17 -0
  33. data/lib/pulse_meter/dygraphs_visualize/coffee/views/page_titles.coffee +15 -0
  34. data/lib/pulse_meter/dygraphs_visualize/coffee/views/sensor_info_list.coffee +19 -0
  35. data/lib/pulse_meter/dygraphs_visualize/coffee/views/widget.coffee +91 -0
  36. data/lib/pulse_meter/dygraphs_visualize/coffee/views/widget_chart.coffee +15 -0
  37. data/lib/pulse_meter/dygraphs_visualize/coffee/views/widget_list.coffee +15 -0
  38. data/lib/pulse_meter/dygraphs_visualize/dsl/base.rb +131 -0
  39. data/lib/pulse_meter/dygraphs_visualize/dsl/errors.rb +40 -0
  40. data/lib/pulse_meter/dygraphs_visualize/dsl/layout.rb +27 -0
  41. data/lib/pulse_meter/dygraphs_visualize/dsl/page.rb +26 -0
  42. data/lib/pulse_meter/dygraphs_visualize/dsl/sensor.rb +20 -0
  43. data/lib/pulse_meter/dygraphs_visualize/dsl/widget.rb +37 -0
  44. data/lib/pulse_meter/dygraphs_visualize/dsl/widgets/line.rb +22 -0
  45. data/lib/pulse_meter/dygraphs_visualize/dsl/widgets/stack.rb +29 -0
  46. data/lib/pulse_meter/dygraphs_visualize/layout.rb +79 -0
  47. data/lib/pulse_meter/dygraphs_visualize/page.rb +25 -0
  48. data/lib/pulse_meter/dygraphs_visualize/public/css/application.css +61 -0
  49. data/lib/pulse_meter/dygraphs_visualize/public/css/bootstrap.css +4883 -0
  50. data/lib/pulse_meter/dygraphs_visualize/public/css/bootstrap.min.css +729 -0
  51. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  52. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  53. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  54. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  55. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  56. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-bg_glass_75_ffffff_1x400.png +0 -0
  57. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  58. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png +0 -0
  59. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-icons_222222_256x240.png +0 -0
  60. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-icons_2e83ff_256x240.png +0 -0
  61. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-icons_454545_256x240.png +0 -0
  62. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-icons_888888_256x240.png +0 -0
  63. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-icons_cd0a0a_256x240.png +0 -0
  64. data/lib/pulse_meter/dygraphs_visualize/public/css/images/ui-icons_f6cf3b_256x240.png +0 -0
  65. data/lib/pulse_meter/dygraphs_visualize/public/css/jquery-ui-1.8.16.bootstrap.css +1320 -0
  66. data/lib/pulse_meter/dygraphs_visualize/public/favicon.ico +208 -0
  67. data/lib/pulse_meter/dygraphs_visualize/public/img/glyphicons-halflings-white.png +0 -0
  68. data/lib/pulse_meter/dygraphs_visualize/public/img/glyphicons-halflings.png +0 -0
  69. data/lib/pulse_meter/dygraphs_visualize/public/js/application.js +833 -0
  70. data/lib/pulse_meter/dygraphs_visualize/public/js/backbone-min.js +38 -0
  71. data/lib/pulse_meter/dygraphs_visualize/public/js/bootstrap.js +1835 -0
  72. data/lib/pulse_meter/dygraphs_visualize/public/js/dygraph-combined.js +2 -0
  73. data/lib/pulse_meter/dygraphs_visualize/public/js/jquery-1.7.2.min.js +4 -0
  74. data/lib/pulse_meter/dygraphs_visualize/public/js/jquery-ui-1.8.16.bootstrap.min.js +791 -0
  75. data/lib/pulse_meter/dygraphs_visualize/public/js/jquery-ui-1.8.23.custom.min.js +21 -0
  76. data/lib/pulse_meter/dygraphs_visualize/public/js/jquery-ui-timepicker-addon.js +1687 -0
  77. data/lib/pulse_meter/dygraphs_visualize/public/js/json2.js +487 -0
  78. data/lib/pulse_meter/dygraphs_visualize/public/js/underscore-min.js +32 -0
  79. data/lib/pulse_meter/dygraphs_visualize/sensor.rb +63 -0
  80. data/lib/pulse_meter/dygraphs_visualize/series_color.rb +39 -0
  81. data/lib/pulse_meter/dygraphs_visualize/series_extractor.rb +107 -0
  82. data/lib/pulse_meter/dygraphs_visualize/views/main.haml +30 -0
  83. data/lib/pulse_meter/dygraphs_visualize/views/sensors.haml +75 -0
  84. data/lib/pulse_meter/dygraphs_visualize/views/widgets/extend_options.haml +11 -0
  85. data/lib/pulse_meter/dygraphs_visualize/views/widgets/line.haml +43 -0
  86. data/lib/pulse_meter/dygraphs_visualize/views/widgets/stack.haml +43 -0
  87. data/lib/pulse_meter/dygraphs_visualize/widget.rb +38 -0
  88. data/lib/pulse_meter/dygraphs_visualize/widgets/timeline.rb +107 -0
  89. data/lib/pulse_meter/dygraphs_visualizer.rb +34 -0
  90. data/lib/pulse_meter_dygraphs_visualizer.rb +2 -0
  91. data/pulse_meter-dygraphs_visualizer.gemspec +41 -0
  92. data/spec/pulse_meter/dygraphs_visualize/app_spec.rb +27 -0
  93. data/spec/pulse_meter/dygraphs_visualize/dsl/layout_spec.rb +64 -0
  94. data/spec/pulse_meter/dygraphs_visualize/dsl/page_spec.rb +62 -0
  95. data/spec/pulse_meter/dygraphs_visualize/dsl/sensor_spec.rb +30 -0
  96. data/spec/pulse_meter/dygraphs_visualize/dsl/widget_spec.rb +6 -0
  97. data/spec/pulse_meter/dygraphs_visualize/dsl/widgets/line_spec.rb +44 -0
  98. data/spec/pulse_meter/dygraphs_visualize/dsl/widgets/stack_spec.rb +55 -0
  99. data/spec/pulse_meter/dygraphs_visualize/layout_spec.rb +54 -0
  100. data/spec/pulse_meter/dygraphs_visualize/page_spec.rb +145 -0
  101. data/spec/pulse_meter/dygraphs_visualize/sensor_spec.rb +120 -0
  102. data/spec/pulse_meter/dygraphs_visualize/series_extractor_spec.rb +80 -0
  103. data/spec/pulse_meter/dygraphs_visualize/widgets/line_spec.rb +6 -0
  104. data/spec/pulse_meter/dygraphs_visualize/widgets/stack_spec.rb +6 -0
  105. data/spec/pulse_meter/dygraphs_visualizer_spec.rb +42 -0
  106. data/spec/shared_examples/dsl_widget.rb +106 -0
  107. data/spec/shared_examples/widget.rb +97 -0
  108. data/spec/spec_helper.rb +36 -0
  109. metadata +497 -0
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.sw?
19
+ /.idea
data/.rbenv-version ADDED
@@ -0,0 +1 @@
1
+ 1.9.3-p125
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color -fd
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.2
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - 2.0.0
6
+ branches:
7
+ only:
8
+ - master
9
+ - develop
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pulse-meter.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Ilya Averyanov
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Procfile ADDED
@@ -0,0 +1,3 @@
1
+ watch_coffee: bundle exec rake coffee:watch
2
+ web_sample: bundle exec rackup examples/basic.ru
3
+ sensor_sample: bundle exec ruby examples/basic_sensor_data.rb
data/README.md ADDED
@@ -0,0 +1,40 @@
1
+ [![Gem Version](https://badge.fury.io/rb/pulse_meter_visualizer.png)](http://badge.fury.io/rb/pulse_meter_visualizer)
2
+ [![Build Status](https://secure.travis-ci.org/savonarola/pulse_meter_visualizer.png)](http://travis-ci.org/savonarola/pulse_meter_visualizer)
3
+ [![Dependency Status](https://gemnasium.com/savonarola/pulse_meter_visualizer.png)](https://gemnasium.com/savonarola/pulse_meter_visualizer)
4
+ [![Code Climate](https://codeclimate.com/github/savonarola/pulse_meter_visualizer.png)](https://codeclimate.com/github/savonarola/pulse_meter_visualizer)
5
+
6
+ # PulseMeter
7
+
8
+ PulseMeter is a gem for fast and convenient realtime aggregating of software internal stats through Redis.
9
+
10
+ ## Live Demo
11
+
12
+ A small live demo for [pulse-meter](https://github.com/savonarola/pulse-meter) gem is located here: [rubybox.ru](http://rubybox.ru), its source code can be found here: [https://github.com/savonarola/pulse-meter-demo](https://github.com/savonarola/pulse-meter-demo)
13
+
14
+ ## Features
15
+
16
+ The gem contains customizable web interface for [pulse-meter](https://github.com/savonarola/pulse-meter) gem.
17
+
18
+ ## Installation
19
+
20
+ Add this line to your application's Gemfile:
21
+
22
+ ```ruby
23
+ gem 'pulse_meter_visualizer'
24
+ ```
25
+
26
+ And then execute:
27
+
28
+ $ bundle
29
+
30
+ Or install it yourself as:
31
+
32
+ $ gem install pulse_meter_visualizer
33
+
34
+ ## Contributing
35
+
36
+ 1. Fork it
37
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
38
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
39
+ 4. Push to the branch (`git push origin my-new-feature`)
40
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env rake
2
+ require 'bundler/gem_tasks'
3
+ require 'coffee-script'
4
+ require 'listen'
5
+ require 'rspec/core/rake_task'
6
+ require 'sprockets'
7
+ require 'tilt'
8
+ require 'yard'
9
+ require 'yard/rake/yardoc_task'
10
+
11
+ RSpec::Core::RakeTask.new(:spec)
12
+
13
+ YARD::Rake::YardocTask.new(:yard)
14
+
15
+ ROOT = File.dirname(__FILE__)
16
+
17
+ task :default => :spec
18
+
19
+ namespace :coffee do
20
+ COFFEE_PATH = "#{ROOT}/lib/pulse_meter/dygraphs_visualize/coffee"
21
+
22
+ def compile_js
23
+ Tilt::CoffeeScriptTemplate.default_bare = true
24
+ env = Sprockets::Environment.new
25
+ env.append_path COFFEE_PATH
26
+ data = env['application.coffee']
27
+ open("#{ROOT}/lib/pulse_meter/dygraphs_visualize/public/js/application.js", "w").write(data)
28
+ puts "application.js compiled"
29
+ end
30
+
31
+ desc "Compile coffee to js"
32
+ task :compile do
33
+ compile_js
34
+ end
35
+
36
+ desc "Watch coffee files and recomplile them immediately"
37
+ task :watch do
38
+ Listen.to(COFFEE_PATH) do |modified, added, removed|
39
+ puts "Modified: #{modified}" unless modified.empty?
40
+ puts "Added: #{added}" unless added.empty?
41
+ puts "Removed: #{removed}" unless removed.empty?
42
+ puts "Recompiling..."
43
+ compile_js
44
+ end
45
+ end
46
+ end
47
+
48
+ namespace :yard do
49
+ desc "Open doc index in a browser"
50
+ task :open do
51
+ system 'open', "#{ROOT}/doc/index.html"
52
+ end
53
+ end
54
+
data/examples/basic.ru ADDED
@@ -0,0 +1,125 @@
1
+ $: << File.join(File.dirname(__FILE__), '..', 'lib')
2
+
3
+ require 'pulse_meter_dygraphs_visualizer'
4
+
5
+ PulseMeter.redis = Redis.new
6
+
7
+ layout = PulseMeter::DygraphsVisualizer.draw do |l|
8
+
9
+ l.title "WunderZoo Stats"
10
+
11
+ l.page "Counts" do |p|
12
+
13
+ p.line "Lama count" do |c|
14
+ c.sensor :lama_count, color: '#CC1155'
15
+ c.redraw_interval 1
16
+ c.values_label 'Count'
17
+ c.width 5
18
+ c.show_last_point true
19
+ c.timespan 1200
20
+ c.dygraphs_options(
21
+ show_range_selector: true
22
+ )
23
+ end
24
+
25
+ p.line "Lama count 1 min" do |c|
26
+ c.sensor :lama_count_1min, color: '#FA295C'
27
+ c.redraw_interval 1
28
+ c.values_label 'Count'
29
+ c.width 5
30
+ c.show_last_point true
31
+ c.timespan 1200
32
+ end
33
+
34
+ p.line "Rhino count", sensor: :rhino_count do |c|
35
+ c.redraw_interval 1
36
+ c.values_label 'Count'
37
+ c.width 5
38
+ c.show_last_point true
39
+ c.timespan 1200
40
+ end
41
+
42
+ p.line "Rhino & Lama & Goose count comparison" do |c|
43
+ c.redraw_interval 1
44
+ c.values_label 'Count'
45
+ c.width 5
46
+ c.show_last_point true
47
+ c.timespan 1200
48
+
49
+ c.sensor :rhino_count, color: '#AAAAAA'
50
+ c.sensor :lama_count, color: '#CC1155'
51
+ c.sensor :goose_count
52
+ end
53
+
54
+ p.line "Rhino & Lama & Gooze count comparison" do |c|
55
+ c.redraw_interval 1
56
+ c.values_label 'Count'
57
+ c.width 5
58
+ c.show_last_point false
59
+ c.timespan 1200
60
+
61
+ c.sensor :rhino_count, color: '#AAAAAA'
62
+ c.sensor :lama_count, color: '#CC1155'
63
+ c.sensor :goose_count
64
+ end
65
+
66
+ p.stack "Rhino & Lama & Goose count comparison" do |c|
67
+ c.redraw_interval 1
68
+ c.values_label 'Count'
69
+ c.width 12
70
+ c.show_last_point true
71
+ c.timespan 1200
72
+
73
+ c.sensor :rhino_count, color: '#AAAAAA'
74
+ c.sensor :lama_count, color: '#CC1155'
75
+ c.sensor :goose_count
76
+ end
77
+
78
+
79
+ end
80
+
81
+ l.page "Ages" do |p|
82
+
83
+ p.line "Lama average age", sensor: :lama_average_age do |c|
84
+ c.redraw_interval 1
85
+ c.values_label 'Age'
86
+ c.width 5
87
+ c.show_last_point true
88
+ c.timespan 1200
89
+ end
90
+
91
+ p.line "Rhino average age", sensor: :rhino_average_age do |c|
92
+ c.redraw_interval 1
93
+ c.values_label 'Age'
94
+ c.width 5
95
+ c.show_last_point true
96
+ c.timespan 1200
97
+ end
98
+
99
+ p.line "Rhino & Lama average age comparison" do |c|
100
+ c.redraw_interval 1
101
+ c.values_label 'Age'
102
+ c.width 5
103
+ c.show_last_point true
104
+ c.timespan 1200
105
+
106
+ c.sensor :lama_average_age
107
+ c.sensor :rhino_average_age
108
+ end
109
+
110
+ p.line "Rhino & Lama average age comparison" do |c|
111
+ c.redraw_interval 1
112
+ c.values_label 'Age'
113
+ c.width 5
114
+ c.show_last_point false
115
+ c.timespan 1200
116
+
117
+ c.sensor :lama_average_age
118
+ c.sensor :rhino_average_age
119
+ end
120
+
121
+ end
122
+
123
+ end
124
+
125
+ run layout.to_app
@@ -0,0 +1,97 @@
1
+ $: << File.join(File.absolute_path(__FILE__), '..', 'lib')
2
+
3
+ require "pulse_meter_core"
4
+
5
+ PulseMeter.redis = Redis.new
6
+
7
+ cfg = PulseMeter::Sensor::Configuration.new(
8
+ lama_count: {
9
+ sensor_type:'timelined/counter',
10
+ args: {
11
+ annotation: 'Lama Count',
12
+ interval: 10,
13
+ ttl: 3600
14
+ }
15
+ },
16
+
17
+ lama_count_1min: {
18
+ sensor_type:'timelined/counter',
19
+ args: {
20
+ annotation: 'Lama Count (1 min)',
21
+ interval: 60,
22
+ ttl: 3600
23
+ }
24
+ },
25
+
26
+ lama_average_age: {
27
+ sensor_type:'timelined/average',
28
+ args: {
29
+ annotation: 'Lama Average Age',
30
+ interval: 20,
31
+ ttl: 3600
32
+ }
33
+ },
34
+
35
+ rhino_count: {
36
+ sensor_type:'timelined/counter',
37
+ args: {
38
+ annotation: 'Rhino Count',
39
+ interval: 10,
40
+ ttl: 3600
41
+ }
42
+ },
43
+
44
+ goose_count: {
45
+ sensor_type:'timelined/hashed_counter',
46
+ args: {
47
+ annotation: 'Goose Count',
48
+ interval: 10,
49
+ ttl: 3600
50
+ }
51
+ },
52
+
53
+ rhino_average_age: {
54
+ sensor_type:'timelined/average',
55
+ args: {
56
+ annotation: 'Rhino average age',
57
+ interval: 20,
58
+ ttl: 3600
59
+ }
60
+ },
61
+
62
+ sensor_without_annotation: {
63
+ sensor_type:'timelined/average',
64
+ args: {
65
+ interval: 20,
66
+ ttl: 3600
67
+ }
68
+ },
69
+
70
+ cpu: {sensor_type: 'indicator'},
71
+ memory: {sensor_type: 'indicator'},
72
+ temperature: {
73
+ sensor_type: 'hashed_indicator',
74
+ args: {
75
+ annotation: 'T'
76
+ }
77
+ }
78
+ )
79
+
80
+ while true
81
+ sleep(Random.rand)
82
+ STDERR.puts "tick"
83
+ cfg.lama_count(1)
84
+ cfg.lama_count_1min(10)
85
+ cfg.rhino_count(2)
86
+ cfg.lama_average_age(Random.rand(50))
87
+ cfg.rhino_average_age(Random.rand(100))
88
+
89
+ 10.times do
90
+ goose_n = Random.rand(4)
91
+ cfg.goose_count("g_#{goose_n}" => 1)
92
+ cfg.temperature("g_#{goose_n}" => Random.rand(50))
93
+ end
94
+
95
+ cfg.cpu(Random.rand(100))
96
+ cfg.memory(Random.rand(100))
97
+ end
@@ -0,0 +1,78 @@
1
+ require 'gon-sinatra'
2
+ require 'haml'
3
+ require 'sinatra/base'
4
+ require 'sinatra/partial'
5
+
6
+ module PulseMeter
7
+ module DygraphsVisualize
8
+ class App < Sinatra::Base
9
+ include PulseMeter::Mixins::Utils
10
+ register Gon::Sinatra
11
+ register Sinatra::Partial
12
+
13
+ set :partial_template_engine, :haml
14
+
15
+ def initialize(layout)
16
+ @layout = layout
17
+ super()
18
+ end
19
+
20
+ configure :production, :development do
21
+ enable :logging
22
+ end
23
+
24
+ get '/' do
25
+ @title = @layout.title
26
+ gon.pageInfos = camelize_keys(@layout.page_infos)
27
+ gon.options = camelize_keys(@layout.options)
28
+ haml :main
29
+ end
30
+
31
+ get '/pages/:id/widgets' do
32
+ id = params[:id].to_i
33
+
34
+ content_type :json
35
+ camelize_keys(@layout.widgets(id - 1)).to_json
36
+ end
37
+
38
+ get '/pages/:page_id/widgets/:id' do
39
+ page_id = params[:page_id].to_i
40
+ id = params[:id].to_i
41
+ timespan = params[:timespan].to_i
42
+ start_time = params[:startTime].to_i
43
+ end_time = params[:endTime].to_i
44
+
45
+ content_type :json
46
+ camelize_keys(
47
+ @layout.widget(
48
+ page_id - 1,
49
+ id - 1,
50
+ timespan: timespan,
51
+ start_time: start_time,
52
+ end_time: end_time
53
+ )
54
+ ).to_json
55
+ end
56
+
57
+ get '/sensors' do
58
+ content_type :json
59
+ camelize_keys(@layout.sensor_list).to_json
60
+ end
61
+
62
+ get '/dynamic_widget' do
63
+ start_time = params[:startTime].to_i
64
+ end_time = params[:endTime].to_i
65
+ timespan = params[:timespan].to_i
66
+
67
+ content_type :json
68
+ camelize_keys(@layout.dynamic_widget(
69
+ timespan: timespan,
70
+ start_time: start_time,
71
+ end_time: end_time,
72
+ sensors: params[:sensor],
73
+ type: params[:type])
74
+ ).to_json
75
+ end
76
+ end
77
+ end
78
+ end