riemann-dash 0.2.1 → 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.
- data/.gitignore +9 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +52 -0
- data/README.markdown +29 -5
- data/Rakefile.rb +11 -0
- data/bin/riemann-dash +2 -2
- data/example/config.rb +17 -0
- data/lib/riemann/dash/app.rb +32 -0
- data/lib/riemann/dash/config.rb +154 -0
- data/lib/riemann/dash/controller/css.rb +1 -1
- data/lib/riemann/dash/controller/index.rb +6 -36
- data/lib/riemann/dash/public/dash.js +44 -18
- data/lib/riemann/dash/public/format.js +3 -3
- data/lib/riemann/dash/public/persistence.js +2 -2
- data/lib/riemann/dash/public/subs.js +63 -48
- data/lib/riemann/dash/public/util.js +37 -44
- data/lib/riemann/dash/public/vendor/backbone.js +1571 -0
- data/lib/riemann/dash/public/vendor/jquery/jquery-1.9.1.min.js +5 -0
- data/lib/riemann/dash/public/{jquery-ui-1.9.0.custom.min.js → vendor/jquery/jquery-ui-1.9.0.custom.min.js} +0 -0
- data/lib/riemann/dash/public/{jquery.quickfit.js → vendor/jquery/jquery.quickfit.js} +0 -0
- data/lib/riemann/dash/public/vendor/jquery/jquery.simplemodal.1.4.4.min.js +26 -0
- data/lib/riemann/dash/public/vendor/lodash.min.js +40 -0
- data/lib/riemann/dash/public/vendor/smoothie.js +376 -0
- data/lib/riemann/dash/public/{toastr.css → vendor/toastr/toastr.css} +1 -1
- data/lib/riemann/dash/public/{toastr.js → vendor/toastr/toastr.js} +0 -0
- data/lib/riemann/dash/public/views/gauge.js +8 -5
- data/lib/riemann/dash/public/views/grid.js +138 -67
- data/lib/riemann/dash/public/views/timeseries.js +230 -0
- data/lib/riemann/dash/public/views/title.js +6 -3
- data/lib/riemann/dash/version.rb +2 -2
- data/lib/riemann/dash/views/css.scss +52 -2
- data/lib/riemann/dash/views/index.erubis +38 -192
- data/lib/riemann/dash.rb +3 -97
- data/riemann-dash.gemspec +28 -0
- data/sh/c +1 -0
- data/sh/env.rb +2 -0
- data/sh/test +1 -0
- data/test/config_test.rb +114 -0
- data/test/fixtures/config/basic_config.rb +2 -0
- data/test/fixtures/config/ws_config.rb +1 -0
- data/test/fixtures/ws_config/dummy_config.json +1 -0
- data/test/fixtures/ws_config/pretty_printed_config.json +6 -0
- data/test/test_helper.rb +10 -0
- metadata +43 -18
- data/lib/riemann/dash/public/jquery-1.7.2.min.js +0 -4
- data/lib/riemann/dash/public/jquery.json-2.2.min.js +0 -31
- data/lib/riemann/dash/public/jquery.simplemodal.1.4.3.min.js +0 -26
- data/lib/riemann/dash/public/mustache.js +0 -597
- data/lib/riemann/dash/public/underscore-min.js +0 -5
@@ -1,202 +1,48 @@
|
|
1
|
-
<!
|
2
|
-
<html>
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
3
|
<head>
|
4
4
|
<meta charset="UTF-8" />
|
5
|
-
<title>
|
6
|
-
<link rel="stylesheet"
|
7
|
-
<link rel="stylesheet"
|
5
|
+
<title>riemann</title>
|
6
|
+
<link rel="stylesheet" type="text/css" href="/vendor/toastr/toastr.css" />
|
7
|
+
<link rel="stylesheet" type="text/css" href="/css" />
|
8
8
|
</head>
|
9
9
|
<body>
|
10
10
|
<div id="toolbar"></div>
|
11
11
|
<div id="view"></div>
|
12
12
|
|
13
|
-
|
14
|
-
<script
|
15
|
-
<script
|
16
|
-
<script
|
17
|
-
<script
|
18
|
-
<script
|
19
|
-
<script
|
20
|
-
<script
|
21
|
-
<script
|
22
|
-
<script
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
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/title.js"></script>
|
32
|
-
<script type="text/javascript" src="/views/help.js"></script>
|
33
|
-
<script type="text/javascript" src="/views/gauge.js"></script>
|
34
|
-
<script type="text/javascript" src="/views/grid.js"></script>
|
35
|
-
<script type="text/javascript" src="/dash.js"></script>
|
36
|
-
|
37
|
-
<script type="text/javascript">
|
38
|
-
function logTable(container, query) {
|
39
|
-
var $container = $(container);
|
40
|
-
$container.addClass("log-table");
|
41
|
-
$container.append('<input type="text" class="query"></input>');
|
42
|
-
var prompt = $container.find('input');
|
43
|
-
$container.append('<div class="scroll"><table><thead><tr>' +
|
44
|
-
'<th>host</th>' +
|
45
|
-
'<th>service</th>' +
|
46
|
-
'<th>state</th>' +
|
47
|
-
'<th>metric</th>' +
|
48
|
-
'<th>description</th>' +
|
49
|
-
'</tr></thead><tbody></tbody></table></div>');
|
50
|
-
var scroll = $container.find('.scroll');
|
51
|
-
var log = $container.find('tbody');
|
52
|
-
var sub = null;
|
53
|
-
var tracking = true;
|
54
|
-
|
55
|
-
var template = "<tr><td>{{host}}</td><td>{{service}}</td><td>{{state}}</td><td>{{{metric}}}</td><td>{{description}}</td></tr>";
|
56
|
-
|
57
|
-
// Are we following the bottom of the log?
|
58
|
-
scroll.scroll(function(e) {
|
59
|
-
if (scroll.scrollTop() > (log.height() - scroll.height())) {
|
60
|
-
tracking = true;
|
61
|
-
} else {
|
62
|
-
tracking = false;
|
63
|
-
}
|
64
|
-
});
|
65
|
-
|
66
|
-
var scrollToBottom = function() {
|
67
|
-
scroll.stop().animate({
|
68
|
-
scrollTop: (log.height() - scroll.height() + 20)
|
69
|
-
}, 1000, "swing");
|
70
|
-
}
|
71
|
-
|
72
|
-
var atBottom = function() {
|
73
|
-
console.log(scroll.scrollTop());
|
74
|
-
console.log(log.height() - scroll.height());
|
75
|
-
return (scroll.scrollTop() > (log.height() - scroll.height()));
|
76
|
-
}
|
77
|
-
|
78
|
-
// Add an event
|
79
|
-
var append = function(e) {
|
80
|
-
$.extend(e, {
|
81
|
-
metric: format.metric(e)
|
82
|
-
});
|
83
|
-
log.append(Mustache.render(template, e));
|
84
|
-
if (tracking) { scrollToBottom() };
|
85
|
-
}
|
86
|
-
|
87
|
-
// Set up our query
|
88
|
-
var startQuery = function(query) {
|
89
|
-
// Cancel existing sub
|
90
|
-
if (sub != null) { sub.close(); }
|
91
|
-
|
92
|
-
// Subscribe
|
93
|
-
sub = subs.subscribe(query, function(e) {
|
94
|
-
e.time = d3.time.format.iso.parse(e.time);
|
95
|
-
clock.advance(e.time);
|
96
|
-
append(e);
|
97
|
-
});
|
98
|
-
}
|
99
|
-
|
100
|
-
// Initial subscription
|
101
|
-
if (query) { prompt[0].value = query; startQuery(query); }
|
102
|
-
|
103
|
-
// Prompt entry
|
104
|
-
prompt.change(function() { startQuery(this.value) });
|
105
|
-
}
|
106
|
-
|
107
|
-
|
108
|
-
function timeSeries(container) {
|
109
|
-
// Container
|
110
|
-
var $container = $(container);
|
111
|
-
var container = d3.select(container);
|
112
|
-
$container.append('<input type=\"text\" style="display: block"></input>');
|
113
|
-
var prompt = $container.children().last();
|
114
|
-
|
115
|
-
// Data structures
|
116
|
-
var data = [];
|
117
|
-
var n = 60;
|
118
|
-
var sub = null;
|
119
|
-
|
120
|
-
// Scale
|
121
|
-
var w = 20;
|
122
|
-
var h = 80;
|
123
|
-
|
124
|
-
var x = d3.time.scale()
|
125
|
-
.domain([0,1])
|
126
|
-
.range([0, w * n]);
|
127
|
-
var y = d3.scale.linear()
|
128
|
-
.domain([0,100])
|
129
|
-
.rangeRound([0,h]);
|
130
|
-
|
131
|
-
var updateTime = function(max) {
|
132
|
-
var min = d3.time.minute.offset(max, -1);
|
133
|
-
x.domain([min, max]);
|
134
|
-
}
|
135
|
-
updateTime(new Date());
|
136
|
-
|
137
|
-
// Chart itself
|
138
|
-
var chart = container.append("svg")
|
139
|
-
.attr("class", "timeSeries")
|
140
|
-
.attr("width", w * (n - 1))
|
141
|
-
.attr("height", h);
|
142
|
-
|
143
|
-
// Baseline
|
144
|
-
chart.append("line")
|
145
|
-
.attr("x1", 0)
|
146
|
-
.attr("x2", w * n)
|
147
|
-
.attr("y1", h - .5)
|
148
|
-
.attr("y2", h - .5)
|
149
|
-
.style("stroke", "#000");
|
150
|
-
|
151
|
-
// Subscribe
|
152
|
-
prompt.change(function() {
|
153
|
-
if (sub != null) { sub.close(); }
|
154
|
-
|
155
|
-
sub = subscribe(this.value, function(e) {
|
156
|
-
// Move time
|
157
|
-
e.time = d3.time.format.iso.parse(e.time);
|
158
|
-
clock.advance(e.time);
|
159
|
-
|
160
|
-
// Append to window
|
161
|
-
if (data.length >= n) {
|
162
|
-
data.shift();
|
163
|
-
}
|
164
|
-
data.push(e);
|
165
|
-
|
166
|
-
console.log(e.time, "maps to", x(e.time), "in", x.domain(), x.range());
|
167
|
-
});
|
168
|
-
});
|
169
|
-
|
170
|
-
var clockSub = clock.register(function(t) {
|
171
|
-
updateTime(t);
|
172
|
-
|
173
|
-
// Move events
|
174
|
-
var rect = chart.selectAll("rect")
|
175
|
-
.data(data, function(e) { if (e) { return e.time } });
|
176
|
-
|
177
|
-
rect.enter().insert("rect", "line")
|
178
|
-
.attr("x", function(e, i) {
|
179
|
-
return x(e.time) - .5; })
|
180
|
-
.attr("y", function(e) { return h - y(e.metric) - .5 })
|
181
|
-
.attr("width", w)
|
182
|
-
.attr("height", function(e) { return y(e.metric); })
|
183
|
-
.transition()
|
184
|
-
.duration(1000)
|
185
|
-
.attr("x", function(e, i) { return x(e.time) - .5 });
|
186
|
-
|
187
|
-
rect.transition()
|
188
|
-
.duration(1000)
|
189
|
-
.attr("x", function(e) { return x(e.time) - .5; });
|
190
|
-
|
191
|
-
rect.exit().transition()
|
192
|
-
.duration(1000)
|
193
|
-
.attr("x", function(e) { return x(e.time) - .5 })
|
194
|
-
.remove();
|
195
|
-
});
|
196
|
-
|
197
|
-
}
|
198
|
-
|
199
|
-
dash.reload();
|
13
|
+
<!-- begin third party dependencies -->
|
14
|
+
<script src="/vendor/smoothie.js"></script>
|
15
|
+
<script src="/vendor/lodash.min.js"></script>
|
16
|
+
<script src="/vendor/jquery/jquery-1.9.1.min.js"></script>
|
17
|
+
<script src="/vendor/backbone.js"></script>
|
18
|
+
<script src="/vendor/jquery/jquery-ui-1.9.0.custom.min.js"></script>
|
19
|
+
<script src="/vendor/jquery/jquery.simplemodal.1.4.4.min.js"></script>
|
20
|
+
<script src="/vendor/jquery/jquery.quickfit.js"></script>
|
21
|
+
<script src="/vendor/toastr/toastr.js"></script>
|
22
|
+
<script> // turn underscore templates into mustache style templates
|
23
|
+
_.templateSettings = {
|
24
|
+
evaluate : /\{\%([\s\S]+?)\%\}/g, // {% eval(js); %}
|
25
|
+
interpolate : /\{\{([\s\S]+?)\}\}/g // {{ interpolate }}
|
26
|
+
};
|
200
27
|
</script>
|
28
|
+
<!-- end third party deps -->
|
29
|
+
|
30
|
+
<script src="/util.js"></script>
|
31
|
+
<script src="/format.js"></script>
|
32
|
+
<script src="/profile.js"></script>
|
33
|
+
<script src="/clock.js"></script>
|
34
|
+
<script src="/persistence.js"></script>
|
35
|
+
<script src="/keys.js"></script>
|
36
|
+
<script src="/subs.js"></script>
|
37
|
+
<script src="/toolbar.js"></script>
|
38
|
+
<script src="/view.js"></script>
|
39
|
+
<script src="/views/timeseries.js"></script>
|
40
|
+
<script src="/views/title.js"></script>
|
41
|
+
<script src="/views/help.js"></script>
|
42
|
+
<script src="/views/gauge.js"></script>
|
43
|
+
<script src="/views/grid.js"></script>
|
44
|
+
<script src="/dash.js"></script>
|
45
|
+
|
46
|
+
<script>dash.reload()</script>
|
201
47
|
</body>
|
202
48
|
</html>
|
data/lib/riemann/dash.rb
CHANGED
@@ -1,99 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'sinatra/base'
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
# A little dashboard sinatra application.
|
7
|
-
|
8
|
-
require 'yaml'
|
9
|
-
require 'find'
|
10
|
-
require 'erubis'
|
11
|
-
require 'sass'
|
12
|
-
|
13
|
-
def self.config
|
14
|
-
@config ||= {
|
15
|
-
:controllers => [File.join(File.dirname(__FILE__), 'dash', 'controller')],
|
16
|
-
:views => File.join(File.dirname(__FILE__), 'dash', 'views')
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.load(filename)
|
21
|
-
unless load_config(filename || 'config.rb')
|
22
|
-
# Configuration failed; load a default view.
|
23
|
-
puts "No configuration loaded; using defaults."
|
24
|
-
end
|
25
|
-
|
26
|
-
config[:controllers].each { |d| load_controllers d }
|
27
|
-
set :views, File.expand_path(config[:views])
|
28
|
-
|
29
|
-
# Fallback pub dir
|
30
|
-
public_dir(File.join(File.dirname(__FILE__), 'dash', 'public'))
|
31
|
-
end
|
32
|
-
|
33
|
-
# Executes the configuration file.
|
34
|
-
def self.load_config(filename)
|
35
|
-
begin
|
36
|
-
instance_eval File.read(filename)
|
37
|
-
true
|
38
|
-
rescue Errno::ENOENT
|
39
|
-
false
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
# Load controllers.
|
44
|
-
# Controllers can be regular old one-file-per-class, but
|
45
|
-
# if you prefer a little more modularity, this method will allow you to
|
46
|
-
# define all controller methods in their own files. For example, get
|
47
|
-
# "/posts/*/edit" can live in controller/posts/_/edit.rb. The sorting
|
48
|
-
# system provided here requires files in the correct order to handle
|
49
|
-
# wildcards appropriately.
|
50
|
-
def self.load_controllers(dir)
|
51
|
-
rbs = []
|
52
|
-
Find.find(
|
53
|
-
File.expand_path(dir)
|
54
|
-
) do |path|
|
55
|
-
rbs << path if path =~ /\.rb$/
|
56
|
-
end
|
57
|
-
|
58
|
-
# Sort paths with _ last, becase those are wildcards.
|
59
|
-
rbs.sort! do |a, b|
|
60
|
-
as = a.split File::SEPARATOR
|
61
|
-
bs = b.split File::SEPARATOR
|
62
|
-
|
63
|
-
# Compare common subpaths
|
64
|
-
l = [as.size, bs.size].min
|
65
|
-
catch :x do
|
66
|
-
(0...l).each do |i|
|
67
|
-
a, b = as[i], bs[i]
|
68
|
-
if a[/^_/] and not b[/^_/]
|
69
|
-
throw :x, 1
|
70
|
-
elsif b[/^_/] and not a[/^_/]
|
71
|
-
throw :x, -1
|
72
|
-
elsif ord = (a <=> b) and ord != 0
|
73
|
-
throw :x, ord
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
# All subpaths are identical; sort longest first
|
78
|
-
if as.size > bs.size
|
79
|
-
throw :x, -1
|
80
|
-
elsif as.size < bs.size
|
81
|
-
throw :x, -1
|
82
|
-
else
|
83
|
-
throw :x, 0
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
rbs.each do |r|
|
89
|
-
require r
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
# Add an additional public directory.
|
94
|
-
def self.public_dir(dir)
|
95
|
-
require 'riemann/dash/rack/static'
|
96
|
-
use Riemann::Dash::Static, :root => dir
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
3
|
+
require 'riemann/dash/version'
|
4
|
+
require 'riemann/dash/config'
|
5
|
+
require 'riemann/dash/app'
|
@@ -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 = 'riemann-dash'
|
8
|
+
|
9
|
+
gem.name = "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/env.rb
ADDED
data/sh/test
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rake
|
data/test/config_test.rb
ADDED
@@ -0,0 +1,114 @@
|
|
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{/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
|
+
|
71
|
+
describe :read_ws_config do
|
72
|
+
=begin
|
73
|
+
# this test fails if the config living at config/config.json has
|
74
|
+
# been overwritten with user content -- this happens for people
|
75
|
+
# who had previously run their riemann-dash instance via simply
|
76
|
+
# cd riemann-dash && bin/riemann-dash -- it would also fail once
|
77
|
+
# you save your config in the default location
|
78
|
+
it "retuns hash for empty configs" do
|
79
|
+
@config.read_ws_config.must_equal "{}"
|
80
|
+
end
|
81
|
+
=end
|
82
|
+
|
83
|
+
it "reads the file, if present" do
|
84
|
+
@config.load_config("test/fixtures/config/ws_config.rb").must_equal true
|
85
|
+
@config.store[:ws_config].must_equal "test/fixtures/ws_config/dummy_config.json"
|
86
|
+
@config.read_ws_config.must_equal %Q{{hey: \"ho\"}}
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe :update_ws_config do
|
91
|
+
it "works" do
|
92
|
+
@config.store[:ws_config] = "test/tmp/config.json"
|
93
|
+
@config.update_ws_config("{\"server\":\"10.10.10.10\",\"workspaces\":[]}")
|
94
|
+
end
|
95
|
+
|
96
|
+
it "pretty-prints the config" do
|
97
|
+
@config.store[:ws_config] = "test/tmp/config.json"
|
98
|
+
@config.update_ws_config("{\"server\":\"10.10.10.10\",\"workspaces\":[]}")
|
99
|
+
File.read("test/tmp/config.json").must_equal File.read("test/fixtures/ws_config/pretty_printed_config.json")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe "backwards compatible :[] and :[]= forwarders to `store` variable" do
|
105
|
+
it "reading works" do
|
106
|
+
@config[:ws_config].must_match %r{config/config.json}
|
107
|
+
end
|
108
|
+
|
109
|
+
it "writing works" do
|
110
|
+
@config[:ws_config] = "something"
|
111
|
+
@config[:ws_config].must_match %r{something}
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
config.store[:ws_config] = "test/fixtures/ws_config/dummy_config.json"
|
@@ -0,0 +1 @@
|
|
1
|
+
{hey: "ho"}
|
data/test/test_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riemann-dash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: riemann-client
|
@@ -107,38 +107,50 @@ dependencies:
|
|
107
107
|
- - '='
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: 1.3.6
|
110
|
-
description:
|
111
|
-
email:
|
110
|
+
description: HTTP dashboard for the distributed event system Riemann.
|
111
|
+
email:
|
112
|
+
- aphyr@aphyr.com
|
112
113
|
executables:
|
113
114
|
- riemann-dash
|
114
115
|
extensions: []
|
115
116
|
extra_rdoc_files: []
|
116
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
|
117
126
|
- lib/riemann/dash.rb
|
127
|
+
- lib/riemann/dash/app.rb
|
128
|
+
- lib/riemann/dash/config.rb
|
118
129
|
- lib/riemann/dash/controller/css.rb
|
119
130
|
- lib/riemann/dash/controller/index.rb
|
120
131
|
- lib/riemann/dash/public/clock.js
|
121
132
|
- lib/riemann/dash/public/dash.js
|
122
133
|
- lib/riemann/dash/public/format.js
|
123
|
-
- lib/riemann/dash/public/jquery-1.7.2.min.js
|
124
|
-
- lib/riemann/dash/public/jquery-ui-1.9.0.custom.min.js
|
125
|
-
- lib/riemann/dash/public/jquery.json-2.2.min.js
|
126
|
-
- lib/riemann/dash/public/jquery.quickfit.js
|
127
|
-
- lib/riemann/dash/public/jquery.simplemodal.1.4.3.min.js
|
128
134
|
- lib/riemann/dash/public/keys.js
|
129
|
-
- lib/riemann/dash/public/mustache.js
|
130
135
|
- lib/riemann/dash/public/persistence.js
|
131
136
|
- lib/riemann/dash/public/profile.js
|
132
137
|
- lib/riemann/dash/public/subs.js
|
133
|
-
- lib/riemann/dash/public/toastr.css
|
134
|
-
- lib/riemann/dash/public/toastr.js
|
135
138
|
- lib/riemann/dash/public/toolbar.js
|
136
|
-
- lib/riemann/dash/public/underscore-min.js
|
137
139
|
- lib/riemann/dash/public/util.js
|
140
|
+
- lib/riemann/dash/public/vendor/backbone.js
|
141
|
+
- lib/riemann/dash/public/vendor/jquery/jquery-1.9.1.min.js
|
142
|
+
- lib/riemann/dash/public/vendor/jquery/jquery-ui-1.9.0.custom.min.js
|
143
|
+
- lib/riemann/dash/public/vendor/jquery/jquery.quickfit.js
|
144
|
+
- lib/riemann/dash/public/vendor/jquery/jquery.simplemodal.1.4.4.min.js
|
145
|
+
- lib/riemann/dash/public/vendor/lodash.min.js
|
146
|
+
- lib/riemann/dash/public/vendor/smoothie.js
|
147
|
+
- lib/riemann/dash/public/vendor/toastr/toastr.css
|
148
|
+
- lib/riemann/dash/public/vendor/toastr/toastr.js
|
138
149
|
- lib/riemann/dash/public/view.js
|
139
150
|
- lib/riemann/dash/public/views/gauge.js
|
140
151
|
- lib/riemann/dash/public/views/grid.js
|
141
152
|
- lib/riemann/dash/public/views/help.js
|
153
|
+
- lib/riemann/dash/public/views/timeseries.js
|
142
154
|
- lib/riemann/dash/public/views/title.js
|
143
155
|
- lib/riemann/dash/public/x.png
|
144
156
|
- lib/riemann/dash/rack/static.rb
|
@@ -146,9 +158,16 @@ files:
|
|
146
158
|
- lib/riemann/dash/views/css.scss
|
147
159
|
- lib/riemann/dash/views/index.erubis
|
148
160
|
- lib/riemann/dash/views/layout.erubis
|
149
|
-
-
|
150
|
-
-
|
151
|
-
-
|
161
|
+
- riemann-dash.gemspec
|
162
|
+
- sh/c
|
163
|
+
- sh/env.rb
|
164
|
+
- sh/test
|
165
|
+
- test/config_test.rb
|
166
|
+
- test/fixtures/config/basic_config.rb
|
167
|
+
- test/fixtures/config/ws_config.rb
|
168
|
+
- test/fixtures/ws_config/dummy_config.json
|
169
|
+
- test/fixtures/ws_config/pretty_printed_config.json
|
170
|
+
- test/test_helper.rb
|
152
171
|
homepage: https://github.com/aphyr/riemann-dash
|
153
172
|
licenses: []
|
154
173
|
post_install_message:
|
@@ -160,7 +179,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
160
179
|
requirements:
|
161
180
|
- - ! '>='
|
162
181
|
- !ruby/object:Gem::Version
|
163
|
-
version:
|
182
|
+
version: '0'
|
164
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
184
|
none: false
|
166
185
|
requirements:
|
@@ -173,4 +192,10 @@ rubygems_version: 1.8.25
|
|
173
192
|
signing_key:
|
174
193
|
specification_version: 3
|
175
194
|
summary: HTTP dashboard for the distributed event system Riemann.
|
176
|
-
test_files:
|
195
|
+
test_files:
|
196
|
+
- test/config_test.rb
|
197
|
+
- test/fixtures/config/basic_config.rb
|
198
|
+
- test/fixtures/config/ws_config.rb
|
199
|
+
- test/fixtures/ws_config/dummy_config.json
|
200
|
+
- test/fixtures/ws_config/pretty_printed_config.json
|
201
|
+
- test/test_helper.rb
|