Name | Total Lines | Lines of Code | Total Coverage | Code Coverage |
---|---|---|---|---|
lib/noah/app.rb | 317 | 275 | 81.07%
|
79.27%
|
Code reported as executed by Ruby looks like this...and this: this line is also marked as covered.Lines considered as run by rcov, but not reported by Ruby, look like this,and this: these lines were inferred by rcov (using simple heuristics).Finally, here's a line marked as not executed.
1 require 'sinatra/base' |
2 require 'sinatra/namespace' |
3 require 'ohm' |
4 require 'ohm/contrib' |
5 |
6 require File.join(File.dirname(__FILE__), 'helpers') |
7 require File.join(File.dirname(__FILE__), 'models') |
8 |
9 module Noah |
10 class App < Sinatra::Base |
11 register ::Sinatra::Namespace |
12 |
13 helpers Noah::SinatraHelpers |
14 |
15 configure do |
16 set :app_file, __FILE__ |
17 set :root, File.expand_path(File.join(File.dirname(__FILE__), "..","..")) |
18 set :server, %w[thin mongrel webrick] |
19 set :logging, true |
20 set :raise_errors, false |
21 set :show_exceptions, false |
22 end |
23 |
24 configure(:development) do |
25 begin |
26 require 'sinatra/reloader' |
27 register Sinatra::Reloader |
28 also_reload File.join(File.dirname(__FILE__), 'models.rb') |
29 also_reload File.join(File.dirname(__FILE__), 'helpers.rb') |
30 rescue LoadError |
31 puts "sinatra-reloader gem missing. reloading disabled" |
32 end |
33 end |
34 |
35 before do |
36 content_type "application/json" |
37 end |
38 |
39 get '/' do |
40 content_type "text/html" |
41 |
42 haml :index, :format => :html5 |
43 end |
44 |
45 not_found do |
46 content_type "application/json" |
47 erb :'404' |
48 end |
49 |
50 error do |
51 content_type "application/json" |
52 erb :'500' |
53 end |
54 |
55 namespace "/h" do |
56 |
57 get '/:hostname/:servicename/?' do |hostname, servicename| |
58 h = host_service(hostname, servicename) |
59 if h.nil? |
60 halt 404 |
61 else |
62 h.to_json |
63 end |
64 end |
65 |
66 get '/:hostname/?' do |hostname| |
67 h = host(:name => hostname) |
68 if h.nil? |
69 halt 404 |
70 else |
71 h.to_json |
72 end |
73 end |
74 |
75 get '/?' do |
76 hosts.map {|h| h.to_hash} |
77 if hosts.size == 0 |
78 halt 404 |
79 else |
80 hosts.to_json |
81 end |
82 end |
83 |
84 put '/:hostname/?' do |hostname| |
85 required_params = ["name", "status"] |
86 data = JSON.parse(request.body.read) |
87 (data.keys.sort == required_params.sort && data['name'] == hostname) ? (host = ::Host.find_or_create(:name => data['name'], :status => data['status'])) : (raise "Missing Parameters") |
88 if host.valid? |
89 r = {"result" => "success","id" => "#{host.id}","status" => "#{host.status}", "name" => "#{host.name}", "new_record" => host.is_new?} |
90 r.to_json |
91 else |
92 raise "#{host.errors}" |
93 end |
94 end |
95 |
96 delete '/:hostname/?' do |hostname| |
97 host = ::Host.find(:name => hostname).first |
98 if host |
99 services = [] |
100 Service.find(:host_id => host.id).sort.each {|x| services << x; x.delete} if host.services.size > 0 |
101 host.delete |
102 r = {"result" => "success", "id" => "#{host.id}", "name" => "#{hostname}", "service_count" => "#{services.size}"} |
103 r.to_json |
104 else |
105 halt 404 |
106 end |
107 end |
108 |
109 end |
110 |
111 namespace "/s" do |
112 |
113 get '/:servicename/:hostname/?' do |servicename, hostname| |
114 hs = host_service(hostname, servicename) |
115 if hs.nil? |
116 halt 404 |
117 else |
118 hs.to_json |
119 end |
120 end |
121 |
122 get '/:servicename/?' do |servicename| |
123 s = services(:name => servicename) |
124 s.map {|x| x.to_hash} |
125 if s.empty? |
126 halt 404 |
127 else |
128 s.to_json |
129 end |
130 end |
131 |
132 get '/?' do |
133 if services.empty? |
134 halt 404 |
135 else |
136 services.map {|s| s.to_hash} |
137 services.to_json |
138 end |
139 end |
140 |
141 put '/:servicename/?' do |servicename| |
142 required_params = ["status", "host", "name"] |
143 data = JSON.parse(request.body.read) |
144 if data.keys.sort == required_params.sort |
145 h = ::Host.find(:name => data['host']).first || (raise "Invalid Host") |
146 service = ::Service.find_or_create(:name => servicename, :status => data['status'], :host => h) |
147 if service.valid? |
148 action = service.is_new? ? "create" : "update" |
149 service.save |
150 r = {"action" => action, "result" => "success", "id" => service.id, "host" => h.name, "name" => service.name} |
151 r.to_json |
152 else |
153 raise "#{service.errors}" |
154 end |
155 else |
156 raise "Missing Parameters" |
157 end |
158 end |
159 |
160 delete '/:servicename/:hostname/?' do |servicename, hostname| |
161 host = ::Host.find(:name => hostname).first || (halt 404) |
162 service = ::Service.find(:name => servicename, :host_id => host.id).first || (halt 404) |
163 if host && service |
164 service.delete |
165 r = {"action" => "delete", "result" => "success", "id" => service.id, "host" => host.name, "service" => servicename} |
166 r.to_json |
167 else |
168 halt 404 |
169 end |
170 end |
171 |
172 end |
173 |
174 namespace "/a" do |
175 |
176 get '/:appname/:config/?' do |appname, config| |
177 app = ::Application.find(:name => appname).first |
178 if app.nil? |
179 halt 404 |
180 else |
181 c = ::Configuration.find(:name => config, :application_id => app.id).first |
182 c.to_json |
183 end |
184 end |
185 |
186 get '/:appname/?' do |appname| |
187 app = ::Application.find(:name => appname).first |
188 if app.nil? |
189 halt 404 |
190 else |
191 app.to_json |
192 end |
193 end |
194 |
195 put '/:appname/?' do |appname| |
196 required_params = ["name"] |
197 data = JSON.parse(request.body.read) |
198 if data.keys.sort == required_params.sort && data['name'] == appname |
199 app = ::Application.find_or_create(:name => appname) |
200 else |
201 raise "Missing Parameters" |
202 end |
203 if app.valid? |
204 action = app.is_new? ? "create" : "update" |
205 app.save |
206 r = {"result" => "success","id" => app.id, "action" => action, "name" => app.name } |
207 r.to_json |
208 else |
209 raise "#{app.errors}" |
210 end |
211 end |
212 |
213 delete '/:appname/?' do |appname| |
214 app = ::Application.find(:name => appname).first |
215 if app.nil? |
216 halt 404 |
217 else |
218 configurations = [] |
219 ::Configuration.find(:application_id => app.id).sort.each {|x| configurations << x; x.delete} if app.configurations.size > 0 |
220 app.delete |
221 r = {"result" => "success", "action" => "delete", "id" => "#{app.id}", "name" => "#{appname}", "configurations" => "#{configurations.size}"} |
222 r.to_json |
223 end |
224 end |
225 |
226 get '/?' do |
227 apps = [] |
228 ::Application.all.sort.each {|a| apps << a.to_hash} |
229 if apps.empty? |
230 halt 404 |
231 else |
232 apps.to_json |
233 end |
234 end |
235 |
236 end |
237 |
238 namespace '/c' do |
239 |
240 # Need to move this out to configuration. |
241 # Maybe bootstrap them from itself? |
242 content_type_mapping = { |
243 :yaml => "text/x-yaml", |
244 :json => "application/json", |
245 :xml => "text/xml", |
246 :string => "text/plain" |
247 } |
248 |
249 get '/:appname/:element/?' do |appname, element| |
250 a = ::Application.find(:name => appname).first |
251 if a.nil? |
252 halt 404 |
253 else |
254 c = ::Configuration.find(:name => element, :application_id => a.id).first |
255 content_type content_type_mapping[c.format.to_sym] if content_type_mapping[c.format.to_sym] |
256 c.body |
257 end |
258 end |
259 |
260 get '/:appname/?' do |appname| |
261 config = [] |
262 a = ::Application.find(:name => appname).first |
263 if a.nil? |
264 halt 404 |
265 else |
266 ::Configuration.find(:application_id => a.id).sort.each {|c| config << c.to_hash} |
267 config.to_json |
268 end |
269 end |
270 |
271 get '/?' do |
272 configs = [] |
273 ::Configuration.all.sort.each {|c| configs << c.to_hash} |
274 if configs.empty? |
275 halt 404 |
276 else |
277 configs.to_json |
278 end |
279 end |
280 |
281 put '/:appname/:element?' do |appname, element| |
282 app = ::Application.find_or_create(:name => appname) |
283 config = ::Configuration.find_or_create(:name => element, :application_id => app.id) |
284 required_params = ["format", "body"] |
285 data = JSON.parse(request.body.read) |
286 data.keys.sort == required_params.sort ? (config.format = data["format"]; config.body = data["body"]) : (raise "Missing Parameters") |
287 if config.valid? |
288 config.save |
289 action = config.is_new? ? "create" : "update" |
290 dependency_action = app.is_new? ? "created" : "updated" |
291 r = {"result" => "success","id" => "#{config.id}", "action" => action, "dependencies" => dependency_action, "application" => app.name, "item" => config.name} |
292 r.to_json |
293 else |
294 raise "#{config.errors}" |
295 end |
296 end |
297 |
298 delete '/:appname/:element?' do |appname, element| |
299 app = ::Application.find(:name => appname).first |
300 if app |
301 config = ::Configuration.find(:name=> element, :application_id => app.id).first |
302 if config |
303 config.delete |
304 r = {"result" => "success", "id" => "#{config.id}", "action" => "delete", "application" => "#{app.name}", "item" => "#{element}"} |
305 r.to_json |
306 else |
307 halt 404 |
308 end |
309 else |
310 halt 404 |
311 end |
312 end |
313 |
314 end |
315 # run! if app_file == $0 |
316 end |
317 end |
Generated on 2011-02-08 01:54:21 -0500 with rcov 0.9.8