hq-grapher-web 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/hq/grapher-web/handler.rb +115 -0
  2. metadata +174 -0
@@ -0,0 +1,115 @@
1
+ require "hq/tools/escape"
2
+
3
+ module HQ
4
+ module GrapherWeb
5
+ class Handler
6
+
7
+ include HQ::Tools::Escape
8
+
9
+ def self.get_provider app_elem
10
+
11
+ config_elem =
12
+ app_elem.find_first "config"
13
+
14
+ grapher_config_path =
15
+ config_elem.attributes["path"]
16
+
17
+ grapher_config_doc =
18
+ XML::Document.file grapher_config_path
19
+
20
+ grapher_config_elem =
21
+ grapher_config_doc.root
22
+
23
+ return proc do
24
+ |env, params|
25
+
26
+ handler =
27
+ GraphHandler.new \
28
+ grapher_config_elem
29
+
30
+ handler.handle \
31
+ env,
32
+ params
33
+
34
+ end
35
+
36
+ end
37
+
38
+ def initialize config_elem
39
+ @config_elem = config_elem
40
+ end
41
+
42
+ def handle env, params
43
+
44
+ graph_name = params[:name]
45
+ scale_name = params[:scale]
46
+
47
+ rrd_database =
48
+ @config_elem.attributes["database-path"]
49
+
50
+ graph_elem =
51
+ @config_elem.find_first("
52
+ graph [@name = #{xp graph_name}]
53
+ ")
54
+
55
+ template_name =
56
+ graph_elem.attributes["template"]
57
+
58
+ template_elem =
59
+ @config_elem.find_first("
60
+ template [@name = #{xp template_name}]
61
+ ")
62
+
63
+ scale_elem =
64
+ @config_elem.find_first("
65
+ scale [@name = #{xp scale_name}]
66
+ ")
67
+
68
+ scale_steps = scale_elem.attributes["steps"].to_i
69
+ scale_rows = scale_elem.attributes["rows"].to_i
70
+
71
+ data = Mandar::Support::RRD.graph({
72
+ :start => Time.now.to_i - scale_steps * scale_rows,
73
+ :end => Time.now.to_i,
74
+ :width => scale_rows,
75
+ :height => 400,
76
+ :data => template_elem.find("data").map { |data_elem|
77
+ {
78
+ :name => data_elem.attributes["name"],
79
+ :source_file => "#{rrd_database}/#{graph_elem.attributes["source"]}.rrd",
80
+ :source_name => data_elem.attributes["source"],
81
+ :source_function => data_elem.attributes["function"],
82
+ }
83
+ },
84
+ :calc => template_elem.find("calc").map { |calc_elem|
85
+ {
86
+ :name => calc_elem.attributes["name"],
87
+ :rpn => calc_elem.attributes["rpn"],
88
+ }
89
+ },
90
+ :outputs => template_elem.find("output").map { |output_elem|
91
+ {
92
+ :type => output_elem.attributes["type"].upcase,
93
+ :data => output_elem.attributes["data"],
94
+ :colour => output_elem.attributes["colour"],
95
+ :label => output_elem.attributes["label"],
96
+ :stack => output_elem.attributes["stack"] == "yes",
97
+ }
98
+ },
99
+ })
100
+
101
+ headers = {
102
+ "Content-Type" => "image/png"
103
+ }
104
+
105
+ body = [
106
+ data
107
+ ]
108
+
109
+ return [ 200, headers, body ]
110
+
111
+ end
112
+
113
+ end
114
+ end
115
+ end
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hq-grapher-web
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - James Pharaoh
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: hq-tools
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.3.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.3.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: hq-web
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 0.0.2
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 0.0.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: capybara
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 2.0.2
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.0.2
62
+ - !ruby/object:Gem::Dependency
63
+ name: cucumber
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 1.2.1
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.2.1
78
+ - !ruby/object:Gem::Dependency
79
+ name: rake
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: 10.0.3
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 10.0.3
94
+ - !ruby/object:Gem::Dependency
95
+ name: rspec
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: 2.12.0
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 2.12.0
110
+ - !ruby/object:Gem::Dependency
111
+ name: rspec_junit_formatter
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: simplecov
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ description: HQ grapher web user interface and API
143
+ email:
144
+ - james@phsys.co.uk
145
+ executables: []
146
+ extensions: []
147
+ extra_rdoc_files: []
148
+ files:
149
+ - lib/hq/grapher-web/handler.rb
150
+ homepage: https://github.com/jamespharaoh/hq-grapher-web
151
+ licenses: []
152
+ post_install_message:
153
+ rdoc_options: []
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ! '>='
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ required_rubygems_version: !ruby/object:Gem::Requirement
163
+ none: false
164
+ requirements:
165
+ - - ! '>='
166
+ - !ruby/object:Gem::Version
167
+ version: 1.3.6
168
+ requirements: []
169
+ rubyforge_project: hq-grapher-web
170
+ rubygems_version: 1.8.23
171
+ signing_key:
172
+ specification_version: 3
173
+ summary: HQ grapher web
174
+ test_files: []