mindreframer-riemann-dash 0.2.3

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 (55) hide show
  1. data/.gitignore +8 -0
  2. data/Gemfile +7 -0
  3. data/Gemfile.lock +52 -0
  4. data/LICENSE +21 -0
  5. data/README.markdown +52 -0
  6. data/Rakefile.rb +11 -0
  7. data/bin/riemann-dash +7 -0
  8. data/example/config.rb +17 -0
  9. data/lib/riemann/dash.rb +5 -0
  10. data/lib/riemann/dash/app.rb +32 -0
  11. data/lib/riemann/dash/config.rb +154 -0
  12. data/lib/riemann/dash/controller/css.rb +5 -0
  13. data/lib/riemann/dash/controller/index.rb +20 -0
  14. data/lib/riemann/dash/public/clock.js +45 -0
  15. data/lib/riemann/dash/public/dash.js +287 -0
  16. data/lib/riemann/dash/public/format.js +24 -0
  17. data/lib/riemann/dash/public/jquery-1.7.2.min.js +4 -0
  18. data/lib/riemann/dash/public/jquery-ui-1.9.0.custom.min.js +6 -0
  19. data/lib/riemann/dash/public/jquery.json-2.2.min.js +31 -0
  20. data/lib/riemann/dash/public/jquery.quickfit.js +144 -0
  21. data/lib/riemann/dash/public/jquery.simplemodal.1.4.3.min.js +26 -0
  22. data/lib/riemann/dash/public/keys.js +46 -0
  23. data/lib/riemann/dash/public/mustache.js +597 -0
  24. data/lib/riemann/dash/public/persistence.js +30 -0
  25. data/lib/riemann/dash/public/profile.js +33 -0
  26. data/lib/riemann/dash/public/subs.js +164 -0
  27. data/lib/riemann/dash/public/toastr.css +174 -0
  28. data/lib/riemann/dash/public/toastr.js +207 -0
  29. data/lib/riemann/dash/public/toolbar.js +217 -0
  30. data/lib/riemann/dash/public/underscore-min.js +5 -0
  31. data/lib/riemann/dash/public/util.js +34 -0
  32. data/lib/riemann/dash/public/vendor/smoothie.js +374 -0
  33. data/lib/riemann/dash/public/view.js +704 -0
  34. data/lib/riemann/dash/public/views/gauge.js +76 -0
  35. data/lib/riemann/dash/public/views/grid.js +279 -0
  36. data/lib/riemann/dash/public/views/help.js +28 -0
  37. data/lib/riemann/dash/public/views/timeseries.js +107 -0
  38. data/lib/riemann/dash/public/views/title.js +35 -0
  39. data/lib/riemann/dash/public/x.png +0 -0
  40. data/lib/riemann/dash/rack/static.rb +16 -0
  41. data/lib/riemann/dash/version.rb +4 -0
  42. data/lib/riemann/dash/views/css.scss +393 -0
  43. data/lib/riemann/dash/views/index.erubis +203 -0
  44. data/lib/riemann/dash/views/layout.erubis +21 -0
  45. data/riemann-dash.gemspec +28 -0
  46. data/sh/c +1 -0
  47. data/sh/env.rb +2 -0
  48. data/sh/test +1 -0
  49. data/test/config_test.rb +106 -0
  50. data/test/fixtures/config/basic_config.rb +2 -0
  51. data/test/fixtures/config/ws_config.rb +1 -0
  52. data/test/fixtures/ws_config/dummy_config.json +1 -0
  53. data/test/fixtures/ws_config/pretty_printed_config.json +6 -0
  54. data/test/test_helper.rb +10 -0
  55. metadata +202 -0
