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.
Files changed (63) hide show
  1. data/Rakefile +35 -0
  2. data/app/controllers/application.rb +2 -0
  3. data/app/controllers/cfg.rb +8 -0
  4. data/app/controllers/exceptions.rb +13 -0
  5. data/app/controllers/var.rb +27 -0
  6. data/app/controllers/vardoc.rb +7 -0
  7. data/app/helpers/cfg_helper.rb +5 -0
  8. data/app/helpers/global_helpers.rb +5 -0
  9. data/app/helpers/var_helper.rb +5 -0
  10. data/app/helpers/vardoc_helper.rb +5 -0
  11. data/app/models/base/attribute.rb +13 -0
  12. data/app/models/base/component.rb +206 -0
  13. data/app/models/base/exec.rb +40 -0
  14. data/app/models/base/registry.rb +4 -0
  15. data/app/models/base/tuple.rb +31 -0
  16. data/app/models/components/linuxhost.rb +125 -0
  17. data/app/models/components/linuxprocess.rb +55 -0
  18. data/app/models/components/mysql.rb +110 -0
  19. data/app/models/components/puppet.rb +20 -0
  20. data/app/views/cfg/index.html.erb +1 -0
  21. data/app/views/exceptions/not_acceptable.html.erb +63 -0
  22. data/app/views/exceptions/not_found.html.erb +47 -0
  23. data/app/views/layout/application.html.erb +12 -0
  24. data/app/views/var/index.json.erb +1 -0
  25. data/app/views/var/index.pp.erb +10 -0
  26. data/app/views/var/index.text.erb +18 -0
  27. data/app/views/vardoc/index.html.erb +1 -0
  28. data/autotest/discover.rb +1 -0
  29. data/autotest/merb.rb +149 -0
  30. data/autotest/merb_rspec.rb +165 -0
  31. data/bin/slashport +130 -0
  32. data/bin/slashportfetch +103 -0
  33. data/config/environments/development.rb +15 -0
  34. data/config/environments/production.rb +10 -0
  35. data/config/environments/rake.rb +11 -0
  36. data/config/environments/staging.rb +10 -0
  37. data/config/environments/test.rb +12 -0
  38. data/config/init.rb +26 -0
  39. data/config/rack.rb +11 -0
  40. data/config/router.rb +41 -0
  41. data/config/test.conf +2 -0
  42. data/doc/rdoc/generators/merb_generator.rb +1362 -0
  43. data/doc/rdoc/generators/template/merb/api_grease.js +640 -0
  44. data/doc/rdoc/generators/template/merb/index.html.erb +37 -0
  45. data/doc/rdoc/generators/template/merb/merb.css +252 -0
  46. data/doc/rdoc/generators/template/merb/merb.rb +351 -0
  47. data/doc/rdoc/generators/template/merb/merb_doc_styles.css +492 -0
  48. data/doc/rdoc/generators/template/merb/prototype.js +2515 -0
  49. data/lib/slashport.rb +93 -0
  50. data/public/favicon.ico +0 -0
  51. data/public/images/merb.jpg +0 -0
  52. data/public/javascripts/application.js +1 -0
  53. data/public/merb.fcgi +22 -0
  54. data/public/robots.txt +5 -0
  55. data/public/stylesheets/master.css +119 -0
  56. data/spec/requests/cfg_spec.rb +7 -0
  57. data/spec/requests/config_spec.rb +7 -0
  58. data/spec/requests/configdoc_spec.rb +7 -0
  59. data/spec/requests/var_spec.rb +7 -0
  60. data/spec/requests/vardoc_spec.rb +7 -0
  61. data/spec/spec.opts +0 -0
  62. data/spec/spec_helper.rb +20 -0
  63. metadata +156 -0
@@ -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
Binary file
Binary file
@@ -0,0 +1 @@
1
+ // Common JavaScript code across your application goes here.
@@ -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')
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-Agent: *
5
+ # Disallow: /
@@ -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
+ }
@@ -0,0 +1,7 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
2
+
3
+ describe "/cfg" do
4
+ before(:each) do
5
+ @response = request("/cfg")
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
2
+
3
+ describe "/config" do
4
+ before(:each) do
5
+ @response = request("/config")
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
2
+
3
+ describe "/configdoc" do
4
+ before(:each) do
5
+ @response = request("/configdoc")
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
2
+
3
+ describe "/var" do
4
+ before(:each) do
5
+ @response = request("/var")
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
2
+
3
+ describe "/vardoc" do
4
+ before(:each) do
5
+ @response = request("/vardoc")
6
+ end
7
+ end
File without changes
@@ -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
+