slashport 0.15.10
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +35 -0
- data/app/controllers/application.rb +2 -0
- data/app/controllers/cfg.rb +8 -0
- data/app/controllers/exceptions.rb +13 -0
- data/app/controllers/var.rb +27 -0
- data/app/controllers/vardoc.rb +7 -0
- data/app/helpers/cfg_helper.rb +5 -0
- data/app/helpers/global_helpers.rb +5 -0
- data/app/helpers/var_helper.rb +5 -0
- data/app/helpers/vardoc_helper.rb +5 -0
- data/app/models/base/attribute.rb +13 -0
- data/app/models/base/component.rb +206 -0
- data/app/models/base/exec.rb +40 -0
- data/app/models/base/registry.rb +4 -0
- data/app/models/base/tuple.rb +31 -0
- data/app/models/components/linuxhost.rb +125 -0
- data/app/models/components/linuxprocess.rb +55 -0
- data/app/models/components/mysql.rb +110 -0
- data/app/models/components/puppet.rb +20 -0
- data/app/views/cfg/index.html.erb +1 -0
- data/app/views/exceptions/not_acceptable.html.erb +63 -0
- data/app/views/exceptions/not_found.html.erb +47 -0
- data/app/views/layout/application.html.erb +12 -0
- data/app/views/var/index.json.erb +1 -0
- data/app/views/var/index.pp.erb +10 -0
- data/app/views/var/index.text.erb +18 -0
- data/app/views/vardoc/index.html.erb +1 -0
- data/autotest/discover.rb +1 -0
- data/autotest/merb.rb +149 -0
- data/autotest/merb_rspec.rb +165 -0
- data/bin/slashport +130 -0
- data/bin/slashportfetch +103 -0
- data/config/environments/development.rb +15 -0
- data/config/environments/production.rb +10 -0
- data/config/environments/rake.rb +11 -0
- data/config/environments/staging.rb +10 -0
- data/config/environments/test.rb +12 -0
- data/config/init.rb +26 -0
- data/config/rack.rb +11 -0
- data/config/router.rb +41 -0
- data/config/test.conf +2 -0
- data/doc/rdoc/generators/merb_generator.rb +1362 -0
- data/doc/rdoc/generators/template/merb/api_grease.js +640 -0
- data/doc/rdoc/generators/template/merb/index.html.erb +37 -0
- data/doc/rdoc/generators/template/merb/merb.css +252 -0
- data/doc/rdoc/generators/template/merb/merb.rb +351 -0
- data/doc/rdoc/generators/template/merb/merb_doc_styles.css +492 -0
- data/doc/rdoc/generators/template/merb/prototype.js +2515 -0
- data/lib/slashport.rb +93 -0
- data/public/favicon.ico +0 -0
- data/public/images/merb.jpg +0 -0
- data/public/javascripts/application.js +1 -0
- data/public/merb.fcgi +22 -0
- data/public/robots.txt +5 -0
- data/public/stylesheets/master.css +119 -0
- data/spec/requests/cfg_spec.rb +7 -0
- data/spec/requests/config_spec.rb +7 -0
- data/spec/requests/configdoc_spec.rb +7 -0
- data/spec/requests/var_spec.rb +7 -0
- data/spec/requests/vardoc_spec.rb +7 -0
- data/spec/spec.opts +0 -0
- data/spec/spec_helper.rb +20 -0
- metadata +156 -0
data/lib/slashport.rb
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'json'
|
3
|
+
require 'optparse'
|
4
|
+
require "ostruct"
|
5
|
+
require "net/http"
|
6
|
+
require "uri"
|
7
|
+
|
8
|
+
module SlashPort
|
9
|
+
class Check # class SlashPort::Check
|
10
|
+
def initialize(name, cmp, value)
|
11
|
+
@name = name
|
12
|
+
@value = value
|
13
|
+
@cmpstr = cmp
|
14
|
+
case cmp
|
15
|
+
when ">="
|
16
|
+
@cmp = Proc.new { |v| v >= coerce(v, @value) }
|
17
|
+
when "<="
|
18
|
+
@cmp = Proc.new { |v| v <= coerce(v, @value) }
|
19
|
+
when "=="
|
20
|
+
@cmp = Proc.new { |v| v == coerce(v, @value) }
|
21
|
+
when "!="
|
22
|
+
@cmp = Proc.new { |v| v != coerce(v, @value) }
|
23
|
+
when "<"
|
24
|
+
@cmp = Proc.new { |v| v < coerce(v, @value) }
|
25
|
+
when ">"
|
26
|
+
@cmp = Proc.new { |v| v > coerce(v, @value) }
|
27
|
+
else
|
28
|
+
raise "Unknown comparison '#{cmp}'"
|
29
|
+
end
|
30
|
+
end # def initialize
|
31
|
+
|
32
|
+
def to_s
|
33
|
+
return "#{@name} #{@cmpstr} #{@value}"
|
34
|
+
end # def to_s
|
35
|
+
|
36
|
+
# if 'a' is an int or float, try to convert b to the same thing
|
37
|
+
def coerce(a, b)
|
38
|
+
return b.to_i if a.is_a?(Integer)
|
39
|
+
return b.to_f if a.is_a?(Float)
|
40
|
+
return b
|
41
|
+
end # def coerce
|
42
|
+
|
43
|
+
# Turn a string "name cmp value" into a Check.
|
44
|
+
# Valid cmp are <, >, <=, >=, and ==
|
45
|
+
def self.new_from_string(value)
|
46
|
+
return nil unless value =~ /^([A-z0-9_-]+)\s*((?:[><=!]=)|[<>])\s*(.*)$/
|
47
|
+
return SlashPort::Check.new($1, $2, $3)
|
48
|
+
end # def self.new_from_string
|
49
|
+
|
50
|
+
# Given an attribute, does this check match?
|
51
|
+
def match?(attribute)
|
52
|
+
match = false
|
53
|
+
["data", "labels"].each do |type|
|
54
|
+
if (attribute[type].has_key?(@name) and @cmp.call(attribute[type][@name]))
|
55
|
+
match = true
|
56
|
+
return match
|
57
|
+
end
|
58
|
+
end
|
59
|
+
return match
|
60
|
+
end # def match?
|
61
|
+
end # class SlashPort::Check
|
62
|
+
|
63
|
+
class Fetcher # class SlashPort::Fetcher
|
64
|
+
def initialize(host, port=4000)
|
65
|
+
@host = host
|
66
|
+
@port = port
|
67
|
+
@scheme = "http"
|
68
|
+
|
69
|
+
@filters = []
|
70
|
+
@checks = []
|
71
|
+
end # def initialize
|
72
|
+
|
73
|
+
def add_filter(key, value)
|
74
|
+
@filters << [key, value]
|
75
|
+
end
|
76
|
+
|
77
|
+
def fetch
|
78
|
+
url = "#{@scheme}://#{@host}:#{@port}/var.json?#{query}"
|
79
|
+
#puts "URL: #{url}"
|
80
|
+
response = Net::HTTP.get_response(URI.parse(url))
|
81
|
+
if response.code.to_i != 200
|
82
|
+
raise "Non-OK http response: #{response.code}"
|
83
|
+
end
|
84
|
+
|
85
|
+
return JSON::parse(response.body)
|
86
|
+
end # def fetch
|
87
|
+
|
88
|
+
def query
|
89
|
+
return @filters.collect { |a,b| "#{a}=#{b}" }.join("&")
|
90
|
+
end # def query
|
91
|
+
end # class SlashPort::Fetcher
|
92
|
+
|
93
|
+
end # module SlashPort
|
data/public/favicon.ico
ADDED
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
// Common JavaScript code across your application goes here.
|
data/public/merb.fcgi
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'merb-core'
|
5
|
+
|
6
|
+
# this is Merb.root, change this if you have some funky setup.
|
7
|
+
merb_root = File.expand_path(File.dirname(__FILE__) / '../')
|
8
|
+
|
9
|
+
# If the fcgi process runs as apache, make sure
|
10
|
+
# we have an inlinedir set for Rubyinline action-args to work
|
11
|
+
unless ENV["INLINEDIR"] || ENV["HOME"]
|
12
|
+
tmpdir = merb_root / "tmp"
|
13
|
+
unless File.directory?(tmpdir)
|
14
|
+
Dir.mkdir(tmpdir)
|
15
|
+
end
|
16
|
+
ENV["INLINEDIR"] = tmpdir
|
17
|
+
end
|
18
|
+
|
19
|
+
# start merb with the fcgi adapter, add options or change the log dir here
|
20
|
+
Merb.start(:adapter => 'fcgi',
|
21
|
+
:merb_root => merb_root,
|
22
|
+
:log_file => merb_root /'log'/'merb.log')
|
data/public/robots.txt
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
body {
|
2
|
+
font-family: Arial, Verdana, sans-serif;
|
3
|
+
font-size: 12px;
|
4
|
+
background-color: #fff;
|
5
|
+
}
|
6
|
+
* {
|
7
|
+
margin: 0px;
|
8
|
+
padding: 0px;
|
9
|
+
text-decoration: none;
|
10
|
+
}
|
11
|
+
html {
|
12
|
+
height: 100%;
|
13
|
+
margin-bottom: 1px;
|
14
|
+
}
|
15
|
+
#container {
|
16
|
+
width: 80%;
|
17
|
+
text-align: left;
|
18
|
+
background-color: #fff;
|
19
|
+
margin-right: auto;
|
20
|
+
margin-left: auto;
|
21
|
+
}
|
22
|
+
#header-container {
|
23
|
+
width: 100%;
|
24
|
+
padding-top: 15px;
|
25
|
+
}
|
26
|
+
#header-container h1, #header-container h2 {
|
27
|
+
margin-left: 6px;
|
28
|
+
margin-bottom: 6px;
|
29
|
+
}
|
30
|
+
.spacer {
|
31
|
+
width: 100%;
|
32
|
+
height: 15px;
|
33
|
+
}
|
34
|
+
hr {
|
35
|
+
border: 0px;
|
36
|
+
color: #ccc;
|
37
|
+
background-color: #cdcdcd;
|
38
|
+
height: 1px;
|
39
|
+
width: 100%;
|
40
|
+
text-align: left;
|
41
|
+
}
|
42
|
+
h1 {
|
43
|
+
font-size: 28px;
|
44
|
+
color: #c55;
|
45
|
+
background-color: #fff;
|
46
|
+
font-family: Arial, Verdana, sans-serif;
|
47
|
+
font-weight: 300;
|
48
|
+
}
|
49
|
+
h2 {
|
50
|
+
font-size: 15px;
|
51
|
+
color: #999;
|
52
|
+
font-family: Arial, Verdana, sans-serif;
|
53
|
+
font-weight: 300;
|
54
|
+
background-color: #fff;
|
55
|
+
}
|
56
|
+
h3 {
|
57
|
+
color: #4d9b12;
|
58
|
+
font-size: 15px;
|
59
|
+
text-align: left;
|
60
|
+
font-weight: 300;
|
61
|
+
padding: 5px;
|
62
|
+
margin-top: 5px;
|
63
|
+
}
|
64
|
+
|
65
|
+
#left-container {
|
66
|
+
float: left;
|
67
|
+
width: 250px;
|
68
|
+
background-color: #FFFFFF;
|
69
|
+
color: black;
|
70
|
+
}
|
71
|
+
|
72
|
+
#left-container h3 {
|
73
|
+
color: #c55;
|
74
|
+
}
|
75
|
+
|
76
|
+
#main-container {
|
77
|
+
margin: 5px 5px 5px 260px;
|
78
|
+
padding: 15px;
|
79
|
+
border-left: 1px solid silver;
|
80
|
+
min-height: 400px;
|
81
|
+
}
|
82
|
+
p {
|
83
|
+
color: #000;
|
84
|
+
background-color: #fff;
|
85
|
+
line-height: 20px;
|
86
|
+
padding: 5px;
|
87
|
+
}
|
88
|
+
a {
|
89
|
+
color: #4d9b12;
|
90
|
+
background-color: #fff;
|
91
|
+
text-decoration: none;
|
92
|
+
}
|
93
|
+
a:hover {
|
94
|
+
color: #4d9b12;
|
95
|
+
background-color: #fff;
|
96
|
+
text-decoration: underline;
|
97
|
+
}
|
98
|
+
#footer-container {
|
99
|
+
clear: both;
|
100
|
+
font-size: 12px;
|
101
|
+
font-family: Verdana, Arial, sans-serif;
|
102
|
+
}
|
103
|
+
.right {
|
104
|
+
float: right;
|
105
|
+
font-size: 100%;
|
106
|
+
margin-top: 5px;
|
107
|
+
color: #999;
|
108
|
+
background-color: #fff;
|
109
|
+
}
|
110
|
+
.left {
|
111
|
+
float: left;
|
112
|
+
font-size: 100%;
|
113
|
+
margin-top: 5px;
|
114
|
+
color: #999;
|
115
|
+
background-color: #fff;
|
116
|
+
}
|
117
|
+
#main-container ul {
|
118
|
+
margin-left: 3.0em;
|
119
|
+
}
|
data/spec/spec.opts
ADDED
File without changes
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
|
3
|
+
# Add the local gems dir if found within the app root; any dependencies loaded
|
4
|
+
# hereafter will try to load from the local gems before loading system gems.
|
5
|
+
if (local_gem_dir = File.join(File.dirname(__FILE__), '..', 'gems')) && $BUNDLE.nil?
|
6
|
+
$BUNDLE = true; Gem.clear_paths; Gem.path.unshift(local_gem_dir)
|
7
|
+
end
|
8
|
+
|
9
|
+
require "merb-core"
|
10
|
+
require "spec" # Satisfies Autotest and anyone else not using the Rake tasks
|
11
|
+
|
12
|
+
# this loads all plugins required in your init file so don't add them
|
13
|
+
# here again, Merb will do it for you
|
14
|
+
Merb.start_environment(:testing => true, :adapter => 'runner', :environment => ENV['MERB_ENV'] || 'test')
|
15
|
+
|
16
|
+
Spec::Runner.configure do |config|
|
17
|
+
config.include(Merb::Test::ViewHelper)
|
18
|
+
config.include(Merb::Test::RouteHelper)
|
19
|
+
config.include(Merb::Test::ControllerHelper)
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: slashport
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.15.10
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jordan Sissel
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-11-12 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: merb-core
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.0.12
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: mongrel
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.1.5
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: sequel
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 3.5.0
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: mysql
|
47
|
+
type: :runtime
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 2.8.1
|
54
|
+
version:
|
55
|
+
description: slashport
|
56
|
+
email: jls@semicomplete.com
|
57
|
+
executables:
|
58
|
+
- slashport
|
59
|
+
- slashportfetch
|
60
|
+
extensions: []
|
61
|
+
|
62
|
+
extra_rdoc_files: []
|
63
|
+
|
64
|
+
files:
|
65
|
+
- Rakefile
|
66
|
+
- app/models/base/exec.rb
|
67
|
+
- app/models/base/attribute.rb
|
68
|
+
- app/models/base/component.rb
|
69
|
+
- app/models/base/tuple.rb
|
70
|
+
- app/models/base/registry.rb
|
71
|
+
- app/models/components/linuxhost.rb
|
72
|
+
- app/models/components/puppet.rb
|
73
|
+
- app/models/components/mysql.rb
|
74
|
+
- app/models/components/linuxprocess.rb
|
75
|
+
- app/controllers/cfg.rb
|
76
|
+
- app/controllers/exceptions.rb
|
77
|
+
- app/controllers/vardoc.rb
|
78
|
+
- app/controllers/application.rb
|
79
|
+
- app/controllers/var.rb
|
80
|
+
- app/helpers/vardoc_helper.rb
|
81
|
+
- app/helpers/var_helper.rb
|
82
|
+
- app/helpers/global_helpers.rb
|
83
|
+
- app/helpers/cfg_helper.rb
|
84
|
+
- app/views/cfg/index.html.erb
|
85
|
+
- app/views/layout/application.html.erb
|
86
|
+
- app/views/exceptions/not_found.html.erb
|
87
|
+
- app/views/exceptions/not_acceptable.html.erb
|
88
|
+
- app/views/vardoc/index.html.erb
|
89
|
+
- app/views/var/index.pp.erb
|
90
|
+
- app/views/var/index.text.erb
|
91
|
+
- app/views/var/index.json.erb
|
92
|
+
- autotest/merb.rb
|
93
|
+
- autotest/merb_rspec.rb
|
94
|
+
- autotest/discover.rb
|
95
|
+
- bin/slashportfetch
|
96
|
+
- bin/slashport
|
97
|
+
- config/test.conf
|
98
|
+
- config/environments/development.rb
|
99
|
+
- config/environments/production.rb
|
100
|
+
- config/environments/rake.rb
|
101
|
+
- config/environments/test.rb
|
102
|
+
- config/environments/staging.rb
|
103
|
+
- config/rack.rb
|
104
|
+
- config/router.rb
|
105
|
+
- config/init.rb
|
106
|
+
- doc/rdoc/generators/merb_generator.rb
|
107
|
+
- doc/rdoc/generators/template/merb/merb.rb
|
108
|
+
- doc/rdoc/generators/template/merb/index.html.erb
|
109
|
+
- doc/rdoc/generators/template/merb/api_grease.js
|
110
|
+
- doc/rdoc/generators/template/merb/merb_doc_styles.css
|
111
|
+
- doc/rdoc/generators/template/merb/merb.css
|
112
|
+
- doc/rdoc/generators/template/merb/prototype.js
|
113
|
+
- lib/slashport.rb
|
114
|
+
- public/stylesheets/master.css
|
115
|
+
- public/merb.fcgi
|
116
|
+
- public/javascripts/application.js
|
117
|
+
- public/favicon.ico
|
118
|
+
- public/robots.txt
|
119
|
+
- public/images/merb.jpg
|
120
|
+
- spec/spec_helper.rb
|
121
|
+
- spec/requests/cfg_spec.rb
|
122
|
+
- spec/requests/configdoc_spec.rb
|
123
|
+
- spec/requests/config_spec.rb
|
124
|
+
- spec/requests/vardoc_spec.rb
|
125
|
+
- spec/requests/var_spec.rb
|
126
|
+
- spec/spec.opts
|
127
|
+
has_rdoc: true
|
128
|
+
homepage: http://www.semicomplete.com/
|
129
|
+
licenses: []
|
130
|
+
|
131
|
+
post_install_message:
|
132
|
+
rdoc_options: []
|
133
|
+
|
134
|
+
require_paths:
|
135
|
+
- .
|
136
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: "0"
|
141
|
+
version:
|
142
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: "0"
|
147
|
+
version:
|
148
|
+
requirements: []
|
149
|
+
|
150
|
+
rubyforge_project:
|
151
|
+
rubygems_version: 1.3.5
|
152
|
+
signing_key:
|
153
|
+
specification_version: 3
|
154
|
+
summary: slashport
|
155
|
+
test_files: []
|
156
|
+
|