visage-app 0.2.7 → 0.3.0
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 +1 -0
- data/README.md +1 -0
- data/VERSION +1 -1
- data/features/builder.feature +16 -0
- data/features/cli.feature +7 -0
- data/features/data/config/with_no_profiles/.stub +0 -0
- data/features/{site.feature → profiles.feature} +14 -5
- data/features/step_definitions/site_steps.rb +10 -1
- data/features/step_definitions/visage_steps.rb +21 -0
- data/features/support/env.rb +2 -0
- data/lib/visage/config/init.rb +47 -28
- data/lib/visage/config/plugin-colors.yaml +57 -64
- data/lib/visage/config.rb +0 -1
- data/lib/visage/profile.rb +4 -7
- data/lib/visage/public/javascripts/graph.js +4 -1
- data/lib/visage/public/stylesheets/screen.css +30 -5
- data/lib/visage/views/layout.haml +0 -1
- data/lib/visage/views/profile.haml +16 -1
- data/lib/visage/views/profiles.haml +1 -1
- data/lib/visage-app.rb +14 -1
- metadata +7 -6
- data/lib/visage/public/javascripts/application.js +0 -4
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -129,6 +129,7 @@ Run all cucumber features:
|
|
129
129
|
TODO
|
130
130
|
----
|
131
131
|
|
132
|
+
* make other lines slightly opaque when hovering over labels
|
132
133
|
* detailed point-in-time data on hover (timestamp, value)
|
133
134
|
* give graph profile an alternate private url
|
134
135
|
* make notes/annotations on private url
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Feature: Build profiles
|
2
|
+
To find out how particular systems are performing
|
3
|
+
A user
|
4
|
+
Must be able to select a host
|
5
|
+
And some metrics
|
6
|
+
And see a page of graphs
|
7
|
+
|
8
|
+
Scenario: Build a simple profile
|
9
|
+
When I go to /builder
|
10
|
+
And I fill in "hosts" with "*"
|
11
|
+
And I fill in "metrics" with "*"
|
12
|
+
And I press "metrics"
|
13
|
+
And I fill in "profile_name" with "all on all"
|
14
|
+
And I press "create"
|
15
|
+
Then I should see a list of graphs
|
16
|
+
And I should see a profile heading
|
data/features/cli.feature
CHANGED
@@ -14,4 +14,11 @@ Feature: command line utility
|
|
14
14
|
When I start the visage server helper with "visage start"
|
15
15
|
Then I should see "Looking for RRDs in /.*collectd" on the terminal
|
16
16
|
|
17
|
+
Scenario: Specified configuration directory
|
18
|
+
Given the "visage" gem is installed
|
19
|
+
And there is no file at "features/data/config/with_no_profiles/profiles.yaml"
|
20
|
+
When I start the visage server helper with "visage start" and the following variables:
|
21
|
+
| CONFIG_PATH |
|
22
|
+
| features/data/config/with_no_profiles |
|
23
|
+
Then I should see a file at "features/data/config/with_no_profiles/profiles.yaml"
|
17
24
|
|
File without changes
|
@@ -3,11 +3,6 @@ Feature: Visit site
|
|
3
3
|
A user
|
4
4
|
Must be able to visualise the data
|
5
5
|
|
6
|
-
Scenario: Show graphs
|
7
|
-
When I go to /profiles
|
8
|
-
And I visit the first profile
|
9
|
-
Then I should see a list of graphs
|
10
|
-
|
11
6
|
Scenario: List profiles
|
12
7
|
When I go to /profiles
|
13
8
|
Then I should see a list of profiles
|
@@ -16,3 +11,17 @@ Feature: Visit site
|
|
16
11
|
When I follow "name"
|
17
12
|
Then I should see a list of profiles sorted alphabetically
|
18
13
|
|
14
|
+
Scenario: Show profile
|
15
|
+
When I go to /profiles
|
16
|
+
And I visit the first profile
|
17
|
+
Then I should see a list of graphs
|
18
|
+
And I should see a profile heading
|
19
|
+
|
20
|
+
Scenario: Navigate profiles
|
21
|
+
When I go to /profiles
|
22
|
+
And I visit the first profile
|
23
|
+
Then I should see a list of graphs
|
24
|
+
And I should see a profile heading
|
25
|
+
When I follow "back to profiles"
|
26
|
+
Then I should see a list of profiles
|
27
|
+
|
@@ -7,7 +7,7 @@ end
|
|
7
7
|
|
8
8
|
Then /^I should see a list of graphs$/ do
|
9
9
|
doc = Nokogiri::HTML(response_body)
|
10
|
-
doc.search('div#profile div.graph').size.should >
|
10
|
+
doc.search('div#profile div.graph').size.should > 0
|
11
11
|
end
|
12
12
|
|
13
13
|
Then /^I should see a list of profiles$/ do
|
@@ -25,3 +25,12 @@ Then /^I should see a list of profiles sorted alphabetically$/ do
|
|
25
25
|
|
26
26
|
unsorted.should == sorted
|
27
27
|
end
|
28
|
+
|
29
|
+
Then /^I should see a profile heading$/ do
|
30
|
+
doc = Nokogiri::HTML(response_body)
|
31
|
+
doc.search('div#profile h2#profile_name').size.should == 1
|
32
|
+
end
|
33
|
+
|
34
|
+
Then /^show me the page source$/ do
|
35
|
+
puts response_body
|
36
|
+
end
|
@@ -23,3 +23,24 @@ Then /^I should see "([^"]*)" on the terminal$/ do |string|
|
|
23
23
|
output = @pipe.read(250)
|
24
24
|
output.should =~ /#{string}/
|
25
25
|
end
|
26
|
+
|
27
|
+
Given /^there is no file at "([^"]*)"$/ do |filename|
|
28
|
+
FileUtils.rm_f(filename).should be_true
|
29
|
+
end
|
30
|
+
|
31
|
+
When /^I start the visage server helper with "([^"]*)" and the following variables:$/ do |cmd, table|
|
32
|
+
table.hashes.each do |hash|
|
33
|
+
hash.each_pair do |variable, value|
|
34
|
+
ENV[variable] = value
|
35
|
+
end
|
36
|
+
end
|
37
|
+
When %(I start the visage server helper with "#{cmd}")
|
38
|
+
end
|
39
|
+
|
40
|
+
Then /^I should see a file at "([^"]*)"$/ do |filename|
|
41
|
+
File.exists?(filename).should be_true
|
42
|
+
end
|
43
|
+
|
44
|
+
Then /^show me the output$/ do
|
45
|
+
puts @pipe.read(250)
|
46
|
+
end
|
data/features/support/env.rb
CHANGED
@@ -10,6 +10,8 @@ require 'spec/expectations'
|
|
10
10
|
require 'rack/test'
|
11
11
|
require 'webrat'
|
12
12
|
|
13
|
+
ENV['CONFIG_PATH'] = @root.join('features/data/config/default')
|
14
|
+
|
13
15
|
require app_file
|
14
16
|
# Force the application name because polyglot breaks the auto-detection logic.
|
15
17
|
Sinatra::Application.app_file = app_file
|
data/lib/visage/config/init.rb
CHANGED
@@ -1,38 +1,57 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
@root = Pathname.new(File.dirname(__FILE__)).parent.parent.parent.expand_path
|
4
|
-
@config_directory = Pathname.new(File.dirname(__FILE__)).expand_path
|
5
4
|
require @root.join('lib/visage/config')
|
6
5
|
require 'yaml'
|
7
6
|
|
8
|
-
Visage
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
7
|
+
module Visage
|
8
|
+
class Config
|
9
|
+
class File
|
10
|
+
@@config_directories = []
|
11
|
+
@@config_directories << Pathname.new(::File.dirname(__FILE__)).expand_path
|
12
|
+
@@config_directories << Pathname.new(ENV["CONFIG_PATH"]).expand_path if ENV["CONFIG_PATH"]
|
13
|
+
@@config_directories.reverse!
|
14
|
+
|
15
|
+
def self.find(filename, opts={})
|
16
|
+
range = opts[:ignore_bundled] ? (0..-2) : (0..-1)
|
17
|
+
potential_filenames = @@config_directories[range].map {|d| d.join(filename)}
|
18
|
+
potential_filenames.find { |f| ::File.exists?(f) }
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.load(filename, opts={})
|
22
|
+
unless path = self.find(filename, opts)
|
23
|
+
if opts[:create]
|
24
|
+
path = @@config_directories.first.join(filename)
|
25
|
+
begin
|
26
|
+
FileUtils.touch(path)
|
27
|
+
rescue Errno::EACCES => e
|
28
|
+
raise Errno::EACCES, "Couldn't write #{path}. Do you have CONFIG_PATH set?"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
YAML::load_file(path)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.open(filename, &block)
|
37
|
+
path = self.find(filename)
|
38
|
+
::File.open(path, 'r+') do |f|
|
39
|
+
block.call(f)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def initialize(filename, opts={})
|
44
|
+
unless ::File.exists?(filename)
|
45
|
+
path = @@config_directories.first.join(filename)
|
46
|
+
FileUtils.touch(path)
|
47
|
+
end
|
48
|
+
@file = ::File.open(filename, 'r+')
|
49
|
+
end
|
50
|
+
|
51
|
+
def to_s
|
52
|
+
@file.path
|
53
|
+
end
|
26
54
|
end
|
27
55
|
end
|
28
|
-
|
29
|
-
# load fallback colors
|
30
|
-
c['fallback_colors'] = YAML::load(File.read(@config_directory.join('fallback-colors.yaml')))
|
31
|
-
|
32
|
-
# Location of collectd's RRD - you may want to edit this!
|
33
|
-
c['rrddir'] = "/var/lib/collectd/rrd"
|
34
|
-
|
35
|
-
# whether to shade in graphs
|
36
|
-
c['shade'] = false
|
37
56
|
end
|
38
57
|
|
@@ -1,67 +1,60 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
memory:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
cpu:
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
swap:
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
2
|
+
memory:
|
3
|
+
memory-used:
|
4
|
+
value: "#cc0000"
|
5
|
+
memory-buffered:
|
6
|
+
value: "#edd400"
|
7
|
+
memory-cached:
|
8
|
+
value: "#3465a4"
|
9
|
+
memory-free:
|
10
|
+
value: "#73d216"
|
11
|
+
cpu:
|
12
|
+
cpu-idle:
|
13
|
+
value: "#eeeeec"
|
14
|
+
cpu-wait:
|
15
|
+
value: "#edd400"
|
16
|
+
cpu-user:
|
17
|
+
value: "#3465a4"
|
18
|
+
cpu-system:
|
19
|
+
value: "#cc0000"
|
20
|
+
cpu-nice:
|
21
|
+
value: "#73d216"
|
22
|
+
cpu-softirq:
|
23
|
+
value: "#ad7fa8"
|
24
|
+
cpu-interrupt:
|
25
|
+
value: "#5c3566"
|
26
|
+
cpu-steal:
|
27
|
+
value: "#2e3436"
|
28
|
+
swap:
|
29
|
+
swap-used:
|
30
|
+
value: "#cc0000"
|
31
|
+
swap-free:
|
32
|
+
value: "#73d216"
|
33
|
+
swap-cached:
|
34
|
+
value: "#3465a4"
|
35
|
+
swap_io-in:
|
36
|
+
value: "#edd400"
|
37
|
+
swap_io-out:
|
38
|
+
value: "#5c3566"
|
39
|
+
load:
|
40
40
|
load:
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
longterm: "#ef2929"
|
42
|
+
shortterm: "#73d216"
|
43
|
+
midterm: "#3465a4"
|
44
|
+
df:
|
45
45
|
df:
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
write: "#888a85"
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
46
|
+
used: "#cc0000"
|
47
|
+
free: "#73d216"
|
48
|
+
disk:
|
49
|
+
disk_merged:
|
50
|
+
read: "#8ae234"
|
51
|
+
write: "#ef2929"
|
52
|
+
disk_time:
|
53
|
+
read: "#729fcf"
|
54
|
+
write: "#fcaf3e"
|
55
|
+
disk_ops:
|
56
|
+
read: "#ad7fa8"
|
57
|
+
write: "#fce94f"
|
58
|
+
disk_octets:
|
59
|
+
read: "#c17d11"
|
60
|
+
write: "#888a85"
|
data/lib/visage/config.rb
CHANGED
data/lib/visage/profile.rb
CHANGED
@@ -11,18 +11,15 @@ module Visage
|
|
11
11
|
attr_reader :options, :selected_hosts, :hosts, :selected_metrics, :metrics,
|
12
12
|
:name, :errors
|
13
13
|
|
14
|
-
@@root = Pathname.new(File.dirname(__FILE__)).parent.parent.expand_path
|
15
|
-
@@profiles_filename = @@root.join('lib/visage/config/profiles.yaml')
|
16
|
-
|
17
14
|
def self.get(id)
|
18
15
|
url = id.downcase.gsub(/[^\w]+/, "+")
|
19
|
-
profiles =
|
16
|
+
profiles = Visage::Config.profiles || {}
|
20
17
|
profiles[url] ? self.new(profiles[url]) : nil
|
21
18
|
end
|
22
19
|
|
23
20
|
def self.all(opts={})
|
24
21
|
sort = opts[:sort]
|
25
|
-
profiles =
|
22
|
+
profiles = Visage::Config.profiles || {}
|
26
23
|
profiles = sort == "name" ? profiles.sort.map {|i| i.last } : profiles.values
|
27
24
|
profiles.map { |prof| self.new(prof) }
|
28
25
|
end
|
@@ -66,10 +63,10 @@ module Visage
|
|
66
63
|
:url => @options[:profile_name].downcase.gsub(/[^\w]+/, "+") }
|
67
64
|
|
68
65
|
# Save it.
|
69
|
-
profiles =
|
66
|
+
profiles = Visage::Config.profiles || {}
|
70
67
|
profiles[attrs[:url]] = attrs
|
71
68
|
|
72
|
-
File.open(
|
69
|
+
Visage::Config::File.open('profiles.yaml') do |file|
|
73
70
|
file << profiles.to_yaml
|
74
71
|
end
|
75
72
|
|
@@ -76,7 +76,10 @@ var visageBase = new Class({
|
|
76
76
|
header = $chk(this.options.name) ? this.options.name : this.options.plugin
|
77
77
|
this.graphHeader = new Element('h3', {
|
78
78
|
'class': 'graph-title',
|
79
|
-
'html': header
|
79
|
+
'html': header,
|
80
|
+
'styles': {
|
81
|
+
'color': "#121212"
|
82
|
+
}
|
80
83
|
});
|
81
84
|
$(this.parentElement).grab(this.graphHeader);
|
82
85
|
},
|
@@ -15,10 +15,9 @@ a {
|
|
15
15
|
/* styles */
|
16
16
|
|
17
17
|
a { color: #3465a4; padding: 2px 0px; }
|
18
|
-
a:hover {
|
18
|
+
a:hover { text-decoration: underline; }
|
19
19
|
a:visited { color: #75507b; }
|
20
|
-
a:hover:visited {
|
21
|
-
a:active { color: white; background-color: #cc0000; }
|
20
|
+
a:hover:visited { text-decoration: underline; }
|
22
21
|
|
23
22
|
p {
|
24
23
|
margin: 0 0 1em;
|
@@ -34,6 +33,8 @@ div#header {
|
|
34
33
|
background-color: #3465a4;
|
35
34
|
margin-bottom: 16px;
|
36
35
|
border-bottom: 6px solid #c5d6ed;
|
36
|
+
background: -moz-linear-gradient(100% 100% 90deg, #3465a4, #142e52);
|
37
|
+
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#142e52), to(#3465a4));
|
37
38
|
}
|
38
39
|
|
39
40
|
div#nav {
|
@@ -53,7 +54,7 @@ div#nav a {
|
|
53
54
|
|
54
55
|
div#nav a:hover {
|
55
56
|
text-shadow: 0 1px 6px rgba(115,157,211,0.9);
|
56
|
-
|
57
|
+
text-decoration: none;
|
57
58
|
}
|
58
59
|
|
59
60
|
div#content, div#nav {
|
@@ -206,7 +207,7 @@ h1, h2, h3, h4, h5 {
|
|
206
207
|
|
207
208
|
h2 {
|
208
209
|
font-weight: bold;
|
209
|
-
color: #
|
210
|
+
color: #333;
|
210
211
|
border-bottom: 4px solid #888;
|
211
212
|
margin-bottom: 12px;
|
212
213
|
}
|
@@ -221,6 +222,27 @@ h1 span.project-name {
|
|
221
222
|
color: white;
|
222
223
|
}
|
223
224
|
|
225
|
+
h2#profile_name {
|
226
|
+
margin: 36px 0;
|
227
|
+
}
|
228
|
+
|
229
|
+
h4.error {
|
230
|
+
margin: 8px 0;
|
231
|
+
}
|
232
|
+
|
233
|
+
div.graph pre {
|
234
|
+
line-height: 1.6em;
|
235
|
+
font-size: 90%;
|
236
|
+
margin-top: -10px;
|
237
|
+
}
|
238
|
+
|
239
|
+
div#bottom_nav {
|
240
|
+
margin: 32px 0;
|
241
|
+
border-top: 1px dotted #aaa;
|
242
|
+
padding-top: 12px;
|
243
|
+
font-size: 85%;
|
244
|
+
}
|
245
|
+
|
224
246
|
div#footer {
|
225
247
|
font-size: 0.6em;
|
226
248
|
color: gray;
|
@@ -255,5 +277,8 @@ div#profiles ul {
|
|
255
277
|
}
|
256
278
|
|
257
279
|
div#profiles p.create {
|
280
|
+
border-top: 1px dotted #aaa;
|
281
|
+
padding-top: 8px;
|
282
|
+
margin-top: 24px;
|
258
283
|
font-size: 85%;
|
259
284
|
}
|
@@ -10,7 +10,6 @@
|
|
10
10
|
%script{:type => "text/javascript", :src => link_to("/javascripts/mootools-1.2.3-core.js")}
|
11
11
|
%script{:type => "text/javascript", :src => link_to("/javascripts/mootools-1.2.3.1-more.js")}
|
12
12
|
%script{:type => "text/javascript", :src => link_to("/javascripts/graph.js")}
|
13
|
-
%script{:type => "text/javascript", :src => link_to("/javascripts/application.js")}
|
14
13
|
|
15
14
|
%body
|
16
15
|
%div#wrapper
|
@@ -1,6 +1,8 @@
|
|
1
|
-
-
|
1
|
+
- profile_name = @profile.options[:profile_name]
|
2
|
+
- page_title(profile_name)
|
2
3
|
|
3
4
|
%div#profile
|
5
|
+
%h2#profile_name= profile_name
|
4
6
|
- @profile.graphs.each do |graph|
|
5
7
|
%div{:id => graph.id, :class => 'graph'}
|
6
8
|
:javascript
|
@@ -17,4 +19,17 @@
|
|
17
19
|
finish: '#{@finish}'
|
18
20
|
});
|
19
21
|
});
|
22
|
+
- if @profile.graphs.size == 0
|
23
|
+
%div.graph
|
24
|
+
%h4.error Oops! Looks like there aren't any graphs matching the specified patterns.
|
25
|
+
%p These are the patterns:
|
26
|
+
%pre
|
27
|
+
:preserve
|
28
|
+
Host: #{@profile.options[:hosts]}
|
29
|
+
Metrics: #{@profile.options[:metrics]}
|
30
|
+
|
31
|
+
%div#bottom_nav
|
32
|
+
%a{:href => link_to("/profiles")} ← Back to profiles
|
33
|
+
|
34
|
+
|
20
35
|
|
data/lib/visage-app.rb
CHANGED
@@ -22,6 +22,19 @@ module Visage
|
|
22
22
|
|
23
23
|
helpers Sinatra::LinkToHelper
|
24
24
|
helpers Sinatra::PageTitleHelper
|
25
|
+
|
26
|
+
configure do
|
27
|
+
Visage::Config.use do |c|
|
28
|
+
# Base configuration files.
|
29
|
+
c['profiles'] = Visage::Config::File.load('profiles.yaml', :create => true, :ignore_bundled => true)
|
30
|
+
c['plugin_colors'] = Visage::Config::File.load('plugin-colors.yaml')
|
31
|
+
c['fallback_colors'] = Visage::Config::File.load('fallback-colors.yaml')
|
32
|
+
|
33
|
+
# FIXME: make this configurable through file
|
34
|
+
c['shade'] = false
|
35
|
+
c['rrddir'] = ENV["RRDDIR"] ? Pathname.new(ENV["RRDDIR"]).expand_path : Pathname.new("/var/lib/collectd/rrd").expand_path
|
36
|
+
end
|
37
|
+
end
|
25
38
|
end
|
26
39
|
|
27
40
|
class Profiles < Application
|
@@ -32,7 +45,7 @@ module Visage
|
|
32
45
|
get '/profiles/:url' do
|
33
46
|
@profile = Visage::Profile.get(params[:url])
|
34
47
|
raise Sinatra::NotFound unless @profile
|
35
|
-
@start
|
48
|
+
@start = params[:start]
|
36
49
|
@finish = params[:finish]
|
37
50
|
haml :profile
|
38
51
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Lindsay Holmwood
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-10-15 00:00:00 +11:00
|
18
18
|
default_executable: visage
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -101,9 +101,11 @@ files:
|
|
101
101
|
- Rakefile
|
102
102
|
- VERSION
|
103
103
|
- bin/visage
|
104
|
+
- features/builder.feature
|
104
105
|
- features/cli.feature
|
106
|
+
- features/data/config/with_no_profiles/.stub
|
105
107
|
- features/json.feature
|
106
|
-
- features/
|
108
|
+
- features/profiles.feature
|
107
109
|
- features/step_definitions/form_steps.rb
|
108
110
|
- features/step_definitions/json_steps.rb
|
109
111
|
- features/step_definitions/result_steps.rb
|
@@ -129,7 +131,6 @@ files:
|
|
129
131
|
- lib/visage/public/images/hosts.png
|
130
132
|
- lib/visage/public/images/metrics.png
|
131
133
|
- lib/visage/public/images/search.png
|
132
|
-
- lib/visage/public/javascripts/application.js
|
133
134
|
- lib/visage/public/javascripts/g.line-min.js
|
134
135
|
- lib/visage/public/javascripts/g.line.js
|
135
136
|
- lib/visage/public/javascripts/g.raphael-min.js
|