slashport 0.15.10

Sign up to get free protection for your applications and to get access to all the features.
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
+