arborist-webservice 0.0.1.pre20161005112659

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f4e227c38b920952303ac075e51233e29f069947e2f656ef61a7d5e58317f1dc
4
+ data.tar.gz: ecd18bd697e9dff6ad1c8d529447ff39d75f45b05c3f829a6cbf16ce4ff4d10b
5
+ SHA512:
6
+ metadata.gz: db32b2a146b73b8fe22fa7d2171ea9a7fc9cff8b39a0d73a0d1bcfb497586bd67283f59abcfbc97328d8a1f1a0a89cc9c6c490f2f93dc6a597e6d5c804cbcabe
7
+ data.tar.gz: d653466ef7c1fb00c80d958f75382f87a3291d2fce72fa8b7b0ca119b3d096479929f45334d982c07a406b1971d23cafea80cc4c1ec233e8997b9d01f19b10ed
checksums.yaml.gz.sig ADDED
Binary file
data.tar.gz.sig ADDED
Binary file
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ README.md
3
+ ChangeLog.md
4
+
5
+ LICENSE.txt
data/.editorconfig ADDED
@@ -0,0 +1,14 @@
1
+ # http://EditorConfig.org
2
+
3
+ # top-most EditorConfig file
4
+ root = true
5
+
6
+ # Unix-style newlines with a newline ending every file
7
+ [*]
8
+ end_of_line = lf
9
+ insert_final_newline = true
10
+
11
+ # Tab indentation
12
+ [**.*]
13
+ indent_style = tab
14
+
data/.rdoc_options ADDED
@@ -0,0 +1,16 @@
1
+ --- !ruby/object:RDoc::Options
2
+ encoding: UTF-8
3
+ static_path: []
4
+ rdoc_include:
5
+ - .
6
+ charset: UTF-8
7
+ exclude:
8
+ hyperlink_all: false
9
+ line_numbers: false
10
+ main_page: README.md
11
+ markup: markdown
12
+ show_hash: false
13
+ tab_width: 8
14
+ title: Arborist-Node-Webservice Documentation
15
+ visibility: :protected
16
+ webcvs:
data/.simplecov ADDED
@@ -0,0 +1,9 @@
1
+ # Simplecov config
2
+
3
+ SimpleCov.start do
4
+ add_filter 'spec'
5
+ add_filter 'integration'
6
+ add_group "Needing tests" do |file|
7
+ file.covered_percent < 90
8
+ end
9
+ end
data/ChangeLog ADDED
@@ -0,0 +1,8 @@
1
+ 2016-02-08 Michael Granger <ged@FaerieMUD.org>
2
+
3
+ * .document, .editorconfig, .hgignore, .pryrc, .rdoc_options,
4
+ .rvm.gems, .rvmrc, .simplecov, Gemfile, LICENSE.txt, Rakefile,
5
+ certs/ged.pem, lib/arborist/node/webservice.rb,
6
+ spec/arborist/node/webservice_spec.rb, spec/spec_helper.rb:
7
+ Initial commit.
8
+ [d318b4f0d795] [tip]
data/History.md ADDED
@@ -0,0 +1,4 @@
1
+ ## v0.0.1 [YYYY-MM-DD] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ Initial release.
4
+
data/Manifest.txt ADDED
@@ -0,0 +1,14 @@
1
+ .document
2
+ .editorconfig
3
+ .rdoc_options
4
+ .simplecov
5
+ ChangeLog
6
+ History.md
7
+ Manifest.txt
8
+ README.md
9
+ Rakefile
10
+ lib/arborist/monitor/webservice.rb
11
+ lib/arborist/node/webservice.rb
12
+ lib/arborist/webservice.rb
13
+ spec/arborist/node/webservice_spec.rb
14
+ spec/spec_helper.rb
data/README.md ADDED
@@ -0,0 +1,100 @@
1
+ # Arborist-Webservices
2
+
3
+ home
4
+ : http://bitbucket.org/ged/Arborist-Webservices
5
+
6
+ github
7
+ : https://github.com/ged/arborist-webservices
8
+
9
+ docs
10
+ : http://deveiate.org/code/arborist-webservices
11
+
12
+
13
+ ## Description
14
+
15
+ This is a collection of webservice monitoring tools for the Arborist monitoring toolkit (http://arbori.st/).
16
+
17
+ It can be used to describe and monitor HTTP services in more detail than a simple port check.
18
+
19
+
20
+ ### Examples
21
+
22
+ Webservice nodes, like `service` nodes, are specified under a `host` node, which should be a single
23
+ instance of physical hardware that is hosting the service.
24
+
25
+ The simplest example is an unauthenticated REST service running on port 80:
26
+
27
+ Arborist::Host 'example-webserver' do
28
+ address 'ws01-01.example.com'
29
+ webservice 'api-v1', 'http://api.example.com/v1/heartbeat'
30
+ end
31
+
32
+ This adds a `webservice` child node to the containing host with an identifier of
33
+ `frontend-17-api-example-com-webservice`.
34
+
35
+ The simplest monitor setup to monitor that service might look something like:
36
+
37
+ # -*- ruby -*-
38
+ #encoding: utf-8
39
+
40
+ require 'arborist/monitor/webservice'
41
+ Arborist::Monitor::Webservice::REST.default
42
+
43
+ This would check that an OPTIONS HTTP request to `http://api.example.com/v1/heartbeat` responds with a 2xx status code.
44
+
45
+
46
+ ## Prerequisites
47
+
48
+ * Ruby
49
+
50
+
51
+ ## Installation
52
+
53
+ $ gem install arborist-webservices
54
+
55
+
56
+ ## Contributing
57
+
58
+ You can check out the current development source with Mercurial via its
59
+ {project page}[http://bitbucket.org/ged/arborist-webservices]. Or if you prefer Git, via
60
+ {its Github mirror}[https://github.com/ged/arborist-webservices].
61
+
62
+ After checking out the source, run:
63
+
64
+ $ rake newb
65
+
66
+ This task will install any missing dependencies, run the tests/specs,
67
+ and generate the API documentation.
68
+
69
+
70
+ ## License
71
+
72
+ Copyright (c) 2016, Michael Granger
73
+ All rights reserved.
74
+
75
+ Redistribution and use in source and binary forms, with or without
76
+ modification, are permitted provided that the following conditions are met:
77
+
78
+ * Redistributions of source code must retain the above copyright notice,
79
+ this list of conditions and the following disclaimer.
80
+
81
+ * Redistributions in binary form must reproduce the above copyright notice,
82
+ this list of conditions and the following disclaimer in the documentation
83
+ and/or other materials provided with the distribution.
84
+
85
+ * Neither the name of the author/s, nor the names of the project's
86
+ contributors may be used to endorse or promote products derived from this
87
+ software without specific prior written permission.
88
+
89
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
90
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
91
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
92
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
93
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
94
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
95
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
96
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
97
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
98
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
99
+
100
+
data/Rakefile ADDED
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env rake
2
+
3
+ begin
4
+ require 'hoe'
5
+ rescue LoadError
6
+ abort "This Rakefile requires hoe (gem install hoe)"
7
+ end
8
+
9
+ GEMSPEC = 'arborist-webservice.gemspec'
10
+
11
+
12
+ Hoe.plugin :mercurial
13
+ Hoe.plugin :signing
14
+ Hoe.plugin :deveiate
15
+
16
+ Hoe.plugins.delete :rubyforge
17
+
18
+ hoespec = Hoe.spec 'arborist-webservice' do |spec|
19
+ spec.readme_file = 'README.md'
20
+ spec.history_file = 'History.md'
21
+ spec.extra_rdoc_files = FileList[ '*.md' ]
22
+ spec.license 'BSD-3-Clause'
23
+ spec.urls = {
24
+ home: 'http://deveiate.org/projects/arborist-webservice',
25
+ code: 'http://bitbucket.org/ged/arborist-webservice',
26
+ docs: 'http://deveiate.org/code/arborist-webservice',
27
+ github: 'http://github.com/ged/arborist-webservice',
28
+ }
29
+
30
+ spec.developer 'Michael Granger', 'ged@FaerieMUD.org'
31
+
32
+ spec.dependency 'arborist', '~> 0'
33
+ spec.dependency 'loggability', '~> 0.11'
34
+ spec.dependency 'httpclient', '~> 2.7'
35
+
36
+ spec.dependency 'hoe-deveiate', '~> 0.3', :developer
37
+ spec.dependency 'simplecov', '~> 0.7', :developer
38
+ spec.dependency 'rdoc-generator-fivefish', '~> 0.1', :developer
39
+
40
+ spec.hg_sign_tags = true if spec.respond_to?( :hg_sign_tags= )
41
+ spec.check_history_on_release = true if spec.respond_to?( :check_history_on_release= )
42
+
43
+ self.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
44
+ end
45
+
46
+
47
+ ENV['VERSION'] ||= hoespec.spec.version.to_s
48
+
49
+ # Run the tests before checking in
50
+ task 'hg:precheckin' => [ :check_history, :check_manifest, :gemspec, :spec ]
51
+
52
+ task :test => :spec
53
+
54
+ # Rebuild the ChangeLog immediately before release
55
+ task :prerelease => 'ChangeLog'
56
+ CLOBBER.include( 'ChangeLog' )
57
+
58
+ desc "Build a coverage report"
59
+ task :coverage do
60
+ ENV["COVERAGE"] = 'yes'
61
+ Rake::Task[:spec].invoke
62
+ end
63
+ CLOBBER.include( 'coverage' )
64
+
65
+
66
+ # Use the fivefish formatter for docs generated from development checkout
67
+ if File.directory?( '.hg' )
68
+ require 'rdoc/task'
69
+
70
+ Rake::Task[ 'docs' ].clear
71
+ RDoc::Task.new( 'docs' ) do |rdoc|
72
+ rdoc.main = "README.rdoc"
73
+ rdoc.markup = 'markdown'
74
+ rdoc.rdoc_files.include( "*.rdoc", "ChangeLog", "lib/**/*.rb" )
75
+ rdoc.generator = :fivefish
76
+ rdoc.title = 'Webservice Node Type for Arborist'
77
+ rdoc.rdoc_dir = 'doc'
78
+ end
79
+ end
80
+
81
+ task :gemspec => GEMSPEC
82
+ file GEMSPEC => __FILE__
83
+ task GEMSPEC do |task|
84
+ spec = $hoespec.spec
85
+ spec.files.delete( '.gemtest' )
86
+ spec.signing_key = nil
87
+ spec.cert_chain = ['certs/ged.pem']
88
+ spec.version = "#{spec.version}.pre#{Time.now.strftime("%Y%m%d%H%M%S")}"
89
+ File.open( task.name, 'w' ) do |fh|
90
+ fh.write( spec.to_ruby )
91
+ end
92
+ end
93
+
94
+ CLOBBER.include( GEMSPEC.to_s )
95
+
@@ -0,0 +1,177 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'thread'
5
+ require 'httpclient'
6
+
7
+ require 'arborist'
8
+ require 'arborist/webservice'
9
+ require 'arborist/mixins'
10
+ require 'arborist/monitor' unless defined?( Arborist::Monitor )
11
+
12
+
13
+ # A web-service monitor type for Arborist
14
+ module Arborist::Monitor::Webservice
15
+
16
+ using Arborist::TimeRefinements
17
+
18
+
19
+
20
+ # Arborist HTML web service monitor logic
21
+ class HTML
22
+ extend Loggability
23
+ log_to :arborist_webservice
24
+
25
+
26
+ # Defaults for instances of this monitor
27
+ DEFAULT_OPTIONS = {
28
+ timeout: 5.seconds
29
+ }
30
+
31
+
32
+ ### Instantiate a monitor check and run it for the specified +nodes+.
33
+ def self::run( nodes )
34
+ return self.new.run( nodes )
35
+ end
36
+
37
+
38
+ ### Create a new HTML webservice monitor with the specified +options+. Valid options are:
39
+ ###
40
+ ### +:timeout+
41
+ ### Set the number of seconds to wait for a connection for each node.
42
+ def initialize( options=DEFAULT_OPTIONS )
43
+ options = DEFAULT_OPTIONS.merge( options || {} )
44
+
45
+ options.each do |name, value|
46
+ self.public_send( "#{name}=", value )
47
+ end
48
+
49
+ agent = "%p/%s via %s" %
50
+ [ self.class, Arborist::Webservice::VERSION, HTTPClient::DEFAULT_AGENT_NAME ]
51
+ @client = HTTPClient.new( agent_name: agent )
52
+ end
53
+
54
+
55
+ ######
56
+ public
57
+ ######
58
+
59
+ # The timeout for connecting, in seconds.
60
+ attr_accessor :timeout
61
+
62
+ # The HTTPClient object to use for HTTP
63
+ attr_accessor :client
64
+
65
+
66
+ ### Return a clone of this object with its timeout set to +new_timeout+.
67
+ def with_timeout( new_timeout )
68
+ copy = self.clone
69
+ copy.timeout = new_timeout
70
+ return copy
71
+ end
72
+
73
+
74
+ ### Run the HTML check for each of the specified Hash of +nodes+ and return a Hash of
75
+ ### updates for them based on trying to connect to them.
76
+ def run( nodes )
77
+ self.log.debug "Got %d nodes to check with %p" % [ nodes.length, self ]
78
+
79
+ connections = self.make_request_connections( nodes )
80
+ return self.wait_for_connections( connections )
81
+ end
82
+
83
+
84
+ ### Create Threads that will execute the HTTP requests for the specified +nodes+
85
+ ### and return them in a ThreadGroup.
86
+ def make_request_connections( nodes )
87
+ connections = {}
88
+
89
+ nodes.each do |identifier, node_data|
90
+ uri = node_data['uri']
91
+ conn = client.head_async( uri )
92
+ connections[ conn ] = identifier
93
+ end
94
+
95
+ return connections
96
+ end
97
+
98
+
99
+ ### Fetch the response from the request in each thread in the specified
100
+ ### +threadgroup+. Return the results.
101
+ def wait_for_connections( connections )
102
+ results = {}
103
+ start = Time.now
104
+ timeout_at = Time.now + self.timeout
105
+
106
+ until connections.empty? || timeout_at.past?
107
+ responses = self.handle_connection_responses( connections )
108
+ results.merge!( responses )
109
+ end
110
+
111
+ # The rest are timeouts
112
+ if !connections.empty?
113
+ errors = self.timeout_connections( connections )
114
+ results.merge!( errors )
115
+ end
116
+
117
+ return results
118
+ end
119
+
120
+
121
+ ### Look for +connections+ that are finished and remove them. Modifies +connections+
122
+ ### in place and returns a Hash of results based on responses.
123
+ def handle_connection_responses( connections )
124
+ results = {}
125
+
126
+ connections.keys.each do |conn|
127
+ begin
128
+ next unless conn.finished?
129
+
130
+ identifier = connections.delete( conn )
131
+ message = conn.pop
132
+
133
+ if message.ok?
134
+ results[ identifier ] = {
135
+ status: message.status_code,
136
+ http_version: message.http_version,
137
+ }
138
+ else
139
+ results[ identifier ] = {
140
+ error: "#{message.status_code} response",
141
+ status: message.status_code,
142
+ http_version: message.http_version,
143
+ }
144
+ end
145
+ rescue => err
146
+ identifier ||= connections.delete( conn ) or
147
+ raise "Couldn't find identifier for connection %p" % [ conn ]
148
+ results[ identifier ] = { error: err.message }
149
+ end
150
+ end
151
+
152
+ return results
153
+ end
154
+
155
+
156
+ ### Cancel each of the given +connections+ and return a Hash of results.
157
+ def timeout_connections( connections )
158
+ results = {}
159
+ connections.each do |conn, identifier|
160
+ conn.async_thread.kill
161
+ results[ identifier ] = {
162
+ error: "Request timeout after %ds." % [ self.timeout ]
163
+ }
164
+ end
165
+
166
+ return results
167
+ end
168
+
169
+ end # class HTML
170
+
171
+
172
+ # Arborist REST webservice monitor logic
173
+ class REST < Arborist::Monitor::Webservice::HTML
174
+ end # class REST
175
+
176
+ end # class Arborist::Monitor::Webservice
177
+
@@ -0,0 +1,97 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'loggability'
5
+
6
+ require 'arborist'
7
+ require 'arborist/webservice'
8
+ require 'arborist/node/service' unless defined?( Arborist::Node::Service )
9
+
10
+
11
+ # A web-service node type for Arborist
12
+ class Arborist::Node::Webservice < Arborist::Node::Service
13
+ extend Loggability
14
+
15
+
16
+ # Loggability API -- use the logger for this library
17
+ log_to :arborist_webservice
18
+
19
+ # Webservices live under Host nodes
20
+ parent_type :host
21
+
22
+
23
+ ### Create a new Webservice node.
24
+ def initialize( identifier, host, uri, attributes={}, &block )
25
+ @uri = URI( uri )
26
+
27
+ attributes[:app_protocol] ||= @uri.scheme
28
+ attributes[:port] ||= @uri.port
29
+ attributes[:protocol] = 'tcp'
30
+ attributes[:http_method] ||= 'OPTIONS'
31
+ attributes[:expected_status] ||= '2xx'
32
+
33
+ self.log.debug "Supering with attributes: %p " % [ attributes ]
34
+ super( identifier, host, attributes, &block )
35
+
36
+ @api_version = nil
37
+ end
38
+
39
+
40
+ ######
41
+ public
42
+ ######
43
+
44
+ ##
45
+ # The URI of an endpoint that can be used to monitor the webservice
46
+ attr_reader :uri
47
+
48
+ ##
49
+ # The API version of this service (if it has one)
50
+ attr_reader :api_version
51
+
52
+
53
+ ### Returns +true+ if the node matches the specified +key+ and +val+ criteria.
54
+ def match_criteria?( key, val )
55
+ self.log.debug "Matching %p: %p against %p" % [ key, val, self ]
56
+ return case key
57
+ when 'uri'
58
+ val = URI( val )
59
+ self.uri == val
60
+ else
61
+ super
62
+ end
63
+ end
64
+
65
+
66
+ ### Return a Hash of the operational values that are included with the node's
67
+ ### monitor state.
68
+ def operational_values
69
+ return super.merge(
70
+ uri: self.uri.to_s,
71
+ api_version: self.api_version
72
+ )
73
+ end
74
+
75
+
76
+ ### Return service-node-specific information for #inspect.
77
+ def node_description
78
+ return "{%s}%s" % [
79
+ self.uri,
80
+ self.api_version ? " (#{self.api_version})" : ''
81
+ ]
82
+ end
83
+
84
+
85
+
86
+ #######
87
+ private
88
+ #######
89
+
90
+ ### Make an identifier from the specified +url+.
91
+ def make_identifier_suffix( url )
92
+ return url.to_s.gsub( /\W+/, '-' )
93
+ end
94
+
95
+
96
+ end # class Arborist::Node::Webservice
97
+
@@ -0,0 +1,36 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'loggability'
5
+ require 'arborist'
6
+
7
+
8
+ # A collection of HTTP tools for the Arborist monitoring toolkit.
9
+ module Arborist::Webservice
10
+ extend Loggability
11
+
12
+ # Loggability API -- set up a log host for this library
13
+ log_as :arborist_webservice
14
+
15
+
16
+ # Package version
17
+ VERSION = '0.0.1'
18
+
19
+ # Version control revision
20
+ REVISION = %q$Revision: d318b4f0d795 $
21
+
22
+
23
+ ### Return the name of the library with the version, and optionally the build ID if
24
+ ### +include_build+ is true.
25
+ def self::version_string( include_build: false )
26
+ str = "%p v%s" % [ self, VERSION ]
27
+ str << ' (' << REVISION.strip << ')' if include_build
28
+ return str
29
+ end
30
+
31
+
32
+ require 'arborist/monitor/webservice'
33
+ require 'arborist/node/webservice'
34
+
35
+ end # module Arborist::Webservice
36
+
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env rspec -cfd
2
+ #encoding: utf-8
3
+
4
+ require_relative '../../spec_helper'
5
+
6
+ require 'rspec'
7
+ require 'arborist/node/webservice'
8
+
9
+ describe Arborist::Node::Webservice do
10
+
11
+
12
+
13
+ end
14
+
@@ -0,0 +1,23 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'simplecov' if ENV['COVERAGE']
5
+
6
+ require 'rspec'
7
+
8
+ require 'loggability/spechelpers'
9
+
10
+
11
+ ### Mock with RSpec
12
+ RSpec.configure do |config|
13
+ config.run_all_when_everything_filtered = true
14
+ config.filter_run :focus
15
+ config.order = 'random'
16
+ config.mock_with( :rspec ) do |mock|
17
+ mock.syntax = :expect
18
+ end
19
+
20
+ config.include( Loggability::SpecHelpers )
21
+ end
22
+
23
+
metadata ADDED
@@ -0,0 +1,234 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: arborist-webservice
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.pre20161005112659
5
+ platform: ruby
6
+ authors:
7
+ - Michael Granger
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIEbDCCAtSgAwIBAgIBATANBgkqhkiG9w0BAQsFADA+MQwwCgYDVQQDDANnZWQx
14
+ GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
15
+ HhcNMTYwODIwMTgxNzQyWhcNMTcwODIwMTgxNzQyWjA+MQwwCgYDVQQDDANnZWQx
16
+ GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
17
+ ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC/JWGRHO+USzR97vXjkFgt
18
+ 83qeNf2KHkcvrRTSnR64i6um/ziin0I0oX23H7VYrDJC9A/uoUa5nGRJS5Zw/+wW
19
+ ENcvWVZS4iUzi4dsYJGY6yEOsXh2CcF46+QevV8iE+UmbkU75V7Dy1JCaUOyizEt
20
+ TH5UHsOtUU7k9TYARt/TgYZKuaoAMZZd5qyVqhF1vV+7/Qzmp89NGflXf2xYP26a
21
+ 4MAX2qqKX/FKXqmFO+AGsbwYTEds1mksBF3fGsFgsQWxftG8GfZQ9+Cyu2+l1eOw
22
+ cZ+lPcg834G9DrqW2zhqUoLr1MTly4pqxYGb7XoDhoR7dd1kFE2a067+DzWC/ADt
23
+ +QkcqWUm5oh1fN0eqr7NsZlVJDulFgdiiYPQiIN7UNsii4Wc9aZqBoGcYfBeQNPZ
24
+ soo/6za/bWajOKUmDhpqvaiRv9EDpVLzuj53uDoukMMwxCMfgb04+ckQ0t2G7wqc
25
+ /D+K9JW9DDs3Yjgv9k4h7YMhW5gftosd+NkNC/+Y2CkCAwEAAaN1MHMwCQYDVR0T
26
+ BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFHKN/nkRusdqCJEuq3lgB3fJvyTg
27
+ MBwGA1UdEQQVMBOBEWdlZEBGYWVyaWVNVUQub3JnMBwGA1UdEgQVMBOBEWdlZEBG
28
+ YWVyaWVNVUQub3JnMA0GCSqGSIb3DQEBCwUAA4IBgQAPJzKiT0zBU7kpqe0aS2qb
29
+ FI0PJ4y5I8buU4IZGUD5NEt/N7pZNfOyBxkrZkXhS44Fp+xwBH5ebLbq/WY78Bqd
30
+ db0z6ZgW4LMYMpWFfbXsRbd9TU2f52L8oMAhxOvF7Of5qJMVWuFQ8FPagk2iHrdH
31
+ inYLQagqAF6goWTXgAJCdPd6SNeeSNqA6vlY7CV1Jh5kfNJJ6xu/CVij1GzCLu/5
32
+ DMOr26DBv+qLJRRC/2h34uX71q5QgeOyxvMg+7V3u/Q06DXyQ2VgeeqiwDFFpEH0
33
+ PFkdPO6ZqbTRcLfNH7mFgCBJjsfSjJrn0sPBlYyOXgCoByfZnZyrIMH/UY+lgQqS
34
+ 6Von1VDsfQm0eJh5zYZD64ZF86phSR7mUX3mXItwH04HrZwkWpvgd871DZVR3i1n
35
+ w8aNA5re5+Rt/Vvjxj5AcEnZnZiz5x959NaddQocX32Z1unHw44pzRNUur1GInfW
36
+ p4vpx2kUSFSAGjtCbDGTNV2AH8w9OU4xEmNz8c5lyoA=
37
+ -----END CERTIFICATE-----
38
+ date: 2016-10-05 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: arborist
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: loggability
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.11'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.11'
68
+ - !ruby/object:Gem::Dependency
69
+ name: httpclient
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '2.7'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '2.7'
82
+ - !ruby/object:Gem::Dependency
83
+ name: hoe-mercurial
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1.4'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.4'
96
+ - !ruby/object:Gem::Dependency
97
+ name: hoe-deveiate
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.8'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.8'
110
+ - !ruby/object:Gem::Dependency
111
+ name: hoe-highline
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.2'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0.2'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rdoc
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '4.0'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '4.0'
138
+ - !ruby/object:Gem::Dependency
139
+ name: simplecov
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '0.7'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.7'
152
+ - !ruby/object:Gem::Dependency
153
+ name: rdoc-generator-fivefish
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '0.1'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '0.1'
166
+ - !ruby/object:Gem::Dependency
167
+ name: hoe
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '3.15'
173
+ type: :development
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '3.15'
180
+ description: |-
181
+ This is a collection of webservice monitoring tools for the Arborist monitoring toolkit (http://arbori.st/).
182
+
183
+ It can be used to describe and monitor HTTP services in more detail than a simple port check.
184
+ email:
185
+ - ged@FaerieMUD.org
186
+ executables: []
187
+ extensions: []
188
+ extra_rdoc_files:
189
+ - History.md
190
+ - Manifest.txt
191
+ - README.md
192
+ files:
193
+ - ".document"
194
+ - ".editorconfig"
195
+ - ".rdoc_options"
196
+ - ".simplecov"
197
+ - ChangeLog
198
+ - History.md
199
+ - Manifest.txt
200
+ - README.md
201
+ - Rakefile
202
+ - lib/arborist/monitor/webservice.rb
203
+ - lib/arborist/node/webservice.rb
204
+ - lib/arborist/webservice.rb
205
+ - spec/arborist/node/webservice_spec.rb
206
+ - spec/spec_helper.rb
207
+ homepage: http://deveiate.org/projects/arborist-webservice
208
+ licenses:
209
+ - BSD-3-Clause
210
+ metadata: {}
211
+ post_install_message:
212
+ rdoc_options:
213
+ - "--main"
214
+ - README.md
215
+ require_paths:
216
+ - lib
217
+ required_ruby_version: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ required_rubygems_version: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - ">"
225
+ - !ruby/object:Gem::Version
226
+ version: 1.3.1
227
+ requirements: []
228
+ rubyforge_project:
229
+ rubygems_version: 2.5.1
230
+ signing_key:
231
+ specification_version: 4
232
+ summary: This is a collection of webservice monitoring tools for the Arborist monitoring
233
+ toolkit (http://arbori.st/)
234
+ test_files: []
metadata.gz.sig ADDED
Binary file