3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/city_watch/commander/server.rb', line 3
def call(env)
parms = Rack::Request.new(env).params.merge(env["rack.routing_args"]).inject({}){|acc,(k,v)| acc[k.to_sym] = v; acc}
server = parms[:server]
output = CityWatch. << '<h1>' << server << "</h1>"
Watchmen.each do |watchman|
flags = watchman.get_flags(server)
alerts = watchman.get_alerts(server,2)
if (flags && flags.count > 0) || (alerts && alerts.count > 0)
output << "<h3>" << watchman.name.to_s << "</h3><ul>"
if flags && flags.count > 0
output << "<li class=\"alert\"><strong>Flags:</strong> <pre><code>" << Yajl::Encoder.encode(flags,:pretty => true, :indent => " ") << "</code></pre></li>"
end
if alerts && alerts.count > 0
output << "<li class=\"alert\"><strong>Alerts:</strong></li>"
alerts.each do |alert|
output << "<li><pre><code>" << Yajl::Encoder.encode(Yajl::Parser.parse(alert),:pretty => true, :indent => " ") << "</code></pre></li>"
end
end
output << "</ul>"
end
end
output << "<ol>"
CityWatch.redis.zrevrange("#{CityWatch.config[:prefix]}::#{server}::raw_stats",0,10).each do |update|
dat = Yajl::Parser.new(:symbolize_keys => true).parse(update)
output << "<li><h4>" << dat[:received_at] << "</h4><ul>"
dat[:watchmen].each do |name,datr|
output << "<li><strong>" << name.to_s << ":</strong> <pre><code>" << Yajl::Encoder.encode(datr,:pretty => true, :indent => " ") << "</code></pre></li>"
end
output << "</ul></li>"
end
output << "</ol></body></html>"
[200,{"Content-Type" => "text/html"},[output]]
end
|