monit 0.1.2 → 0.2.0

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.
@@ -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