arborist-webservice 0.0.1.pre20161005112659 → 0.0.1.pre20180815100446

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f4e227c38b920952303ac075e51233e29f069947e2f656ef61a7d5e58317f1dc
4
- data.tar.gz: ecd18bd697e9dff6ad1c8d529447ff39d75f45b05c3f829a6cbf16ce4ff4d10b
3
+ metadata.gz: f1006dfaf9b120fa2720a2637603c4f75397cbe36d62f2039c35d4a1f8c39b56
4
+ data.tar.gz: 46b34fd363f89a60bcfa7cdafceeec8d2a68c00e9e0b79d2c5126b9fc4b47137
5
5
  SHA512:
6
- metadata.gz: db32b2a146b73b8fe22fa7d2171ea9a7fc9cff8b39a0d73a0d1bcfb497586bd67283f59abcfbc97328d8a1f1a0a89cc9c6c490f2f93dc6a597e6d5c804cbcabe
7
- data.tar.gz: d653466ef7c1fb00c80d958f75382f87a3291d2fce72fa8b7b0ca119b3d096479929f45334d982c07a406b1971d23cafea80cc4c1ec233e8997b9d01f19b10ed
6
+ metadata.gz: 3d5b067c522b37beb004f549c98fba58ba7e64806a79baa05be708344ef9cc6801d982ec083bedfacbed75f6e30eb5fa4ef09ebf0b744f88272d032f1ea2dc9a
7
+ data.tar.gz: 49457c9714ce9c128be66eb3e04a9f7bc280ebbf4c0359e2d3719e73415eb21ce62189eb07ff68e095f876f5b8b2dadf996b46dedf230d3084baa0aa4bf5d299
data/ChangeLog CHANGED
@@ -1,3 +1,36 @@
1
+ 2018-08-15 Michael Granger <ged@FaerieMUD.org>
2
+
3
+ * .gems, Rakefile, lib/arborist/monitor/webservice.rb,
4
+ lib/arborist/node/webservice.rb, lib/arborist/webservice.rb,
5
+ lib/arborist/webservice/connection.rb,
6
+ lib/arborist/webservice/constants.rb,
7
+ lib/arborist/webservice/monkeypatches.rb:
8
+ Checkpoint commit before switching to Typhoeus
9
+ [d2e9ed791434] [tip]
10
+
11
+ 2018-08-01 Mahlon E. Smith <mahlon@martini.nu>
12
+
13
+ * .ruby-version, lib/arborist/node/webservice.rb:
14
+ Keep the URI as a string when serializing.
15
+ [04839f2b49b5]
16
+
17
+ 2017-12-29 Michael Granger <ged@FaerieMUD.org>
18
+
19
+ * README.md:
20
+ Fix incorrect URLs in the README
21
+ [7bdc40158b25] [github/master]
22
+
23
+ * .gems, .pryrc, .ruby-gemset, .ruby-version, .rvm.gems, .rvmrc,
24
+ ChangeLog, History.md, LICENSE.txt, Manifest.txt, README.md,
25
+ Rakefile, arborist-webservice.gemspec, certs/ged.pem,
26
+ lib/arborist/monitor/webservice.rb, lib/arborist/node/webservice.rb,
27
+ lib/arborist/webservice.rb,
28
+ lib/arborist/webservice/monkeypatches.rb,
29
+ spec/arborist/monitor/webservice_spec.rb,
30
+ spec/arborist/webservice_spec.rb, spec/spec_helper.rb:
31
+ Finished up initial implementation
32
+ [dd3e9ea1e09f]
33
+
1
34
  2016-02-08 Michael Granger <ged@FaerieMUD.org>
2
35
 
3
36
  * .document, .editorconfig, .hgignore, .pryrc, .rdoc_options,
@@ -5,4 +38,4 @@
5
38
  certs/ged.pem, lib/arborist/node/webservice.rb,
6
39
  spec/arborist/node/webservice_spec.rb, spec/spec_helper.rb:
7
40
  Initial commit.
