monit 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,13 @@
1
+ before_install:
2
+ - gem install bundler
3
+ script: "bundle exec rake spec"
4
+ language: ruby
5
+ rvm:
6
+ - 1.8.7
7
+ - 1.9.2
8
+ - 1.9.3
9
+ - jruby-18mode
10
+ - jruby-19mode
11
+ - rbx-18mode
12
+ - rbx-19mode
13
+ - ree
@@ -1,37 +1,40 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- monit (0.1.2)
5
- crack (~> 0.1.8)
6
- curb (~> 0.7.8)
4
+ monit (0.2.0)
5
+ activesupport (~> 3.2.2)
6
+ jruby-openssl (~> 0.7.6.1)
7
+ nokogiri (~> 1.5.2)
7
8
 
8
9
  GEM
9
10
  remote: http://rubygems.org/
10
11
  specs:
11
- awesome_print (0.2.1)
12
- crack (0.1.8)
13
- curb (0.7.8)
14
- diff-lcs (1.1.2)
12
+ activesupport (3.2.2)
13
+ i18n (~> 0.6)
14
+ multi_json (~> 1.0)
15
+ bouncy-castle-java (1.5.0146.1)
16
+ diff-lcs (1.1.3)
17
+ i18n (0.6.0)
18
+ jruby-openssl (0.7.6.1)
19
+ bouncy-castle-java (>= 1.5.0146.1)
20
+ multi_json (1.1.0)
21
+ nokogiri (1.5.2-java)
15
22
  rake (0.8.7)
16
- rspec (2.0.0.beta.22)
17
- rspec-core (= 2.0.0.beta.22)
18
- rspec-expectations (= 2.0.0.beta.22)
19
- rspec-mocks (= 2.0.0.beta.22)
20
- rspec-core (2.0.0.beta.22)
21
- rspec-expectations (2.0.0.beta.22)
22
- diff-lcs (>= 1.1.2)
23
- rspec-mocks (2.0.0.beta.22)
24
- rspec-core (= 2.0.0.beta.22)
25
- rspec-expectations (= 2.0.0.beta.22)
23
+ rspec (2.9.0)
24
+ rspec-core (~> 2.9.0)
25
+ rspec-expectations (~> 2.9.0)
26
+ rspec-mocks (~> 2.9.0)
27
+ rspec-core (2.9.0)
28
+ rspec-expectations (2.9.0)
29
+ diff-lcs (~> 1.1.3)
30
+ rspec-mocks (2.9.0)
26
31
 
27
32
  PLATFORMS
33
+ java
28
34
  ruby
29
35
 
30
36
  DEPENDENCIES
31
- awesome_print
32
- bundler (~> 1.0.0)
33
- crack (~> 0.1.8)
34
- curb (~> 0.7.8)
37
+ bundler
35
38
  monit!
36
39
  rake
37
- rspec (~> 2.0.0.beta.20)
40
+ rspec (~> 2.9.0)
data/README.md CHANGED
@@ -22,12 +22,17 @@ Just like any other gem:
22
22
 
23
23
  For more options see the API documentation
24
24
 
25
- ## Compatibility
25
+ ## Compatibility and Build Status
26
26
 
