arborist 0.1.0 → 0.2.0.pre20170519125456

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.
@@ -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( :runner ) do
15
- obj = described_class.new
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
- interval_timer = instance_double( ZMQ::Timer )
45
- expect( ZMQ::Timer ).to receive( :new ) do |i_delay, i_repeat, &i_block|
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
- interval_timer = instance_double( ZMQ::Timer )
66
- expect( ZMQ::Timer ).to receive( :new ).with( mon2.interval, 0 ).
67
- and_return( interval_timer )
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 = handler.client.make_fetch_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 = tree_api_handler.successful_response( node_tree )
86
+ response = Arborist::TreeAPI.successful_response( node_tree )
127
87
 
128
- expect( handler.client.tree_api ).to receive( :send ).with( request )
129
- expect( handler.client.tree_api ).to receive( :recv ).and_return( response )
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
- expect {
132
- handler.on_writable
133
- }.to_not change { handler.registered? }
91
+ runner.reactor.poll_once
134
92
 
135
93
  # Update
136
- request = handler.client.make_update_request( ping_monitor_data )
137
- response = tree_api_handler.successful_response( nil )
138
- expect( handler.client.tree_api ).to receive( :send ).with( request )
139
- expect( handler.client.tree_api ).to receive( :recv ).and_return( response )
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( handler.pollitem )
100
+ expect( zmq_loop ).to receive( :remove ).with( runner.pollitem )
143
101
  expect {
144
- handler.on_writable
145
- }.to change { handler.registered? }.from( true ).to( false )
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( handler ).to receive( :fetch ).
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( handler ).to receive( :update ).
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
- handler.run_monitor( monitor )
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
- let( :zmq_loop ) { instance_double(ZMQ::Loop) }
12
- let( :req_socket ) { instance_double(ZMQ::Socket::Req) }
13
- let( :sub_socket ) { instance_double(ZMQ::Socket::Sub) }
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 ) { observer_class.new("testing observer1") }
25
- let( :observer2 ) { observer_class.new("testing observer2") }
26
- let( :observer3 ) { observer_class.new("testing observer3") }
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
- allow( zmq_loop ).to receive( :register ).with( an_instance_of(ZMQ::Pollitem) )
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
- expect( req_socket ).to receive( :subscribe ).with( )
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
- describe Arborist::ObserverRunner::Handler
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
+
@@ -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.1.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
- -----BEGIN CERTIFICATE-----
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.6'
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.6'
98
+ version: '1.0'
125
99
  - !ruby/object:Gem::Dependency
126
- name: rbczmq
100
+ name: cztop
127
101
  requirement: !ruby/object:Gem::Requirement
128
102
  requirements:
129
103
  - - "~>"
130
104
  - !ruby/object:Gem::Version
131
- version: '1.7'
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: '1.7'
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.8'
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.8'
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.15'
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.15'
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: '0'
415
+ version: 1.3.1
414
416
  requirements: []
415
417
  rubyforge_project:
416
- rubygems_version: 2.6.8
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