8
- [d318b4f0d795] [tip]
41
+ [d318b4f0d795]
data/Manifest.txt CHANGED
@@ -10,5 +10,8 @@ Rakefile
10
10
  lib/arborist/monitor/webservice.rb
11
11
  lib/arborist/node/webservice.rb
12
12
  lib/arborist/webservice.rb
13
+ lib/arborist/webservice/constants.rb
14
+ spec/arborist/monitor/webservice_spec.rb
13
15
  spec/arborist/node/webservice_spec.rb
16
+ spec/arborist/webservice_spec.rb
14
17
  spec/spec_helper.rb
data/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # Arborist-Webservices
2
2
 
3
3
  home
4
- : http://bitbucket.org/ged/Arborist-Webservices
4
+ : http://bitbucket.org/ged/Arborist-Webservice
5
5
 
6
6
  github
7
- : https://github.com/ged/arborist-webservices
7
+ : https://github.com/ged/arborist-webservice
8
8
 
9
9
  docs
10
- : http://deveiate.org/code/arborist-webservices
10
+ : http://deveiate.org/code/arborist-webservice
11
11
 
12
12
 
13
13
  ## Description
@@ -50,14 +50,14 @@ This would check that an OPTIONS HTTP request to `http://api.example.com/v1/hear
50
50
 
51
51
  ## Installation
52
52
 
53
- $ gem install arborist-webservices
53
+ $ gem install arborist-webservice
54
54
 
55
55
 
56
56
  ## Contributing
57
57
 
58
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].
59
+ {project page}[http://bitbucket.org/ged/arborist-webservice]. Or if you prefer Git, via
60
+ {its Github mirror}[https://github.com/ged/arborist-webservice].
61
61
 
62
62
  After checking out the source, run:
63
63
 
data/Rakefile CHANGED
@@ -31,7 +31,7 @@ hoespec = Hoe.spec 'arborist-webservice' do |spec|
31
31
 
32
32
  spec.dependency 'arborist', '~> 0'
33
33
  spec.dependency 'loggability', '~> 0.11'
34
- spec.dependency 'httpclient', '~> 2.7'
34
+ spec.dependency 'typhoeus', '~> 1.3'
35
35
 
36
36
  spec.dependency 'hoe-deveiate', '~> 0.3', :developer
37
37
  spec.dependency 'simplecov', '~> 0.7', :developer
@@ -1,25 +1,49 @@
1
1
  # -*- ruby -*-
2
2
  #encoding: utf-8
3
3
 
4
- require 'thread'
5
- require 'httpclient'
4
+ require 'typhoeus'
6
5
 
7
6
  require 'arborist'
8
- require 'arborist/webservice'
9
7
  require 'arborist/mixins'
10
8
  require 'arborist/monitor' unless defined?( Arborist::Monitor )
11
9
 
10
+ require 'arborist/webservice'
11
+ require 'arborist/webservice/constants'
12
+
13
+
14
+ using Arborist::TimeRefinements
15
+
12
16
 
13
17
  # A web-service monitor type for Arborist
14
18
  module Arborist::Monitor::Webservice
19
+ extend Configurability
20
+
21
+
22
+ configurability( 'arborist.monitors.webservice' ) do
23
+
24
+ ##
25
+ # The default timeout employed by the socket monitors, in floating-point
26
+ # seconds.
27
+ setting :default_timeout, default: 2.0 do |val|
28
+ Float( val )
29
+ end
30
+
31
+ ##
32
+ # The maximum number of ongoing HTTP requests
33
+ setting :max_concurrency, default: 100 do |val|
34
+ Integer( val )
35
+ end
15
36
 
16
- using Arborist::TimeRefinements
37
+ end
17
38
 
18
39
 
19
40
 
20
41
  # Arborist HTML web service monitor logic
21
42
  class HTML
22
43
  extend Loggability
44
+ include Arborist::Webservice::Constants
45
+
46
+
23
47
  log_to :arborist_webservice
24
48
 
25
49
 
@@ -28,6 +52,15 @@ module Arborist::Monitor::Webservice
28
52
  timeout: 5.seconds
29
53
  }
30
54
 
55
+ # The array of node properites used by this monitor
56
+ NODE_PROPERTIES = %i[ uri http_method body body_mimetype ].freeze
57
+
58
+
59
+ ### Return an array of attributes to fetch from nodes for this monitor.
60
+ def self::node_properties
61
+ return NODE_PROPERTIES
62
+ end
63
+
31
64
 
32
65
  ### Instantiate a monitor check and run it for the specified +nodes+.
33
66
  def self::run( nodes )
@@ -39,16 +72,8 @@ module Arborist::Monitor::Webservice
39
72
  ###
40
73
  ### +:timeout+
41
74
  ### 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 )
75
+ def initialize( timeout: Arborist::Monitor::Webservice.default_timeout )
76
+ self.timeout = timeout
52
77
  end
53
78
 
54
79
 
@@ -59,9 +84,6 @@ module Arborist::Monitor::Webservice
59
84
  # The timeout for connecting, in seconds.
60
85
  attr_accessor :timeout
61
86
 
62
- # The HTTPClient object to use for HTTP
63
- attr_accessor :client
64
-
65
87
 
66
88
  ### Return a clone of this object with its timeout set to +new_timeout+.
67
89
  def with_timeout( new_timeout )
@@ -71,99 +93,114 @@ module Arborist::Monitor::Webservice
71
93
  end
72
94
 
73
95
 
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.
96
+ ### Test HTTP connections for the specified +nodes+.
76
97
  def run( nodes )
77
- self.log.debug "Got %d nodes to check with %p" % [ nodes.length, self ]
98
+ results = {}
99
+ hydra = Typhoeus::Hydra.new( self.runner_settings )
100
+
101
+ nodes.each do |identifier, node|
102
+ self.log.debug "Making request for node %s" % [ identifier ]
103
+ request = self.request_for_node( node )
104
+ request.on_complete do |response|
105
+ self.log.debug "Handling response for %s" % [ identifier ]
106
+ results[ identifier ] = self.make_response_results( response )
107
+ end
108
+ hydra.queue( request )
109
+ end
78
110
 
79
- connections = self.make_request_connections( nodes )
80
- return self.wait_for_connections( connections )
111
+ hydra.run
112
+
113
+ return results
81
114
  end
82
115
 
83
116
 
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 = {}
117
+ ### Return a request object built to test the specified webservice +node+.
118
+ def request_for_node( node_data )
119
+ options = {
120
+ method: node_data['http_method'] || DEFAULT_HTTP_METHOD,
121
+ http_version: node_data['http_version'] || DEFAULT_HTTP_VERSION,
122
+ headers: self.make_headers_hash( node_data ),
123
+ body: node_data['body'],
124
+ timeout: self.timeout,
125
+ connecttimeout: self.timeout / 2.0,
126
+ }
88
127
 
89
- nodes.each do |identifier, node_data|
90
- uri = node_data['uri']
91
- conn = client.head_async( uri )
92
- connections[ conn ] = identifier
128
+ if ssl_opts = self.make_ssl_options( node_data['uri'], node_data )
129
+ options.merge!( ssl_opts )
93
130
  end
94
131
 
95
- return connections
132
+ return Typhoeus::Request.new( node_data['uri'], options )
96
133
  end
97
134
 
98
135
 
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
136
+ ### Make a Hash of SSL options if any are specified.
137
+ def make_ssl_options( uri, node_data )
138
+ return nil unless uri.start_with?( 'https:' )
110
139
 
111
- # The rest are timeouts
112
- if !connections.empty?
113
- errors = self.timeout_connections( connections )
114
- results.merge!( errors )
140
+ ssl_attributes = SSL_ATTRIBUTES.each_with_object({}) do |(key, ssl_key), opts|
141
+ opts[ ssl_key ] = node_data[ key.to_s ] if node_data.key?( key.to_s )
115
142
  end
116
143
 
117
- return results
144
+ return ssl_attributes
118
145
  end
119
146
 
120
147
 
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
148
+ ### Extract header values from the node_data, combine them with the defaults,
149
+ ### and return them as a Hash.
150
+ def make_headers_hash( node_data )
151
+ headers = DEFAULT_HTTP_HEADERS.merge( node_data['http_headers'] || {} )
152
+ if node_data['body']
153
+ headers[ 'Content-type' ] ||= node_data['body_mimetype'] ||
154
+ 'application/x-www-form-urlencoded'
150
155
  end
151
156
 
152
- return results
157
+ return headers
153
158
  end
154
159
 
155
160
 
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 ]
161
+ ### Return a Hash of options to pass to the request runner.
162
+ def runner_settings
163
+ return {
164
+ max_concurrency: Arborist::Monitor::Webservice.max_concurrency,
165
+ }
166
+ end
167
+
168
+
169
+ ### Return a Hash of results appropriate for the specified +response+.
170
+ def make_response_results( response )
171
+ if response.success?
172
+ return { webservice: self.success_results(response) }
173
+ elsif response.timed_out?
174
+ self.log.error "Request timed out."
175
+ return { error: 'Request timed out.' }
176
+ elsif response.code == 0
177
+ self.log.error "Non-HTTP response: %s." % [ response.return_code ]
178
+ return { error: response.return_code }
179
+ else
180
+ self.log.error "Got a %03d %s response." % [ response.code, response.status_message ]
181
+ return {
182
+ error: "%03d %s" % [ response.code, response.status_message ]
163
183
  }
164
184
  end
185
+ end
165
186
 
166
- return results
187
+
188
+ ### Return the information hash attached to webservice nodes for successful
189
+ ### responses.
190
+ def success_results( response )
191
+ return {
192
+ status: response.code,
193
+ status_message: response.status_message,
194
+ headers: response.headers_hash,
195
+ appconnect_time: response.appconnect_time,
196
+ connect_time: response.connect_time,
197
+ lookup_time: response.name_lookup_time,
198
+ pretransfer_time: response.pretransfer_time,
199
+ redirect_count: response.redirect_count,
200
+ redirect_time: response.redirect_time,
201
+ start_transfer_time: response.start_transfer_time,
202
+ total_time: response.total_time,
203
+ }
167
204
  end
168
205
 
169
206
  end # class HTML
@@ -4,13 +4,16 @@
4
4
  require 'loggability'
5
5
 
6
6
  require 'arborist'
7
- require 'arborist/webservice'
8
7
  require 'arborist/node/service' unless defined?( Arborist::Node::Service )
9
8
 
9
+ require 'arborist/webservice'
10
+ require 'arborist/webservice/constants'
11
+
10
12
 
11
13
  # A web-service node type for Arborist
12
14
  class Arborist::Node::Webservice < Arborist::Node::Service
13
15
  extend Loggability
16
+ include Arborist::Webservice::Constants
14
17
 
15
18
 
16
19
  # Loggability API -- use the logger for this library
@@ -22,18 +25,21 @@ class Arborist::Node::Webservice < Arborist::Node::Service
22
25
 
23
26
  ### Create a new Webservice node.
24
27
  def initialize( identifier, host, uri, attributes={}, &block )
25
- @uri = URI( uri )
28
+ @uri = uri
29
+ uri_obj = URI( uri )
26
30
 
27
- attributes[:app_protocol] ||= @uri.scheme
28
- attributes[:port] ||= @uri.port
31
+ attributes[:app_protocol] ||= uri_obj.scheme
32
+ attributes[:port] ||= uri_obj.port
29
33
  attributes[:protocol] = 'tcp'
30
- attributes[:http_method] ||= 'OPTIONS'
31
- attributes[:expected_status] ||= '2xx'
34
+ attributes[:app_protocol] = 'http'
35
+ attributes[:http_method] ||= DEFAULT_HTTP_METHOD
36
+ attributes[:http_headers] ||= {}
37
+ attributes[:expected_status] ||= DEFAULT_EXPECTED_STATUS
38
+ attributes[:body] ||= ''
39
+ attributes[:body_mimetype] ||= DEFAULT_BODY_MIMETYPE
32
40
 
33
41
  self.log.debug "Supering with attributes: %p " % [ attributes ]
34
42
  super( identifier, host, attributes, &block )
35
-
36
- @api_version = nil
37
43
  end
38
44
 
39
45
 
@@ -43,11 +49,42 @@ class Arborist::Node::Webservice < Arborist::Node::Service
43
49
 
44
50
  ##
45
51
  # The URI of an endpoint that can be used to monitor the webservice
46
- attr_reader :uri
52
+ dsl_accessor :uri
47
53
 
48
54
  ##
49
- # The API version of this service (if it has one)
50
- attr_reader :api_version
55
+ # The http_method used by the service
56
+ dsl_accessor :http_method
57
+
58
+ ##
59
+ # The expected_status used by the service
60
+ dsl_accessor :expected_status
61
+
62
+ ##
63
+ # The body used by the service
64
+ dsl_accessor :body
65
+
66
+ ##
67
+ # The body_mimetype used by the service
68
+ dsl_accessor :body_mimetype
69
+
70
+
71
+ SSL_ATTRIBUTES.each_key do |attrname|
72
+ dsl_accessor( attrname )
73
+ end
74
+
75
+
76
+ ### Set node +attributes+ from a Hash.
77
+ def modify( attributes )
78
+ attributes = stringify_keys( attributes )
79
+
80
+ super
81
+
82
+ self.uri( attributes['uri'] )
83
+ self.http_method( attributes['http_method'] )
84
+ self.expected_status( attributes['expected_status'] )
85
+ self.body( attributes['body'] )
86
+ self.body_mimetype( attributes['body_mimetype'] )
87
+ end
51
88
 
52
89
 
53
90
  ### Returns +true+ if the node matches the specified +key+ and +val+ criteria.
@@ -55,8 +92,15 @@ class Arborist::Node::Webservice < Arborist::Node::Service
55
92
  self.log.debug "Matching %p: %p against %p" % [ key, val, self ]
56
93
  return case key
57
94
  when 'uri'
58
- val = URI( val )
59
- self.uri == val
95
+ URI( self.uri ) == URI( val )
96
+ when 'http_method'
97
+ self.http_method == val
98
+ when 'expected_status'
99
+ self.expected_status == val
100
+ when 'body'
101
+ self.body == val
102
+ when 'body_mimetype'
103
+ self.body_mimetype == val
60
104
  else
61
105
  super
62
106
  end
@@ -67,21 +111,44 @@ class Arborist::Node::Webservice < Arborist::Node::Service
67
111
  ### monitor state.
68
112
  def operational_values
69
113
  return super.merge(
70
- uri: self.uri.to_s,
71
- api_version: self.api_version
114
+ uri: self.uri,
115
+ http_method: self.http_method,
116
+ expected_status: self.expected_status,
117
+ body: self.body,
118
+ body_mimetype: self.body_mimetype
72
119
  )
73
120
  end
74
121
 
75
122
 
76
123
  ### Return service-node-specific information for #inspect.
77
124
  def node_description
78
- return "{%s}%s" % [
125
+ desc = "%s %s %s/1.1" % [
126
+ self.http_method,
79
127
  self.uri,
80
- self.api_version ? " (#{self.api_version})" : ''
128
+ self.app_protocol.upcase,
81
129
  ]
130
+
131
+ if body && !body.empty?
132
+ desc << " {%s} (%s)" % [ self.body, self.body_mimetype ]
133
+ end
134
+
135
+ desc << ' -> %d response' % [ self.expected_status.to_i ]
136
+
137
+ return desc
82
138
  end
83
139
 
84
140
 
141
+ ### Serialize the resource node. Return a Hash of the host node's state.
142
+ def to_h( * )
143
+ return super.merge(
144
+ uri: self.uri,
145
+ http_method: self.http_method,
146
+ expected_status: self.expected_status,
147
+ body: self.body,
148
+ body_mimetype: self.body_mimetype
149
+ )
150
+ end
151
+
85
152
 
86
153
  #######
87
154
  private
@@ -17,7 +17,7 @@ module Arborist::Webservice
17
17
  VERSION = '0.0.1'
18
18
 
19
19
  # Version control revision
20
- REVISION = %q$Revision: d318b4f0d795 $
20
+ REVISION = %q$Revision: 59e390021ccd $
21
21
 
22
22
 
23
23
  ### Return the name of the library with the version, and optionally the build ID if
@@ -32,5 +32,7 @@ module Arborist::Webservice
32
32
  require 'arborist/monitor/webservice'
33
33
  require 'arborist/node/webservice'
34
34
 
35
+ autoload :Constants, 'arborist/webservice/constants'
36
+
35
37
  end # module Arborist::Webservice
36
38
 
@@ -8,7 +8,17 @@ require 'arborist/node/webservice'
8
8
 
9
9
  describe Arborist::Node::Webservice do
10
10
 
11
-
11
+ it "can match on URI"
12
+ it "can match on HTTP method"
13
+ it "can match on request body"
14
+ it "can match on request body media type"
15
+
16
+ it "includes the URI in the operational attributes"
17
+ it "includes the HTTP method in the operational attributes"
18
+ it "includes the request body in the operational attributes"
19
+ it "includes the request body media type in the operational attributes"
20
+
21
+ it "provides a DSL declaration to disable SSL verification"
12
22
 
13
23
  end
14
24
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arborist-webservice
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre20161005112659
4
+ version: 0.0.1.pre20180815100446
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Granger
@@ -10,9 +10,9 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIEbDCCAtSgAwIBAgIBATANBgkqhkiG9w0BAQsFADA+MQwwCgYDVQQDDANnZWQx
13
+ MIIEbDCCAtSgAwIBAgIBATANBgkqhkiG9w0BAQUFADA+MQwwCgYDVQQDDANnZWQx
14
14
  GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
15
- HhcNMTYwODIwMTgxNzQyWhcNMTcwODIwMTgxNzQyWjA+MQwwCgYDVQQDDANnZWQx
15
+ HhcNMTcwOTI3MDAzMDQ0WhcNMTgwOTI3MDAzMDQ0WjA+MQwwCgYDVQQDDANnZWQx
16
16
  GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
17
17
  ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC/JWGRHO+USzR97vXjkFgt
18
18
  83qeNf2KHkcvrRTSnR64i6um/ziin0I0oX23H7VYrDJC9A/uoUa5nGRJS5Zw/+wW
@@ -25,17 +25,17 @@ cert_chain:
25
25
  /D+K9JW9DDs3Yjgv9k4h7YMhW5gftosd+NkNC/+Y2CkCAwEAAaN1MHMwCQYDVR0T
26
26
  BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFHKN/nkRusdqCJEuq3lgB3fJvyTg
27
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=
28
+ YWVyaWVNVUQub3JnMA0GCSqGSIb3DQEBBQUAA4IBgQB/qyi5pCjK8ceoKalfVAjS
29
+ vG64FEnLnD1bm39T5UaFIRmo+abZtfpg2QhwKvPbPjOicau2+m+MDQ2Cc3tgyaC3
30
+ dZxcP6w8APFg4AId09uWAZKf0xajvBMS2aOz8Bbmag6fwqRRkTMqsNYnmqcF7aRT
31
+ DuEzbEMfaOUYjU9RuB48vr4q8yRft0ww+3jq5iwNkrX1buL2pwBbyvgms6D/BV41
32
+ MaTVMjsHqJUwU2xVfhGtxGAWAer5S1HGYHkbio6mGVtiie0uWjmnzi7ppIlMr48a
33
+ 7BNTsoZ+/JRk3iQWmmNsyFT7xfqBKye7cH11BX8V8P4MeGB5YWlMI+Myj5DZY3fQ
34
+ st2AGD4rb1l0ia7PfubcBThSIdz61eCb8gRi/RiZZwb3/7+eyEncLJzt2Ob9fGSF
35
+ X0qdrKi+2aZZ0NGuFj9AItBsVmAvkBGIpX4TEKQp5haEbPpmaqO5nIIhV26PXmyT
36
+ OMKv6pWsoS81vw5KAGBmfX8nht/Py90DQrbRvakATGI=
37
37
  -----END CERTIFICATE-----
38
- date: 2016-10-05 00:00:00.000000000 Z
38
+ date: 2018-08-15 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: arborist
@@ -66,19 +66,19 @@ dependencies:
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0.11'
68
68
  - !ruby/object:Gem::Dependency
69
- name: httpclient
69
+ name: typhoeus
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '2.7'
74
+ version: '1.3'
75
75
  type: :runtime
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '2.7'
81
+ version: '1.3'
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: hoe-mercurial
84
84
  requirement: !ruby/object:Gem::Requirement
@@ -99,14 +99,14 @@ dependencies:
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '0.8'
102
+ version: '0.9'
103
103
  type: :development
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '0.8'
109
+ version: '0.9'
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: hoe-highline
112
112
  requirement: !ruby/object:Gem::Requirement
@@ -122,61 +122,61 @@ dependencies:
122
122
  - !ruby/object:Gem::Version
123
123
  version: '0.2'
124
124
  - !ruby/object:Gem::Dependency
125
- name: rdoc
125
+ name: simplecov
126
126
  requirement: !ruby/object:Gem::Requirement
127
127
  requirements:
128
128
  - - "~>"
129
129
  - !ruby/object:Gem::Version
130
- version: '4.0'
130
+ version: '0.7'
131
131
  type: :development
132
132
  prerelease: false
133
133
  version_requirements: !ruby/object:Gem::Requirement
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: '4.0'
137
+ version: '0.7'
138
138
  - !ruby/object:Gem::Dependency
139
- name: simplecov
139
+ name: rdoc-generator-fivefish
140
140
  requirement: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '0.7'
144
+ version: '0.1'
145
145
  type: :development
146
146
  prerelease: false
147
147
  version_requirements: !ruby/object:Gem::Requirement
148
148
  requirements:
149
149
  - - "~>"
150
150
  - !ruby/object:Gem::Version
151
- version: '0.7'
151
+ version: '0.1'
152
152
  - !ruby/object:Gem::Dependency
153
- name: rdoc-generator-fivefish
153
+ name: rdoc
154
154
  requirement: !ruby/object:Gem::Requirement
155
155
  requirements:
156
156
  - - "~>"
157
157
  - !ruby/object:Gem::Version
158
- version: '0.1'
158
+ version: '4.0'
159
159
  type: :development
160
160
  prerelease: false
161
161
  version_requirements: !ruby/object:Gem::Requirement
162
162
  requirements:
163
163
  - - "~>"
164
164
  - !ruby/object:Gem::Version
165
- version: '0.1'
165
+ version: '4.0'
166
166
  - !ruby/object:Gem::Dependency
167
167
  name: hoe
168
168
  requirement: !ruby/object:Gem::Requirement
169
169
  requirements:
170
170
  - - "~>"
171
171
  - !ruby/object:Gem::Version
172
- version: '3.15'
172
+ version: '3.16'
173
173
  type: :development
174
174
  prerelease: false
175
175
  version_requirements: !ruby/object:Gem::Requirement
176
176
  requirements:
177
177
  - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: '3.15'
179
+ version: '3.16'
180
180
  description: |-
181
181
  This is a collection of webservice monitoring tools for the Arborist monitoring toolkit (http://arbori.st/).
182
182
 
@@ -226,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
226
226
  version: 1.3.1
227
227
  requirements: []
228
228
  rubyforge_project:
229
- rubygems_version: 2.5.1
229
+ rubygems_version: 2.7.6
230
230
  signing_key:
231
231
  specification_version: 4
232
232
  summary: This is a collection of webservice monitoring tools for the Arborist monitoring
checksums.yaml.gz.sig DELETED
Binary file
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
Binary file