arborist 0.1.0 → 0.2.0.pre20170519125456
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/ChangeLog +46 -2
- data/Manifest.txt +4 -4
- data/Rakefile +6 -4
- data/TODO.md +16 -0
- data/lib/arborist.rb +12 -51
- data/lib/arborist/client.rb +23 -46
- data/lib/arborist/command/client.rb +1 -0
- data/lib/arborist/command/watch.rb +4 -5
- data/lib/arborist/event_api.rb +35 -0
- data/lib/arborist/exceptions.rb +2 -2
- data/lib/arborist/manager.rb +432 -212
- data/lib/arborist/mixins.rb +9 -9
- data/lib/arborist/monitor_runner.rb +174 -137
- data/lib/arborist/node.rb +11 -4
- data/lib/arborist/observer/summarize.rb +1 -1
- data/lib/arborist/observer_runner.rb +163 -126
- data/lib/arborist/tree_api.rb +113 -0
- data/spec/arborist/client_spec.rb +63 -64
- data/spec/arborist/event_api_spec.rb +23 -0
- data/spec/arborist/manager_spec.rb +842 -66
- data/spec/arborist/monitor_runner_spec.rb +45 -85
- data/spec/arborist/observer_runner_spec.rb +86 -23
- data/spec/arborist/tree_api_spec.rb +30 -0
- data/spec/arborist_spec.rb +0 -5
- data/spec/spec_helper.rb +0 -13
- metadata +47 -45
- checksums.yaml.gz.sig +0 -3
- data.tar.gz.sig +0 -0
- data/lib/arborist/manager/event_publisher.rb +0 -126
- data/lib/arborist/manager/tree_api.rb +0 -302
- data/spec/arborist/manager/event_publisher_spec.rb +0 -65
- data/spec/arborist/manager/tree_api_spec.rb +0 -791
- metadata.gz.sig +0 -0
@@ -7,15 +7,10 @@ require 'arborist/monitor_runner'
|
|
7
7
|
|
8
8
|
describe Arborist::MonitorRunner do
|
9
9
|
|
10
|
-
let( :zmq_loop ) { instance_double(ZMQ::Loop) }
|
11
10
|
let( :req_socket ) { instance_double(ZMQ::Socket::Req) }
|
12
|
-
let( :pollitem ) { instance_double(ZMQ::Pollitem) }
|
13
11
|
|
14
|
-
let( :
|
15
|
-
|
16
|
-
obj.reactor = zmq_loop
|
17
|
-
obj
|
18
|
-
end
|
12
|
+
let( :reactor ) { instance_double(CZTop::Reactor) }
|
13
|
+
let( :runner ) { described_class.new }
|
19
14
|
|
20
15
|
let( :monitor_class ) { Class.new(Arborist::Monitor) }
|
21
16
|
|
@@ -24,6 +19,26 @@ describe Arborist::MonitorRunner do
|
|
24
19
|
let( :mon3 ) { monitor_class.new("testing monitor3", :testing) }
|
25
20
|
let( :monitors ) {[ mon1, mon2, mon3 ]}
|
26
21
|
|
22
|
+
let( :node_tree ) {{
|
23
|
+
'router' => {
|
24
|
+
'addresses' => ['10.2.1.2', '1.2.3.4']
|
25
|
+
},
|
26
|
+
'server' => {
|
27
|
+
'addresses' => ['10.2.1.118']
|
28
|
+
}
|
29
|
+
}}
|
30
|
+
let( :ping_monitor_data ) {{
|
31
|
+
'router' => {'ping' => { 'rtt' => 22 }},
|
32
|
+
'server' => {'ping' => { 'rtt' => 8 }},
|
33
|
+
}}
|
34
|
+
|
35
|
+
|
36
|
+
before( :each ) do
|
37
|
+
allow( CZTop::Reactor ).to receive( :new ).and_return( reactor )
|
38
|
+
allow( reactor ).to receive( :register )
|
39
|
+
allow( reactor ).to receive( :unregister )
|
40
|
+
end
|
41
|
+
|
27
42
|
|
28
43
|
it "can load monitors from an enumerator that yields Arborist::Monitors" do
|
29
44
|
runner.load_monitors([ mon1, mon2, mon3 ])
|
@@ -33,27 +48,11 @@ describe Arborist::MonitorRunner do
|
|
33
48
|
|
34
49
|
describe "a runner with loaded monitors" do
|
35
50
|
|
36
|
-
before( :each ) do
|
37
|
-
allow( zmq_loop ).to receive( :register ).with( an_instance_of(ZMQ::Pollitem) )
|
38
|
-
end
|
39
|
-
|
40
|
-
|
41
51
|
it "registers its monitors to run on an interval and starts the ZMQ loop when run" do
|
42
52
|
runner.monitors.replace([ mon1 ])
|
43
53
|
|
44
|
-
|
45
|
-
expect(
|
46
|
-
expect( i_delay ).to eq( mon1.interval )
|
47
|
-
expect( i_repeat ).to eq( 0 )
|
48
|
-
|
49
|
-
expect( runner.handler ).to receive( :run_monitor ).with( mon1 )
|
50
|
-
|
51
|
-
i_block.call
|
52
|
-
interval_timer
|
53
|
-
end
|
54
|
-
|
55
|
-
expect( zmq_loop ).to receive( :register_timer ).with( interval_timer )
|
56
|
-
expect( zmq_loop ).to receive( :start )
|
54
|
+
expect( reactor ).to receive( :add_periodic_timer ).with( mon1.interval )
|
55
|
+
expect( reactor ).to receive( :start_polling )
|
57
56
|
|
58
57
|
runner.run
|
59
58
|
end
|
@@ -62,87 +61,46 @@ describe Arborist::MonitorRunner do
|
|
62
61
|
it "delays registration of its interval timer if a monitor has a splay" do
|
63
62
|
runner.monitors.replace([ mon2 ])
|
64
63
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
timer = instance_double( ZMQ::Timer )
|
70
|
-
expect( ZMQ::Timer ).to receive( :new ) do |delay, repeat, &block|
|
71
|
-
expect( delay ).to be >= 0
|
72
|
-
expect( delay ).to be <= mon2.splay
|
73
|
-
expect( repeat ).to eq( 1 )
|
74
|
-
|
75
|
-
block.call
|
76
|
-
timer
|
77
|
-
end
|
78
|
-
|
79
|
-
expect( zmq_loop ).to receive( :register_timer ).with( interval_timer )
|
80
|
-
expect( zmq_loop ).to receive( :register_timer ).with( timer )
|
81
|
-
expect( zmq_loop ).to receive( :start )
|
64
|
+
expect( reactor ).to receive( :add_oneshot_timer ).
|
65
|
+
with( a_value_between(0, mon2.splay) ).and_yield
|
66
|
+
expect( reactor ).to receive( :add_periodic_timer ).with( mon2.interval )
|
67
|
+
expect( reactor ).to receive( :start_polling )
|
82
68
|
|
83
69
|
runner.run
|
84
70
|
end
|
85
71
|
|
86
|
-
end
|
87
|
-
|
88
|
-
|
89
|
-
describe Arborist::MonitorRunner::Handler do
|
90
|
-
|
91
|
-
let( :tree_api_handler ) { Arborist::Manager::TreeAPI.new(:pollable, :manager) }
|
92
|
-
|
93
|
-
let( :handler ) { described_class.new( zmq_loop ) }
|
94
|
-
|
95
|
-
let( :node_tree ) {{
|
96
|
-
'router' => {
|
97
|
-
'addresses' => ['10.2.1.2', '1.2.3.4']
|
98
|
-
},
|
99
|
-
'server' => {
|
100
|
-
'addresses' => ['10.2.1.118']
|
101
|
-
}
|
102
|
-
}}
|
103
|
-
let( :ping_monitor_data ) {{
|
104
|
-
'router' => {'ping' => { 'rtt' => 22 }},
|
105
|
-
'server' => {'ping' => { 'rtt' => 8 }},
|
106
|
-
}}
|
107
|
-
|
108
72
|
|
109
73
|
it "can run a monitor using async ZMQ IO" do
|
110
|
-
expect( zmq_loop ).to receive( :register ).with( handler.pollitem )
|
111
74
|
|
112
75
|
# Queue up the monitor requests and register the socket as wanting to write
|
113
76
|
mon1.exec do |nodes|
|
114
77
|
ping_monitor_data
|
115
78
|
end
|
116
|
-
expect {
|
117
|
-
handler.run_monitor( mon1 )
|
118
|
-
}.to change { handler.registered? }.from( false ).to( true )
|
119
79
|
|
120
80
|
# Fetch
|
121
|
-
request =
|
81
|
+
request = runner.client.make_fetch_request(
|
122
82
|
mon1.positive_criteria,
|
123
83
|
include_down: false,
|
124
84
|
properties: mon1.node_properties
|
125
85
|
)
|
126
|
-
response =
|
86
|
+
response = Arborist::TreeAPI.successful_response( node_tree )
|
127
87
|
|
128
|
-
expect(
|
129
|
-
expect(
|
88
|
+
expect( runner.client.tree_api ).to receive( :send ).with( request )
|
89
|
+
expect( runner.client.tree_api ).to receive( :recv ).and_return( response )
|
130
90
|
|
131
|
-
|
132
|
-
handler.on_writable
|
133
|
-
}.to_not change { handler.registered? }
|
91
|
+
runner.reactor.poll_once
|
134
92
|
|
135
93
|
# Update
|
136
|
-
request =
|
137
|
-
response =
|
138
|
-
expect(
|
139
|
-
expect(
|
94
|
+
request = runner.client.make_update_request( ping_monitor_data )
|
95
|
+
response = Arborist::TreeAPI.successful_response( nil )
|
96
|
+
expect( runner.client.tree_api ).to receive( :send ).with( request )
|
97
|
+
expect( runner.client.tree_api ).to receive( :recv ).and_return( response )
|
140
98
|
|
141
99
|
# Unregister
|
142
|
-
expect( zmq_loop ).to receive( :remove ).with(
|
100
|
+
expect( zmq_loop ).to receive( :remove ).with( runner.pollitem )
|
143
101
|
expect {
|
144
|
-
|
145
|
-
}.to change {
|
102
|
+
runner.on_writable
|
103
|
+
}.to change { runner.registered? }.from( true ).to( false )
|
146
104
|
|
147
105
|
end
|
148
106
|
|
@@ -159,23 +117,25 @@ describe Arborist::MonitorRunner do
|
|
159
117
|
nodes = { 'test1' => {}, 'test2' => {} }
|
160
118
|
monitor_results = { 'test1' => {ping: {rtt: 1}}, 'test2' => {ping: {rtt: 8}} }
|
161
119
|
|
162
|
-
expect(
|
120
|
+
expect( runner ).to receive( :fetch ).
|
163
121
|
with( {type: 'host'}, false, [:addresses], {} ).
|
164
122
|
and_yield( nodes )
|
165
123
|
|
166
124
|
expect( monitor ).to receive( :run ).with( nodes ).
|
167
125
|
and_return( monitor_results )
|
168
126
|
|
169
|
-
expect(
|
127
|
+
expect( runner ).to receive( :update ).
|
170
128
|
with({
|
171
129
|
"test1"=>{:ping=>{:rtt=>1}, "_monitor_key"=>:test},
|
172
130
|
"test2"=>{:ping=>{:rtt=>8}, "_monitor_key"=>:test}
|
173
131
|
})
|
174
132
|
|
175
|
-
|
133
|
+
runner.run_monitor( monitor )
|
176
134
|
end
|
177
135
|
|
178
136
|
end
|
179
137
|
|
138
|
+
|
139
|
+
|
180
140
|
end
|
181
141
|
|
@@ -2,57 +2,120 @@
|
|
2
2
|
|
3
3
|
require_relative '../spec_helper'
|
4
4
|
|
5
|
+
require 'rspec/wait'
|
6
|
+
require 'cztop'
|
7
|
+
require 'cztop/reactor'
|
8
|
+
|
5
9
|
require 'arborist/observer_runner'
|
6
10
|
|
7
11
|
|
8
12
|
describe Arborist::ObserverRunner do
|
9
13
|
|
14
|
+
before( :each ) do
|
15
|
+
$emails = []
|
16
|
+
$texts = []
|
17
|
+
end
|
10
18
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
let( :pollitem ) { instance_double(ZMQ::Pollitem) }
|
15
|
-
|
16
|
-
let( :runner ) do
|
17
|
-
obj = described_class.new
|
18
|
-
obj.reactor = zmq_loop
|
19
|
-
obj
|
19
|
+
after( :each ) do
|
20
|
+
$emails.clear
|
21
|
+
$texts.clear
|
20
22
|
end
|
21
23
|
|
22
|
-
let( :observer_class ) { Class.new(Arborist::Observer) }
|
23
24
|
|
24
|
-
let( :observer1 )
|
25
|
-
|
26
|
-
|
25
|
+
let( :observer1 ) do
|
26
|
+
Arborist::Observer "Email on ack/disabled/enabled" do
|
27
|
+
subscribe to: 'node.acked'
|
28
|
+
subscribe to: 'node.disabled'
|
29
|
+
subscribe to: 'node.enabled'
|
30
|
+
|
31
|
+
action do |event|
|
32
|
+
$emails << event
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
let( :observer2 ) do
|
38
|
+
Arborist::Observer "SMS on nodes down" do
|
39
|
+
subscribe to: 'node.down'
|
40
|
+
action do |event|
|
41
|
+
$texts << event
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
let( :observer3 ) do
|
46
|
+
Arborist::Observer 'Email on disk full' do
|
47
|
+
subscribe to: 'node.down',
|
48
|
+
where: { type: 'resource', category: 'disk' }
|
49
|
+
action do |event|
|
50
|
+
$emails << event
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
27
55
|
let( :observers ) {[ observer1, observer2, observer3 ]}
|
28
56
|
|
29
57
|
|
30
58
|
it "can load observers from an enumerator that yields Arborist::Observers" do
|
59
|
+
runner = described_class.new
|
31
60
|
runner.load_observers([ observer1, observer2, observer3 ])
|
32
61
|
expect( runner.observers ).to include( observer1, observer2, observer3 )
|
33
62
|
end
|
34
63
|
|
35
64
|
|
36
|
-
describe "a runner with loaded observers" do
|
65
|
+
describe "a runner with loaded observers", :testing_manager do
|
37
66
|
|
38
67
|
before( :each ) do
|
39
|
-
|
68
|
+
@manager_thread = Thread.new do
|
69
|
+
@manager = make_testing_manager()
|
70
|
+
Thread.current.abort_on_exception = true
|
71
|
+
@manager.run
|
72
|
+
Loggability[ Arborist ].info "Stopped the test manager"
|
73
|
+
end
|
74
|
+
|
75
|
+
count = 0
|
76
|
+
until (@manager && @manager.running?) || count > 30
|
77
|
+
sleep 0.1
|
78
|
+
count += 1
|
79
|
+
end
|
80
|
+
raise "Manager didn't start up" unless @manager.running?
|
40
81
|
end
|
41
82
|
|
83
|
+
after( :each ) do
|
84
|
+
@manager.simulate_signal( :TERM )
|
85
|
+
@manager_thread.join
|
86
|
+
|
87
|
+
count = 0
|
88
|
+
while @manager.running? || count > 30
|
89
|
+
sleep 0.1
|
90
|
+
Loggability[ Arborist ].info "Manager still running"
|
91
|
+
count += 1
|
92
|
+
end
|
93
|
+
raise "Manager didn't stop" if @manager.running?
|
94
|
+
end
|
42
95
|
|
43
|
-
xit "subscribes to events for each of its observers and starts the ZMQ loop when run" do
|
44
|
-
expect( Arborist.zmq_context ).to receive( :socket ).
|
45
|
-
with( :REQ ).and_return( req_socket )
|
46
|
-
expect( Arborist.zmq_context ).to receive( :socket ).
|
47
|
-
with( :SUB ).and_return( sub_socket )
|
48
96
|
|
49
|
-
|
97
|
+
let( :runner ) do
|
98
|
+
runner = described_class.new
|
99
|
+
runner.load_observers( observers )
|
100
|
+
runner
|
50
101
|
end
|
51
102
|
|
52
|
-
end
|
53
103
|
|
104
|
+
it "subscribes for each of its observers and listens for events when run" do
|
105
|
+
thr = Thread.new { runner.run }
|
106
|
+
wait( 3 ).for { runner }.to be_running
|
107
|
+
|
108
|
+
expect( @manager.subscriptions.length ).to eq( runner.subscriptions.length )
|
54
109
|
|
55
|
-
|
110
|
+
runner.simulate_signal( :TERM )
|
111
|
+
thr.join( 2 )
|
112
|
+
thr.kill
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
it "runs the observers when subscribed events are sent"
|
117
|
+
|
118
|
+
end
|
56
119
|
|
57
120
|
end
|
58
121
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env rspec -cfd
|
2
|
+
|
3
|
+
require_relative '../spec_helper'
|
4
|
+
|
5
|
+
require 'arborist/tree_api'
|
6
|
+
|
7
|
+
describe Arborist::TreeAPI, :testing_manager do
|
8
|
+
|
9
|
+
it "can encode a valid Tree API header and body into a message"
|
10
|
+
it "raises an exception if the header to encode isn't a Hash"
|
11
|
+
|
12
|
+
it "can build a valid Tree API request message"
|
13
|
+
|
14
|
+
|
15
|
+
it "can build a valid success response message"
|
16
|
+
it "can build a valid error response message"
|
17
|
+
|
18
|
+
|
19
|
+
it "can decode a header and payload from a valid request message"
|
20
|
+
|
21
|
+
describe "raises an exception when decoding a request message" do
|
22
|
+
|
23
|
+
it "from a different protocol version"
|
24
|
+
it "that doesn't contain a valid MessagePack payload'"
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
end
|
30
|
+
|
data/spec/arborist_spec.rb
CHANGED
@@ -164,10 +164,5 @@ describe Arborist do
|
|
164
164
|
expect( described_class.observer_runner_for(loader) ).to be_a( Arborist::ObserverRunner )
|
165
165
|
end
|
166
166
|
|
167
|
-
|
168
|
-
it "has a ZMQ context" do
|
169
|
-
expect( described_class.zmq_context ).to be_a( ZMQ::Context )
|
170
|
-
end
|
171
|
-
|
172
167
|
end
|
173
168
|
|
data/spec/spec_helper.rb
CHANGED
@@ -73,19 +73,6 @@ module Arborist::TestHelpers
|
|
73
73
|
end
|
74
74
|
|
75
75
|
|
76
|
-
def pack_message( verb, *data )
|
77
|
-
body = data.pop
|
78
|
-
header = data.pop || {}
|
79
|
-
header.merge!( action: verb, version: 1 )
|
80
|
-
|
81
|
-
return MessagePack.pack([ header, body ])
|
82
|
-
end
|
83
|
-
|
84
|
-
|
85
|
-
def unpack_message( msg )
|
86
|
-
return MessagePack.unpack( msg )
|
87
|
-
end
|
88
|
-
|
89
76
|
|
90
77
|
#
|
91
78
|
# Fixture Functions
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arborist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0.pre20170519125456
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -9,34 +9,8 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain:
|
12
|
-
-
|
13
|
-
|
14
|
-
MIIEbDCCAtSgAwIBAgIBATANBgkqhkiG9w0BAQsFADA+MQwwCgYDVQQDDANnZWQx
|
15
|
-
GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
|
16
|
-
HhcNMTYwODIwMTgxNzQyWhcNMTcwODIwMTgxNzQyWjA+MQwwCgYDVQQDDANnZWQx
|
17
|
-
GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
|
18
|
-
ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC/JWGRHO+USzR97vXjkFgt
|
19
|
-
83qeNf2KHkcvrRTSnR64i6um/ziin0I0oX23H7VYrDJC9A/uoUa5nGRJS5Zw/+wW
|
20
|
-
ENcvWVZS4iUzi4dsYJGY6yEOsXh2CcF46+QevV8iE+UmbkU75V7Dy1JCaUOyizEt
|
21
|
-
TH5UHsOtUU7k9TYARt/TgYZKuaoAMZZd5qyVqhF1vV+7/Qzmp89NGflXf2xYP26a
|
22
|
-
4MAX2qqKX/FKXqmFO+AGsbwYTEds1mksBF3fGsFgsQWxftG8GfZQ9+Cyu2+l1eOw
|
23
|
-
cZ+lPcg834G9DrqW2zhqUoLr1MTly4pqxYGb7XoDhoR7dd1kFE2a067+DzWC/ADt
|
24
|
-
+QkcqWUm5oh1fN0eqr7NsZlVJDulFgdiiYPQiIN7UNsii4Wc9aZqBoGcYfBeQNPZ
|
25
|
-
soo/6za/bWajOKUmDhpqvaiRv9EDpVLzuj53uDoukMMwxCMfgb04+ckQ0t2G7wqc
|
26
|
-
/D+K9JW9DDs3Yjgv9k4h7YMhW5gftosd+NkNC/+Y2CkCAwEAAaN1MHMwCQYDVR0T
|
27
|
-
BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFHKN/nkRusdqCJEuq3lgB3fJvyTg
|
28
|
-
MBwGA1UdEQQVMBOBEWdlZEBGYWVyaWVNVUQub3JnMBwGA1UdEgQVMBOBEWdlZEBG
|
29
|
-
YWVyaWVNVUQub3JnMA0GCSqGSIb3DQEBCwUAA4IBgQAPJzKiT0zBU7kpqe0aS2qb
|
30
|
-
FI0PJ4y5I8buU4IZGUD5NEt/N7pZNfOyBxkrZkXhS44Fp+xwBH5ebLbq/WY78Bqd
|
31
|
-
db0z6ZgW4LMYMpWFfbXsRbd9TU2f52L8oMAhxOvF7Of5qJMVWuFQ8FPagk2iHrdH
|
32
|
-
inYLQagqAF6goWTXgAJCdPd6SNeeSNqA6vlY7CV1Jh5kfNJJ6xu/CVij1GzCLu/5
|
33
|
-
DMOr26DBv+qLJRRC/2h34uX71q5QgeOyxvMg+7V3u/Q06DXyQ2VgeeqiwDFFpEH0
|
34
|
-
PFkdPO6ZqbTRcLfNH7mFgCBJjsfSjJrn0sPBlYyOXgCoByfZnZyrIMH/UY+lgQqS
|
35
|
-
6Von1VDsfQm0eJh5zYZD64ZF86phSR7mUX3mXItwH04HrZwkWpvgd871DZVR3i1n
|
36
|
-
w8aNA5re5+Rt/Vvjxj5AcEnZnZiz5x959NaddQocX32Z1unHw44pzRNUur1GInfW
|
37
|
-
p4vpx2kUSFSAGjtCbDGTNV2AH8w9OU4xEmNz8c5lyoA=
|
38
|
-
-----END CERTIFICATE-----
|
39
|
-
date: 2017-01-02 00:00:00.000000000 Z
|
12
|
+
- certs/ged.pem
|
13
|
+
date: 2017-05-19 00:00:00.000000000 Z
|
40
14
|
dependencies:
|
41
15
|
- !ruby/object:Gem::Dependency
|
42
16
|
name: schedulability
|
@@ -114,28 +88,42 @@ dependencies:
|
|
114
88
|
requirements:
|
115
89
|
- - "~>"
|
116
90
|
- !ruby/object:Gem::Version
|
117
|
-
version: '0
|
91
|
+
version: '1.0'
|
118
92
|
type: :runtime
|
119
93
|
prerelease: false
|
120
94
|
version_requirements: !ruby/object:Gem::Requirement
|
121
95
|
requirements:
|
122
96
|
- - "~>"
|
123
97
|
- !ruby/object:Gem::Version
|
124
|
-
version: '0
|
98
|
+
version: '1.0'
|
125
99
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
100
|
+
name: cztop
|
127
101
|
requirement: !ruby/object:Gem::Requirement
|
128
102
|
requirements:
|
129
103
|
- - "~>"
|
130
104
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
105
|
+
version: '0.11'
|
132
106
|
type: :runtime
|
133
107
|
prerelease: false
|
134
108
|
version_requirements: !ruby/object:Gem::Requirement
|
135
109
|
requirements:
|
136
110
|
- - "~>"
|
137
111
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
112
|
+
version: '0.11'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: cztop-reactor
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0.3'
|
120
|
+
type: :runtime
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - "~>"
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0.3'
|
139
127
|
- !ruby/object:Gem::Dependency
|
140
128
|
name: gli
|
141
129
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,14 +172,14 @@ dependencies:
|
|
184
172
|
requirements:
|
185
173
|
- - "~>"
|
186
174
|
- !ruby/object:Gem::Version
|
187
|
-
version: '0.
|
175
|
+
version: '0.9'
|
188
176
|
type: :development
|
189
177
|
prerelease: false
|
190
178
|
version_requirements: !ruby/object:Gem::Requirement
|
191
179
|
requirements:
|
192
180
|
- - "~>"
|
193
181
|
- !ruby/object:Gem::Version
|
194
|
-
version: '0.
|
182
|
+
version: '0.9'
|
195
183
|
- !ruby/object:Gem::Dependency
|
196
184
|
name: hoe-highline
|
197
185
|
requirement: !ruby/object:Gem::Requirement
|
@@ -220,6 +208,20 @@ dependencies:
|
|
220
208
|
- - "~>"
|
221
209
|
- !ruby/object:Gem::Version
|
222
210
|
version: '3.2'
|
211
|
+
- !ruby/object:Gem::Dependency
|
212
|
+
name: rspec-wait
|
213
|
+
requirement: !ruby/object:Gem::Requirement
|
214
|
+
requirements:
|
215
|
+
- - "~>"
|
216
|
+
- !ruby/object:Gem::Version
|
217
|
+
version: '0.0'
|
218
|
+
type: :development
|
219
|
+
prerelease: false
|
220
|
+
version_requirements: !ruby/object:Gem::Requirement
|
221
|
+
requirements:
|
222
|
+
- - "~>"
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
version: '0.0'
|
223
225
|
- !ruby/object:Gem::Dependency
|
224
226
|
name: simplecov
|
225
227
|
requirement: !ruby/object:Gem::Requirement
|
@@ -268,14 +270,14 @@ dependencies:
|
|
268
270
|
requirements:
|
269
271
|
- - "~>"
|
270
272
|
- !ruby/object:Gem::Version
|
271
|
-
version: '3.
|
273
|
+
version: '3.16'
|
272
274
|
type: :development
|
273
275
|
prerelease: false
|
274
276
|
version_requirements: !ruby/object:Gem::Requirement
|
275
277
|
requirements:
|
276
278
|
- - "~>"
|
277
279
|
- !ruby/object:Gem::Version
|
278
|
-
version: '3.
|
280
|
+
version: '3.16'
|
279
281
|
description: |-
|
280
282
|
Arborist is a monitoring toolkit that follows the UNIX philosophy
|
281
283
|
of small parts and loose coupling for stability, reliability, and
|
@@ -333,12 +335,11 @@ files:
|
|
333
335
|
- lib/arborist/event/node_unknown.rb
|
334
336
|
- lib/arborist/event/node_up.rb
|
335
337
|
- lib/arborist/event/node_update.rb
|
338
|
+
- lib/arborist/event_api.rb
|
336
339
|
- lib/arborist/exceptions.rb
|
337
340
|
- lib/arborist/loader.rb
|
338
341
|
- lib/arborist/loader/file.rb
|
339
342
|
- lib/arborist/manager.rb
|
340
|
-
- lib/arborist/manager/event_publisher.rb
|
341
|
-
- lib/arborist/manager/tree_api.rb
|
342
343
|
- lib/arborist/mixins.rb
|
343
344
|
- lib/arborist/monitor.rb
|
344
345
|
- lib/arborist/monitor/socket.rb
|
@@ -354,15 +355,15 @@ files:
|
|
354
355
|
- lib/arborist/observer/summarize.rb
|
355
356
|
- lib/arborist/observer_runner.rb
|
356
357
|
- lib/arborist/subscription.rb
|
358
|
+
- lib/arborist/tree_api.rb
|
357
359
|
- spec/arborist/client_spec.rb
|
358
360
|
- spec/arborist/dependency_spec.rb
|
359
361
|
- spec/arborist/event/node_delta_spec.rb
|
360
362
|
- spec/arborist/event/node_down_spec.rb
|
361
363
|
- spec/arborist/event/node_spec.rb
|
362
364
|
- spec/arborist/event/node_update_spec.rb
|
365
|
+
- spec/arborist/event_api_spec.rb
|
363
366
|
- spec/arborist/event_spec.rb
|
364
|
-
- spec/arborist/manager/event_publisher_spec.rb
|
365
|
-
- spec/arborist/manager/tree_api_spec.rb
|
366
367
|
- spec/arborist/manager_spec.rb
|
367
368
|
- spec/arborist/mixins_spec.rb
|
368
369
|
- spec/arborist/monitor/socket_spec.rb
|
@@ -379,6 +380,7 @@ files:
|
|
379
380
|
- spec/arborist/observer_runner_spec.rb
|
380
381
|
- spec/arborist/observer_spec.rb
|
381
382
|
- spec/arborist/subscription_spec.rb
|
383
|
+
- spec/arborist/tree_api_spec.rb
|
382
384
|
- spec/arborist_spec.rb
|
383
385
|
- spec/data/monitors/pings.rb
|
384
386
|
- spec/data/monitors/port_checks.rb
|
@@ -408,12 +410,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
408
410
|
version: 2.3.1
|
409
411
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
410
412
|
requirements:
|
411
|
-
- - "
|
413
|
+
- - ">"
|
412
414
|
- !ruby/object:Gem::Version
|
413
|
-
version:
|
415
|
+
version: 1.3.1
|
414
416
|
requirements: []
|
415
417
|
rubyforge_project:
|
416
|
-
rubygems_version: 2.6.
|
418
|
+
rubygems_version: 2.6.12
|
417
419
|
signing_key:
|
418
420
|
specification_version: 4
|
419
421
|
summary: Arborist is a monitoring toolkit that follows the UNIX philosophy of small
|