27
- At the moment the gem is only compatible with Ruby 1.9.2.
27
+ [![Build Status](https://secure.travis-ci.org/k33l0r/monit.png)](http://travis-ci.org/k33l0r/monit)
28
+
29
+ The gem is only compatible with Ruby 1.8.7 and above, including JRuby 1.6+.
30
+ For the build status, check [Travis CI][travis].
31
+
32
+ [travis]: http://travis-ci.org/k33l0r/monit
28
33
 
29
34
  ## License and copyright
30
35
 
31
- Copyright (c) 2010 Matias Korhonen
36
+ Copyright (c) 2010 - 2012 Matias Korhonen
32
37
 
33
38
  Licensed under the MIT license, see the LICENSE file for details.
data/Rakefile CHANGED
@@ -1,14 +1,5 @@
1
- require "bundler"
2
- Bundler::GemHelper.install_tasks
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
3
 
4
4
  require "rspec/core/rake_task"
5
5
  RSpec::Core::RakeTask.new(:spec)
6
-
7
- gemspec = eval(File.read("monit.gemspec"))
8
-
9
- task :build => "#{gemspec.full_name}.gem"
10
-
11
- file "#{gemspec.full_name}.gem" => gemspec.files + ["monit.gemspec"] do
12
- system "gem build monit.gemspec"
13
- system "gem install monit-#{Monit::VERSION}.gem"
14
- end
@@ -3,5 +3,19 @@ module Monit
3
3
  # The service section from the Monit XML. Inherits from OpenStruct.
4
4
  class Service < OpenStruct
5
5
  TYPES = { 0 => "Filesystem", 1 => "Directory", 2 => "File", 3 => "Daemon", 4 => "Connection", 5 => "System" }
6
+
7
+ def initialize(hash = nil)
8
+ hash = rename_service_type(hash) if hash
9
+ super(hash)
10
+ end
11
+
12
+ private
13
+
14
+ # Renames the Service type from "type" to "service_type" to avoid conflicts
15
+ def rename_service_type(hash)
16
+ hash["service_type"] = hash["type"]
17
+ hash.delete("type")
18
+ hash
19
+ end
6
20
  end
7
21
  end
@@ -1,18 +1,23 @@
1
- require "curb"
1
+ #require "crack/xml"
2
+ require "active_support/xml_mini"
3
+ require "active_support/core_ext/hash/conversions"
4
+ require "net/http"
5
+ require "net/https"
2
6
  require "uri"
3
- require "crack/xml"
4
7
 
5
8
  # A Ruby interface for Monit
6
9
  module Monit
7
10
  # The +Status+ class is used to get data from the Monit instance. You should not
8
11
  # need to manually instantiate any of the other classes.
9
12
  class Status
13
+ ::ActiveSupport::XmlMini.backend = "Nokogiri"
14
+
10
15
  attr_reader :url, :hash, :xml, :server, :platform, :services
11
16
  attr_accessor :username, :auth, :host, :port, :ssl, :auth, :username
12
17
  attr_writer :password
13
-
18
+
14
19
  # Create a new instance of the status class with the given options
15
- #
20
+ #
16
21
  # <b>Options:</b>
17
22
  # * +host+ - the host for monit, defaults to +localhost+
18
23
  # * +port+ - the Monit port, defaults to +2812+
@@ -29,35 +34,44 @@ module Monit
29
34
  @password = options[:password]
30
35
  @services = []
31
36
  end
32
-
37
+
33
38
  # Construct the URL
34
39
  def url
35
40
  url_params = { :host => @host, :port => @port, :path => "/_status", :query => "format=xml" }
36
41
  @ssl ? URI::HTTPS.build(url_params) : URI::HTTP.build(url_params)
37
42
  end
38
-
43
+
39
44
  # Get the status from Monit.
40
45
  def get
41
- c = Curl::Easy.new(self.url.to_s) do |curl|
42
- if @auth
43
- curl.password = @password
44
- curl.username = @username
45
- end
46
- curl.headers["User-Agent"] = "Monit Ruby client #{Monit::VERSION}"
46
+ uri = self.url
47
+ http = Net::HTTP.new(uri.host, uri.port)
48
+
49
+ if @ssl
50
+ http.use_ssl = true
51
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
47
52
  end
48
- c.perform
49
-
50
- if c.response_code == 200
51
- @xml = c.body_str
53
+
54
+ request = Net::HTTP::Get.new(uri.request_uri)
55
+
56
+ if @auth
57
+ request.basic_auth(@username, @password)
58
+ end
59
+
60
+ request["User-Agent"] = "Monit Ruby client #{Monit::VERSION}"
61
+
62
+ response = http.request(request)
63
+
64
+ if response.code == "200"
65
+ @xml = response.body
52
66
  return self.parse(@xml)
53
67
  else
54
68
  return false
55
69
  end
56
70
  end
57
-
71
+
58
72
  # Parse the XML from Monit into a hash and into a Ruby representation.
59
73
  def parse(xml)
60
- @hash = Crack::XML.parse(xml)
74
+ @hash = Hash.from_xml(xml)
61
75
  @server = Server.new(@hash["monit"]["server"])
62
76
  @platform = Platform.new(@hash["monit"]["platform"])
63
77
  if @hash["monit"]["service"].is_a? Array
@@ -1,3 +1,3 @@
1
1
  module Monit
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,28 +1,25 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require File.expand_path("../lib/monit/version", __FILE__)
3
3
 
4
- Gem::Specification.new do |s|
5
- s.name = "monit"
6
- s.version = Monit::VERSION
7
- s.platform = Gem::Platform::RUBY
8
- s.authors = ["Matias Korhonen"]
9
- s.email = ["matias@kiskolabs.com"]
10
- s.homepage = "http://github.com/k33l0r/monit"
11
- s.summary = "Connect to Monit"
12
- s.description = "Retrieve server information from Monit."
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Matias Korhonen"]
6
+ gem.email = ["matias@kiskolabgem.com"]
7
+ gem.homepage = "http://github.com/k33l0r/monit"
8
+ gem.summary = "Connect to Monit"
9
+ gem.description = "Retrieve server information from Monit."
13
10
 
14
- s.required_rubygems_version = ">= 1.3.6"
15
- s.rubyforge_project = "monit"
11
+ gem.name = "monit"
12
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
13
+ gem.files = `git ls-files`.split("\n")
14
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Monit::VERSION
16
17
 
17
- s.add_development_dependency "bundler", "~> 1.0.0"
18
- s.add_development_dependency "rake"
19
- s.add_development_dependency "rspec", "~> 2.0.0.beta.20"
20
- s.add_development_dependency "awesome_print"
21
-
22
- s.add_dependency "crack", "~> 0.1.8"
23
- s.add_dependency "curb", "~> 0.7.8"
18
+ gem.add_development_dependency "rake"
19
+ gem.add_development_dependency "bundler"
20
+ gem.add_development_dependency "rspec", "~> 2.9.0"
24
21
 
25
- s.files = `git ls-files`.split("\n")
26
- s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
27
- s.require_path = 'lib'
22
+ gem.add_runtime_dependency "nokogiri", "~> 1.5.2"
23
+ gem.add_runtime_dependency "activesupport", "~> 3.2.2"
24
+ gem.add_runtime_dependency "jruby-openssl", "~> 0.7.6.1" if RUBY_PLATFORM =~ /java/
28
25
  end
@@ -1,6 +1,9 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require "spec_helper"
3
3
 
4
+ SMALLISH_STATUS_PATH = File.expand_path("../samples/smallish_status.xml", __FILE__)
5
+ LARGISH_STATUS_PATH = File.expand_path("../samples/largish_status.xml", __FILE__)
6
+
4
7
  describe Monit do
5
8
  context "Status" do
6
9
  it "should be possible to instatiate it with no options" do
@@ -29,7 +32,7 @@ describe Monit do
29
32
 
30
33
  it "should parse XML into a Hash" do
31
34
  status = Monit::Status.new
32
- status.stub!(:xml).and_return(File.read("./spec/samples/smallish_status.xml"))
35
+ status.stub!(:xml).and_return(File.read(SMALLISH_STATUS_PATH))
33
36
  status.parse(status.xml)
34
37
  status.hash.should be_kind_of Hash
35
38
  status.hash["monit"].should_not be_nil
@@ -37,7 +40,7 @@ describe Monit do
37
40
  status.hash["monit"]["platform"].should_not be_nil
38
41
  status.hash["monit"]["service"].should_not be_nil
39
42
 
40
- status.stub!(:xml).and_return(File.read("./spec/samples/largish_status.xml"))
43
+ status.stub!(:xml).and_return(File.read(LARGISH_STATUS_PATH))
41
44
  status.parse(status.xml)
42
45
  status.hash.should be_kind_of Hash
43
46
  status.hash["monit"].should_not be_nil
@@ -48,7 +51,7 @@ describe Monit do
48
51
 
49
52
  it "should parse XML into a Ruby representation" do
50
53
  status = Monit::Status.new
51
- status.stub!(:xml).and_return(File.read("./spec/samples/smallish_status.xml"))
54
+ status.stub!(:xml).and_return(File.read(SMALLISH_STATUS_PATH))
52
55
  status.parse(status.xml)
53
56
 
54
57
  status.server.should be_kind_of Monit::Server
@@ -58,7 +61,7 @@ describe Monit do
58
61
  status.services.first.should be_kind_of Monit::Service
59
62
  status.services.first.should be_kind_of OpenStruct
60
63
 
61
- status.stub!(:xml).and_return(File.read("./spec/samples/largish_status.xml"))
64
+ status.stub!(:xml).and_return(File.read(LARGISH_STATUS_PATH))
62
65
  status.parse(status.xml)
63
66
 
64
67
  status.server.should be_kind_of Monit::Server
@@ -159,7 +162,7 @@ describe Monit do
159
162
  service.pendingaction.should == "0"
160
163
  service.groups.should be_kind_of Hash
161
164
  service.system.should be_kind_of Hash
162
- service.type.should == "5"
165
+ service.service_type.should == "5"
163
166
  end
164
167
  end
165
168
  end
@@ -4,4 +4,3 @@ Bundler.setup
4
4
 
5
5
  require "rspec"
6
6
  require "monit"
7
-
metadata CHANGED
@@ -1,113 +1,86 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: monit
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 2
9
- version: 0.1.2
4
+ prerelease:
5
+ version: 0.2.0
10
6
  platform: ruby
11
7
  authors:
12
- - Matias Korhonen
8
+ - Matias Korhonen
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2010-09-14 00:00:00 +03:00
18
- default_executable:
13
+ date: 2012-03-23 00:00:00 Z
19
14
  dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: bundler
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ~>
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 1
30
- - 0
31
- - 0
32
- version: 1.0.0
33
- type: :development
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: rake
37
- prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- segments:
44
- - 0
45
- version: "0"
46
- type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: rspec
50
- prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - ~>
55
- - !ruby/object:Gem::Version
56
- segments:
57
- - 2
58
- - 0
59
- - 0
60
- - beta
61
- - 20
62
- version: 2.0.0.beta.20
63
- type: :development
64
- version_requirements: *id003
65
- - !ruby/object:Gem::Dependency
66
- name: awesome_print
67
- prerelease: false
68
- requirement: &id004 !ruby/object:Gem::Requirement
69
- none: false
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- segments:
74
- - 0
75
- version: "0"
76
- type: :development
77
- version_requirements: *id004
78
- - !ruby/object:Gem::Dependency
79
- name: crack
80
- prerelease: false
81
- requirement: &id005 !ruby/object:Gem::Requirement
82
- none: false
83
- requirements:
84
- - - ~>
85
- - !ruby/object:Gem::Version
86
- segments:
87
- - 0
88
- - 1
89
- - 8
90
- version: 0.1.8
91
- type: :runtime
92
- version_requirements: *id005
93
- - !ruby/object:Gem::Dependency
94
- name: curb
95
- prerelease: false
96
- requirement: &id006 !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ~>
100
- - !ruby/object:Gem::Version
101
- segments:
102
- - 0
103
- - 7
104
- - 8
105
- version: 0.7.8
106
- type: :runtime
107
- version_requirements: *id006
15
+ - !ruby/object:Gem::Dependency
16
+ name: rake
17
+ version_requirements: &id001 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ requirement: *id001
24
+ prerelease: false
25
+ type: :development
26
+ - !ruby/object:Gem::Dependency
27
+ name: bundler
28
+ version_requirements: &id002 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ requirement: *id002
35
+ prerelease: false
36
+ type: :development
37
+ - !ruby/object:Gem::Dependency
38
+ name: rspec
39
+ version_requirements: &id003 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: 2.9.0
45
+ requirement: *id003
46
+ prerelease: false
47
+ type: :development
48
+ - !ruby/object:Gem::Dependency
49
+ name: nokogiri
50
+ version_requirements: &id004 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 1.5.2
56
+ requirement: *id004
57
+ prerelease: false
58
+ type: :runtime
59
+ - !ruby/object:Gem::Dependency
60
+ name: activesupport
61
+ version_requirements: &id005 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: 3.2.2
67
+ requirement: *id005
68
+ prerelease: false
69
+ type: :runtime
70
+ - !ruby/object:Gem::Dependency
71
+ name: jruby-openssl
72
+ version_requirements: &id006 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.7.6.1
78
+ requirement: *id006
79
+ prerelease: false
80
+ type: :runtime
108
81
  description: Retrieve server information from Monit.
109
82
  email:
110
- - matias@kiskolabs.com
83
+ - matias@kiskolabgem.com
111
84
  executables: []
112
85
 
113
86
  extensions: []
@@ -115,25 +88,25 @@ extensions: []
115
88
  extra_rdoc_files: []
116
89
 
117
90
  files:
118
- - .gitignore
119
- - Gemfile
120
- - Gemfile.lock
121
- - LICENSE
122
- - README.md
123
- - Rakefile
124
- - lib/monit.rb
125
- - lib/monit/httpd.rb
126
- - lib/monit/platform.rb
127
- - lib/monit/server.rb
128
- - lib/monit/service.rb
129
- - lib/monit/status.rb
130
- - lib/monit/version.rb
131
- - monit.gemspec
132
- - spec/monit_spec.rb
133
- - spec/samples/largish_status.xml
134
- - spec/samples/smallish_status.xml
135
- - spec/spec_helper.rb
136
- has_rdoc: true
91
+ - .gitignore
92
+ - .travis.yml
93
+ - Gemfile
94
+ - Gemfile.lock
95
+ - LICENSE
96
+ - README.md
97
+ - Rakefile
98
+ - lib/monit.rb
99
+ - lib/monit/httpd.rb
100
+ - lib/monit/platform.rb
101
+ - lib/monit/server.rb
102
+ - lib/monit/service.rb
103
+ - lib/monit/status.rb
104
+ - lib/monit/version.rb
105
+ - monit.gemspec
106
+ - spec/monit_spec.rb
107
+ - spec/samples/largish_status.xml
108
+ - spec/samples/smallish_status.xml
109
+ - spec/spec_helper.rb
137
110
  homepage: http://github.com/k33l0r/monit
138
111
  licenses: []
139
112
 
@@ -141,31 +114,34 @@ post_install_message:
141
114
  rdoc_options: []
142
115
 
143
116
  require_paths:
144
- - lib
117
+ - lib
145
118
  required_ruby_version: !ruby/object:Gem::Requirement
146
119
  none: false
147
120
  requirements:
148
- - - ">="
149
- - !ruby/object:Gem::Version
150
- segments:
151
- - 0
152
- version: "0"
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ hash: 2
124
+ segments:
125
+ - 0
126
+ version: "0"
153
127
  required_rubygems_version: !ruby/object:Gem::Requirement
154
128
  none: false
155
129
  requirements:
156
- - - ">="
157
- - !ruby/object:Gem::Version
158
- segments:
159
- - 1
160
- - 3
161
- - 6
162
- version: 1.3.6
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ hash: 2
133
+ segments:
134
+ - 0
135
+ version: "0"
163
136
  requirements: []
164
137
 
165
- rubyforge_project: monit
166
- rubygems_version: 1.3.7
138
+ rubyforge_project:
139
+ rubygems_version: 1.8.15
167
140
  signing_key:
168
141
  specification_version: 3
169
142
  summary: Connect to Monit
170
- test_files: []
171
-
143
+ test_files:
144
+ - spec/monit_spec.rb
145
+ - spec/samples/largish_status.xml
146
+ - spec/samples/smallish_status.xml
147
+ - spec/spec_helper.rb