@@ -0,0 +1,203 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <title>Riemann</title>
6
+ <link rel="stylesheet" href="/css" type="text/css" />
7
+ <link rel="stylesheet" href="/toastr.css" type="text/css" />
8
+ </head>
9
+ <body>
10
+ <div id="toolbar"></div>
11
+ <div id="view"></div>
12
+ <script type="text/javascript" src="/vendor/smoothie.js"></script>
13
+ <script type="text/javascript" src="/underscore-min.js"></script>
14
+ <script type="text/javascript" src="/jquery-1.7.2.min.js"></script>
15
+ <script type="text/javascript" src="/jquery-ui-1.9.0.custom.min.js"></script>
16
+ <script type="text/javascript" src="/jquery.json-2.2.min.js"></script>
17
+ <script type="text/javascript" src="/jquery.simplemodal.1.4.3.min.js"></script>
18
+ <script type="text/javascript" src="/toastr.js"></script>
19
+ <script type="text/javascript" src="/jquery.quickfit.js"></script>
20
+ <script type="text/javascript" src="/util.js"></script>
21
+ <script type="text/javascript" src="/mustache.js"></script>
22
+ <script src="http://d3js.org/d3.v2.js"></script>
23
+ <script type="text/javascript" src="/profile.js"></script>
24
+ <script type="text/javascript" src="/clock.js"></script>
25
+ <script type="text/javascript" src="/persistence.js"></script>
26
+ <script type="text/javascript" src="/keys.js"></script>
27
+ <script type="text/javascript" src="/subs.js"></script>
28
+ <script type="text/javascript" src="/format.js"></script>
29
+ <script type="text/javascript" src="/toolbar.js"></script>
30
+ <script type="text/javascript" src="/view.js"></script>
31
+ <script type="text/javascript" src="/views/timeseries.js"></script>
32
+ <script type="text/javascript" src="/views/title.js"></script>
33
+ <script type="text/javascript" src="/views/help.js"></script>
34
+ <script type="text/javascript" src="/views/gauge.js"></script>
35
+ <script type="text/javascript" src="/views/grid.js"></script>
36
+ <script type="text/javascript" src="/dash.js"></script>
37
+
38
+ <script type="text/javascript">
39
+ function logTable(container, query) {
40
+ var $container = $(container);
41
+ $container.addClass("log-table");
42
+ $container.append('<input type="text" class="query"></input>');
43
+ var prompt = $container.find('input');
44
+ $container.append('<div class="scroll"><table><thead><tr>' +
45
+ '<th>host</th>' +
46
+ '<th>service</th>' +
47
+ '<th>state</th>' +
48
+ '<th>metric</th>' +
49
+ '<th>description</th>' +
50
+ '</tr></thead><tbody></tbody></table></div>');
51
+ var scroll = $container.find('.scroll');
52
+ var log = $container.find('tbody');
53
+ var sub = null;
54
+ var tracking = true;
55
+
56
+ var template = "<tr><td>{{host}}</td><td>{{service}}</td><td>{{state}}</td><td>{{{metric}}}</td><td>{{description}}</td></tr>";
57
+
58
+ // Are we following the bottom of the log?
59
+ scroll.scroll(function(e) {
60
+ if (scroll.scrollTop() > (log.height() - scroll.height())) {
61
+ tracking = true;
62
+ } else {
63
+ tracking = false;
64
+ }
65
+ });
66
+
67
+ var scrollToBottom = function() {
68
+ scroll.stop().animate({
69
+ scrollTop: (log.height() - scroll.height() + 20)
70
+ }, 1000, "swing");
71
+ }
72
+
73
+ var atBottom = function() {
74
+ console.log(scroll.scrollTop());
75
+ console.log(log.height() - scroll.height());
76
+ return (scroll.scrollTop() > (log.height() - scroll.height()));
77
+ }
78
+
79
+ // Add an event
80
+ var append = function(e) {
81
+ $.extend(e, {
82
+ metric: format.metric(e)
83
+ });
84
+ log.append(Mustache.render(template, e));
85
+ if (tracking) { scrollToBottom() };
86
+ }
87
+
88
+ // Set up our query
89
+ var startQuery = function(query) {
90
+ // Cancel existing sub
91
+ if (sub != null) { sub.close(); }
92
+
93
+ // Subscribe
94
+ sub = subs.subscribe(query, function(e) {
95
+ e.time = d3.time.format.iso.parse(e.time);
96
+ clock.advance(e.time);
97
+ append(e);
98
+ });
99
+ }
100
+
101
+ // Initial subscription
102
+ if (query) { prompt[0].value = query; startQuery(query); }
103
+
104
+ // Prompt entry
105
+ prompt.change(function() { startQuery(this.value) });
106
+ }
107
+
108
+
109
+ function timeSeries(container) {
110
+ // Container
111
+ var $container = $(container);
112
+ var container = d3.select(container);
113
+ $container.append('<input type=\"text\" style="display: block"></input>');
114
+ var prompt = $container.children().last();
115
+
116
+ // Data structures
117
+ var data = [];
118
+ var n = 60;
119
+ var sub = null;
120
+
121
+ // Scale
122
+ var w = 20;
123
+ var h = 80;
124
+
125
+ var x = d3.time.scale()
126
+ .domain([0,1])
127
+ .range([0, w * n]);
128
+ var y = d3.scale.linear()
129
+ .domain([0,100])
130
+ .rangeRound([0,h]);
131
+
132
+ var updateTime = function(max) {
133
+ var min = d3.time.minute.offset(max, -1);
134
+ x.domain([min, max]);
135
+ }
136
+ updateTime(new Date());
137
+
138
+ // Chart itself
139
+ var chart = container.append("svg")
140
+ .attr("class", "timeSeries")
141
+ .attr("width", w * (n - 1))
142
+ .attr("height", h);
143
+
144
+ // Baseline
145
+ chart.append("line")
146
+ .attr("x1", 0)
147
+ .attr("x2", w * n)
148
+ .attr("y1", h - .5)
149
+ .attr("y2", h - .5)
150
+ .style("stroke", "#000");
151
+
152
+ // Subscribe
153
+ prompt.change(function() {
154
+ if (sub != null) { sub.close(); }
155
+
156
+ sub = subscribe(this.value, function(e) {
157
+ // Move time
158
+ e.time = d3.time.format.iso.parse(e.time);
159
+ clock.advance(e.time);
160
+
161
+ // Append to window
162
+ if (data.length >= n) {
163
+ data.shift();
164
+ }
165
+ data.push(e);
166
+
167
+ console.log(e.time, "maps to", x(e.time), "in", x.domain(), x.range());
168
+ });
169
+ });
170
+
171
+ var clockSub = clock.register(function(t) {
172
+ updateTime(t);
173
+
174
+ // Move events
175
+ var rect = chart.selectAll("rect")
176
+ .data(data, function(e) { if (e) { return e.time } });
177
+
178
+ rect.enter().insert("rect", "line")
179
+ .attr("x", function(e, i) {
180
+ return x(e.time) - .5; })
181
+ .attr("y", function(e) { return h - y(e.metric) - .5 })
182
+ .attr("width", w)
183
+ .attr("height", function(e) { return y(e.metric); })
184
+ .transition()
185
+ .duration(1000)
186
+ .attr("x", function(e, i) { return x(e.time) - .5 });
187
+
188
+ rect.transition()
189
+ .duration(1000)
190
+ .attr("x", function(e) { return x(e.time) - .5; });
191
+
192
+ rect.exit().transition()
193
+ .duration(1000)
194
+ .attr("x", function(e) { return x(e.time) - .5 })
195
+ .remove();
196
+ });
197
+
198
+ }
199
+
200
+ dash.reload();
201
+ </script>
202
+ </body>
203
+ </html>
@@ -0,0 +1,21 @@
1
+ <html>
2
+ <head>
3
+ <title>Dashboard</title>
4
+ <link rel="stylesheet" type="text/css" href="/css" />
5
+
6
+ <script type="text/javascript">
7
+ setTimeout(function() {
8
+ location.reload(true);
9
+ }, 10000);
10
+ </script>
11
+ </head>
12
+
13
+ <body onload="refresh();">
14
+ <div>
15
+ <h1>Dashboard</h1>
16
+ <span style="position: absolute; top: 4px; right: 4px;">(as of <%= time Time.now.to_i %>)</span>
17
+ </div>
18
+
19
+ <%= yield %>
20
+ </body>
21
+ </html>
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'riemann/dash/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.rubyforge_project = 'mindreframer-riemann-dash'
8
+
9
+ gem.name = "mindreframer-riemann-dash"
10
+ gem.version = Riemann::Dash::VERSION
11
+ gem.authors = ["Kyle Kingsbury"]
12
+ gem.email = ['aphyr@aphyr.com']
13
+ gem.description = %q{HTTP dashboard for the distributed event system Riemann.}
14
+ gem.summary = gem.description
15
+ gem.homepage = 'https://github.com/aphyr/riemann-dash'
16
+ gem.platform = Gem::Platform::RUBY
17
+
18
+ gem.add_dependency 'riemann-client', '>= 0.0.7'
19
+ gem.add_dependency 'erubis', '>= 2.7.0'
20
+ gem.add_dependency 'sinatra', '>= 1.3.2'
21
+ gem.add_dependency 'sass', '>= 3.1.14'
22
+ gem.add_dependency 'thin', '>= 1.3.1'
23
+ gem.add_dependency 'multi_json', '1.3.6'
24
+ gem.files = `git ls-files`.split($/)
25
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
26
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
27
+ gem.require_paths = ["lib"]
28
+ end
data/sh/c ADDED
@@ -0,0 +1 @@
1
+ irb -r ./sh/env.rb
data/sh/env.rb ADDED
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
2
+ require 'riemann/dash'
data/sh/test ADDED
@@ -0,0 +1 @@
1
+ rake
@@ -0,0 +1,106 @@
1
+ require './test/test_helper'
2
+
3
+
4
+ describe "Riemann::Dash::Config" do
5
+ before do
6
+ @config = Riemann::Dash::Config.instance
7
+ end
8
+
9
+ after do
10
+ Riemann::Dash::Config.reset!
11
+ end
12
+
13
+ it "is loaded" do
14
+ @config.wont_be_nil
15
+ end
16
+
17
+ describe :load_config do
18
+ it "will apply configs from specified file to sinatra app" do
19
+ @config.load_config("test/fixtures/config/basic_config.rb")
20
+ Riemann::Dash::App.settings.settings_loaded.must_equal "yes"
21
+ end
22
+
23
+ it "will apply settings from file to self" do
24
+ @config.store[:views].wont_equal "/some/path/to/views"
25
+ @config.load_config("test/fixtures/config/basic_config.rb")
26
+ @config.store[:views].must_equal "/some/path/to/views"
27
+ end
28
+ end
29
+
30
+ describe :setup_default_values do
31
+ it "has controllers path" do
32
+ @config.store[:controllers].first.must_match %r{/lib/riemann/dash/controller}
33
+ @config.store[:controllers].class.must_equal Array
34
+ end
35
+
36
+ it "has view path" do
37
+ @config.store[:views].must_match %r{/lib/riemann/dash/view}
38
+ end
39
+
40
+ it "has public path" do
41
+ @config.store[:public].must_match %r{/lib/riemann/dash/public}
42
+ end
43
+
44
+ it "has workspace config" do
45
+ @config.store[:ws_config].must_match %r{/lib/riemann/config/config.json}
46
+ end
47
+
48
+ end
49
+
50
+ describe "applying to sinatra app" do
51
+ describe :load_controllers do
52
+
53
+ end
54
+
55
+ describe :setup_views do
56
+
57
+ end
58
+
59
+
60
+ describe :setup_public_dir do
61
+
62
+ end
63
+ end
64
+
65
+ describe "workspace config" do
66
+ before do
67
+ FileUtils.rm_rf "test/tmp/"
68
+ end
69
+
70
+ describe :read_ws_config do
71
+ it "retuns hash for empty configs" do
72
+ @config.read_ws_config.must_equal "{}"
73
+ end
74
+
75
+ it "reads the file, if present" do
76
+ @config.load_config("test/fixtures/config/ws_config.rb").must_equal true
77
+ @config.store[:ws_config].must_equal "test/fixtures/ws_config/dummy_config.json"
78
+ @config.read_ws_config.must_equal %Q{{hey: \"ho\"}}
79
+ end
80
+ end
81
+
82
+ describe :update_ws_config do
83
+ it "works" do
84
+ @config.store[:ws_config] = "test/tmp/config.json"
85
+ @config.update_ws_config("{\"server\":\"10.10.10.10\",\"workspaces\":[]}")
86
+ end
87
+
88
+ it "pretty-prints the config" do
89
+ @config.store[:ws_config] = "test/tmp/config.json"
90
+ @config.update_ws_config("{\"server\":\"10.10.10.10\",\"workspaces\":[]}")
91
+ File.read("test/tmp/config.json").must_equal File.read("test/fixtures/ws_config/pretty_printed_config.json")
92
+ end
93
+ end
94
+ end
95
+
96
+ describe "backwards compatible :[] and :[]= forwarders to `store` variable" do
97
+ it "reading works" do
98
+ @config[:ws_config].must_match %r{lib/riemann/config/config.json}
99
+ end
100
+
101
+ it "writing works" do
102
+ @config[:ws_config] = "something"
103
+ @config[:ws_config].must_match %r{something}
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,2 @@
1
+ set :settings_loaded, "yes"
2
+ config.store[:views] = "/some/path/to/views"
@@ -0,0 +1 @@
1
+ config.store[:ws_config] = "test/fixtures/ws_config/dummy_config.json"
@@ -0,0 +1 @@
1
+ {hey: "ho"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "server": "10.10.10.10",
3
+ "workspaces": [
4
+
5
+ ]
6
+ }
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ Bundler.setup(:default, :test)
4
+
5
+ require 'minitest/autorun'
6
+ require 'minitest/spec'
7
+ #require "mocha/setup"
8
+
9
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
10
+ require 'riemann/dash'
metadata ADDED
@@ -0,0 +1,202 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mindreframer-riemann-dash
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.3
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kyle Kingsbury
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: riemann-client
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.0.7
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.0.7
30
+ - !ruby/object:Gem::Dependency
31
+ name: erubis
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 2.7.0
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: 2.7.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: sinatra
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 1.3.2
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.3.2
62
+ - !ruby/object:Gem::Dependency
63
+ name: sass
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 3.1.14
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 3.1.14
78
+ - !ruby/object:Gem::Dependency
79
+ name: thin
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: 1.3.1
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.3.1
94
+ - !ruby/object:Gem::Dependency
95
+ name: multi_json
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - '='
100
+ - !ruby/object:Gem::Version
101
+ version: 1.3.6
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 1.3.6
110
+ description: HTTP dashboard for the distributed event system Riemann.
111
+ email:
112
+ - aphyr@aphyr.com
113
+ executables:
114
+ - riemann-dash
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - .gitignore
119
+ - Gemfile
120
+ - Gemfile.lock
121
+ - LICENSE
122
+ - README.markdown
123
+ - Rakefile.rb
124
+ - bin/riemann-dash
125
+ - example/config.rb
126
+ - lib/riemann/dash.rb
127
+ - lib/riemann/dash/app.rb
128
+ - lib/riemann/dash/config.rb
129
+ - lib/riemann/dash/controller/css.rb
130
+ - lib/riemann/dash/controller/index.rb
131
+ - lib/riemann/dash/public/clock.js
132
+ - lib/riemann/dash/public/dash.js
133
+ - lib/riemann/dash/public/format.js
134
+ - lib/riemann/dash/public/jquery-1.7.2.min.js
135
+ - lib/riemann/dash/public/jquery-ui-1.9.0.custom.min.js
136
+ - lib/riemann/dash/public/jquery.json-2.2.min.js
137
+ - lib/riemann/dash/public/jquery.quickfit.js
138
+ - lib/riemann/dash/public/jquery.simplemodal.1.4.3.min.js
139
+ - lib/riemann/dash/public/keys.js
140
+ - lib/riemann/dash/public/mustache.js
141
+ - lib/riemann/dash/public/persistence.js
142
+ - lib/riemann/dash/public/profile.js
143
+ - lib/riemann/dash/public/subs.js
144
+ - lib/riemann/dash/public/toastr.css
145
+ - lib/riemann/dash/public/toastr.js
146
+ - lib/riemann/dash/public/toolbar.js
147
+ - lib/riemann/dash/public/underscore-min.js
148
+ - lib/riemann/dash/public/util.js
149
+ - lib/riemann/dash/public/vendor/smoothie.js
150
+ - lib/riemann/dash/public/view.js
151
+ - lib/riemann/dash/public/views/gauge.js
152
+ - lib/riemann/dash/public/views/grid.js
153
+ - lib/riemann/dash/public/views/help.js
154
+ - lib/riemann/dash/public/views/timeseries.js
155
+ - lib/riemann/dash/public/views/title.js
156
+ - lib/riemann/dash/public/x.png
157
+ - lib/riemann/dash/rack/static.rb
158
+ - lib/riemann/dash/version.rb
159
+ - lib/riemann/dash/views/css.scss
160
+ - lib/riemann/dash/views/index.erubis
161
+ - lib/riemann/dash/views/layout.erubis
162
+ - riemann-dash.gemspec
163
+ - sh/c
164
+ - sh/env.rb
165
+ - sh/test
166
+ - test/config_test.rb
167
+ - test/fixtures/config/basic_config.rb
168
+ - test/fixtures/config/ws_config.rb
169
+ - test/fixtures/ws_config/dummy_config.json
170
+ - test/fixtures/ws_config/pretty_printed_config.json
171
+ - test/test_helper.rb
172
+ homepage: https://github.com/aphyr/riemann-dash
173
+ licenses: []
174
+ post_install_message:
175
+ rdoc_options: []
176
+ require_paths:
177
+ - lib
178
+ required_ruby_version: !ruby/object:Gem::Requirement
179
+ none: false
180
+ requirements:
181
+ - - ! '>='
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ required_rubygems_version: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ requirements: []
191
+ rubyforge_project: mindreframer-riemann-dash
192
+ rubygems_version: 1.8.25
193
+ signing_key:
194
+ specification_version: 3
195
+ summary: HTTP dashboard for the distributed event system Riemann.
196
+ test_files:
197
+ - test/config_test.rb
198
+ - test/fixtures/config/basic_config.rb
199
+ - test/fixtures/config/ws_config.rb
200
+ - test/fixtures/ws_config/dummy_config.json
201
+ - test/fixtures/ws_config/pretty_printed_config.json
202
+ - test/test_helper.rb