slashport 0.15.10
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/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
|
+
|