arborist 0.0.1.pre20160106113421

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.document +4 -0
  3. data/.simplecov +9 -0
  4. data/ChangeLog +417 -0
  5. data/Events.md +20 -0
  6. data/History.md +4 -0
  7. data/LICENSE +29 -0
  8. data/Manifest.txt +72 -0
  9. data/Monitors.md +141 -0
  10. data/Nodes.md +0 -0
  11. data/Observers.md +72 -0
  12. data/Protocol.md +214 -0
  13. data/README.md +75 -0
  14. data/Rakefile +81 -0
  15. data/TODO.md +24 -0
  16. data/bin/amanagerd +10 -0
  17. data/bin/amonitord +12 -0
  18. data/bin/aobserverd +12 -0
  19. data/lib/arborist.rb +182 -0
  20. data/lib/arborist/client.rb +191 -0
  21. data/lib/arborist/event.rb +61 -0
  22. data/lib/arborist/event/node_acked.rb +18 -0
  23. data/lib/arborist/event/node_delta.rb +20 -0
  24. data/lib/arborist/event/node_matching.rb +34 -0
  25. data/lib/arborist/event/node_update.rb +19 -0
  26. data/lib/arborist/event/sys_reloaded.rb +15 -0
  27. data/lib/arborist/exceptions.rb +21 -0
  28. data/lib/arborist/manager.rb +508 -0
  29. data/lib/arborist/manager/event_publisher.rb +97 -0
  30. data/lib/arborist/manager/tree_api.rb +207 -0
  31. data/lib/arborist/mixins.rb +363 -0
  32. data/lib/arborist/monitor.rb +377 -0
  33. data/lib/arborist/monitor/socket.rb +163 -0
  34. data/lib/arborist/monitor_runner.rb +217 -0
  35. data/lib/arborist/node.rb +700 -0
  36. data/lib/arborist/node/host.rb +87 -0
  37. data/lib/arborist/node/root.rb +60 -0
  38. data/lib/arborist/node/service.rb +112 -0
  39. data/lib/arborist/observer.rb +176 -0
  40. data/lib/arborist/observer/action.rb +125 -0
  41. data/lib/arborist/observer/summarize.rb +105 -0
  42. data/lib/arborist/observer_runner.rb +181 -0
  43. data/lib/arborist/subscription.rb +82 -0
  44. data/spec/arborist/client_spec.rb +282 -0
  45. data/spec/arborist/event/node_update_spec.rb +71 -0
  46. data/spec/arborist/event_spec.rb +64 -0
  47. data/spec/arborist/manager/event_publisher_spec.rb +66 -0
  48. data/spec/arborist/manager/tree_api_spec.rb +458 -0
  49. data/spec/arborist/manager_spec.rb +442 -0
  50. data/spec/arborist/mixins_spec.rb +195 -0
  51. data/spec/arborist/monitor/socket_spec.rb +195 -0
  52. data/spec/arborist/monitor_runner_spec.rb +152 -0
  53. data/spec/arborist/monitor_spec.rb +251 -0
  54. data/spec/arborist/node/host_spec.rb +104 -0
  55. data/spec/arborist/node/root_spec.rb +29 -0
  56. data/spec/arborist/node/service_spec.rb +98 -0
  57. data/spec/arborist/node_spec.rb +552 -0
  58. data/spec/arborist/observer/action_spec.rb +205 -0
  59. data/spec/arborist/observer/summarize_spec.rb +294 -0
  60. data/spec/arborist/observer_spec.rb +146 -0
  61. data/spec/arborist/subscription_spec.rb +71 -0
  62. data/spec/arborist_spec.rb +146 -0
  63. data/spec/data/monitors/pings.rb +80 -0
  64. data/spec/data/monitors/port_checks.rb +27 -0
  65. data/spec/data/monitors/system_resources.rb +30 -0
  66. data/spec/data/monitors/web_services.rb +17 -0
  67. data/spec/data/nodes/duir.rb +20 -0
  68. data/spec/data/nodes/localhost.rb +15 -0
  69. data/spec/data/nodes/sidonie.rb +29 -0
  70. data/spec/data/nodes/yevaud.rb +26 -0
  71. data/spec/data/observers/auditor.rb +23 -0
  72. data/spec/data/observers/webservices.rb +18 -0
  73. data/spec/spec_helper.rb +117 -0
  74. metadata +368 -0
@@ -0,0 +1,30 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'arborist/monitor'
5
+ require 'arborist/mixins'
6
+
7
+ using Arborist::TimeRefinements
8
+
9
+ Arborist::Monitor 'disk space' do
10
+ match type: 'host'
11
+ every 5.minutes
12
+ exec ''
13
+ end
14
+
15
+ Arborist::Monitor 'media server disk space' do
16
+ # hostgroup :bennett
17
+ match type: 'host', tag: 'ldap'
18
+ exclude tag: 'infrastructure'
19
+ exclude type: 'host', name: ['havnor', 'torheven']
20
+ exec 'fping'
21
+ end
22
+
23
+ Arborist::Monitor "down check" do
24
+ match down: true
25
+ exec do |nodes|
26
+ nodes.map {|n| event :down_still, n.identifier }
27
+ end
28
+ end
29
+
30
+
@@ -0,0 +1,17 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'net/http'
5
+ require 'arborist/monitor'
6
+ require 'arborist/mixins'
7
+
8
+ using Arborist::TimeRefinements
9
+
10
+ Arborist::Monitor 'web service check' do
11
+ match type: 'webservice'
12
+ exec do |nodes|
13
+ Net::HTTP
14
+ end
15
+ end
16
+
17
+
@@ -0,0 +1,20 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'arborist'
5
+
6
+ Arborist::Host 'duir' do
7
+ description "Router box"
8
+ address '192.168.16.1'
9
+
10
+ tags :infrastructure
11
+
12
+ # gateway_to 'Internet', interface: 'em0'
13
+ # gateway_to 'Internet', interface: 'em2'
14
+
15
+ service 'ssh'
16
+
17
+ service 'nat-pmp', port: 5351
18
+
19
+ end
20
+
@@ -0,0 +1,15 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'arborist'
5
+
6
+ Arborist::Host 'localhost' do
7
+ description "The local machine"
8
+ address '127.0.0.1'
9
+
10
+ tags :testing
11
+
12
+ service 'testing', port: 10000
13
+
14
+ end
15
+
@@ -0,0 +1,29 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'arborist'
5
+
6
+
7
+ Arborist::Host 'sidonie' do
8
+ parent 'duir'
9
+ description "NAS and media server"
10
+ address '192.168.16.3'
11
+
12
+ tags :infrastructure,
13
+ :storage,
14
+ :media,
15
+ :rip_status_check
16
+
17
+ service 'ssh'
18
+ service 'demon-http', port: 6666, protocol: 'http'
19
+ service 'postgresql'
20
+
21
+ service 'smtp'
22
+
23
+ service 'http'
24
+ service 'sabnzbd', port: 8080, type: 'http'
25
+ service 'sickbeard', port: 8081, type: 'http'
26
+ service 'pms', port: 32400, type: 'http'
27
+ service 'couchpotato', port: 5050, type: 'http'
28
+
29
+ end
@@ -0,0 +1,26 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'arborist'
5
+
6
+
7
+ Arborist::Host 'yevaud' do
8
+ parent 'duir'
9
+ address '192.168.16.10'
10
+
11
+ description "Laptop, running services for development."
12
+
13
+ tags :laptop,
14
+ :developer
15
+
16
+ service 'ssh'
17
+ service 'rabbitmq', app_protocol: 'amqp'
18
+ service 'postgresql'
19
+
20
+ service 'cozy_frontend', port: 3000, app_protocol: 'http'
21
+ service 'cozy_admin_frontend', port: 4331, app_protocol: 'http'
22
+ service 'cozy_services', port: 8888, app_protocol: 'http'
23
+ service 'cozy_admin_services', port: 8889, app_protocol: 'http'
24
+
25
+ end
26
+
@@ -0,0 +1,23 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'arborist'
5
+
6
+
7
+ Arborist::Observer "Audit Logger" do
8
+ subscribe to: 'node.update', on: 'localhost'
9
+ action do |uuid, event|
10
+ $stderr.puts "%s: %p" % [ uuid, event ]
11
+ end
12
+ summarize( every: 8 ) do |events|
13
+ $stderr.puts "Audit summary:"
14
+ events.each do |time, ev|
15
+ $stderr.puts " [%s] %s: %p" % [
16
+ time.strftime('%Y-%m-%d %H:%M:%S %z'),
17
+ ev['type'],
18
+ ev['data']
19
+ ]
20
+ end
21
+ end
22
+ end
23
+
@@ -0,0 +1,18 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'arborist'
5
+
6
+
7
+ Arborist::Observer "Webservers" do
8
+ subscribe to: 'node.delta',
9
+ where: { type: 'service', port: 80, status: ['up', 'down'] }
10
+ subscribe to: 'node.delta',
11
+ where: { type: 'service', port: 443, status: ['up', 'down'] }
12
+
13
+ action do |uuid, event|
14
+ $stderr.puts "Webserver %s is DOWN (%p)" % [ event['data']['identifier'], event['data'] ]
15
+ end
16
+
17
+ end
18
+
@@ -0,0 +1,117 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'pathname'
5
+ require 'simplecov' if ENV['COVERAGE']
6
+ require 'rspec'
7
+ require 'loggability/spechelpers'
8
+ require 'msgpack'
9
+
10
+ require 'arborist'
11
+ require 'arborist/manager'
12
+ require 'arborist/node'
13
+ require 'arborist/mixins'
14
+
15
+
16
+ class TestNode < Arborist::Node; end
17
+
18
+ class TestEvent < Arborist::Event; end
19
+
20
+
21
+ RSpec::Matchers.define( :match_criteria ) do |criteria|
22
+ match do |node|
23
+ criteria = Arborist::HashUtilities.stringify_keys( criteria )
24
+ node.matches?( criteria )
25
+ end
26
+ end
27
+
28
+
29
+ module Arborist::TestConstants
30
+ SPEC_DIR = Pathname( __FILE__ ).dirname
31
+ SPEC_DATA_DIR = SPEC_DIR + 'data'
32
+
33
+ TESTING_API_SOCK = "inproc://arborist-api"
34
+ TESTING_EVENT_SOCK = "inproc://arborist-events"
35
+ end
36
+
37
+ module Arborist::TestHelpers
38
+
39
+ include Arborist::TestConstants
40
+
41
+ def self::included( mod )
42
+ super
43
+
44
+ mod.around( :each ) do |example|
45
+ if example.metadata[:testing_manager]
46
+ Loggability[ Arborist ].info "Configuring the manager to use testing ports."
47
+ Arborist.configure({
48
+ tree_api_url: TESTING_API_SOCK,
49
+ event_api_url: TESTING_EVENT_SOCK,
50
+ })
51
+
52
+ example.run
53
+
54
+ Arborist.configure
55
+
56
+ File.unlink( TESTING_EVENT_SOCK ) if File.exist?( TESTING_EVENT_SOCK )
57
+ File.unlink( TESTING_API_SOCK ) if File.exist?( TESTING_API_SOCK )
58
+ else
59
+ example.run
60
+ end
61
+ end
62
+ end
63
+
64
+
65
+ def make_testing_manager
66
+ return Arborist.manager_for( SPEC_DATA_DIR + 'nodes' )
67
+ end
68
+
69
+
70
+ def pack_message( verb, *data )
71
+ body = data.pop
72
+ header = data.pop || {}
73
+ header.merge!( action: verb, version: 1 )
74
+
75
+ return MessagePack.pack([ header, body ])
76
+ end
77
+
78
+
79
+ def unpack_message( msg )
80
+ return MessagePack.unpack( msg )
81
+ end
82
+
83
+
84
+ #
85
+ # Fixture Functions
86
+ #
87
+
88
+ def node_subclass
89
+ @node_subclass ||= Class.new( Arborist::Node )
90
+ end
91
+
92
+
93
+ def testing_node( identifier, parent=nil, &block )
94
+ node = node_subclass.new( identifier, &block )
95
+ node.parent( parent ) if parent
96
+ return node
97
+ end
98
+
99
+ end
100
+
101
+
102
+
103
+ RSpec.configure do |config|
104
+ include Arborist::TestConstants
105
+
106
+ config.run_all_when_everything_filtered = true
107
+ config.filter_run :focus
108
+ config.order = 'random'
109
+ config.mock_with( :rspec ) do |mock|
110
+ mock.syntax = :expect
111
+ end
112
+
113
+ config.include( Loggability::SpecHelpers )
114
+ config.include( Arborist::TestHelpers )
115
+ end
116
+
117
+
metadata ADDED
@@ -0,0 +1,368 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: arborist
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.pre20160106113421
5
+ platform: ruby
6
+ authors:
7
+ - Michael Granger
8
+ - Mahlon E. Smith
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain:
12
+ - |
13
+ -----BEGIN CERTIFICATE-----
14
+ MIIDbDCCAlSgAwIBAgIBATANBgkqhkiG9w0BAQUFADA+MQwwCgYDVQQDDANnZWQx
15
+ GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
16
+ HhcNMTUwNDAxMjEyNDEzWhcNMTYwMzMxMjEyNDEzWjA+MQwwCgYDVQQDDANnZWQx
17
+ GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
18
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDb92mkyYwuGBg1oRxt2tkH
19
+ +Uo3LAsaL/APBfSLzy8o3+B3AUHKCjMUaVeBoZdWtMHB75X3VQlvXfZMyBxj59Vo
20
+ cDthr3zdao4HnyrzAIQf7BO5Y8KBwVD+yyXCD/N65TTwqsQnO3ie7U5/9ut1rnNr
21
+ OkOzAscMwkfQxBkXDzjvAWa6UF4c5c9kR/T79iA21kDx9+bUMentU59aCJtUcbxa
22
+ 7kcKJhPEYsk4OdxR9q2dphNMFDQsIdRO8rywX5FRHvcb+qnXC17RvxLHtOjysPtp
23
+ EWsYoZMxyCDJpUqbwoeiM+tAHoz2ABMv3Ahie3Qeb6+MZNAtMmaWfBx3dg2u+/WN
24
+ AgMBAAGjdTBzMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBSZ0hCV
25
+ qoHr122fGKelqffzEQBhszAcBgNVHREEFTATgRFnZWRARmFlcmllTVVELm9yZzAc
26
+ BgNVHRIEFTATgRFnZWRARmFlcmllTVVELm9yZzANBgkqhkiG9w0BAQUFAAOCAQEA
27
+ lUKo3NXePpuvN3QGsOLJ6QhNd4+Q9Rz75GipuMrCl296V8QFkd2gg9EG44Pqtk+9
28
+ Zac8TkKc9bCSR0snakp+cCPplVvZF0/gMzkSTUJkDBHlNV16z73CyWpbQQa+iLJ4
29
+ uisI6gF2ZXK919MYLn2bFJfb7OsCvVfyTPqq8afPY+rq9vlf9ZPwU49AlD8bPRic
30
+ 0LX0gO5ykvETIOv+WgGcqp96ceNi9XVuJMh20uWuw6pmv/Ub2RqAf82jQSbpz09G
31
+ G8LHR7EjtPPmqCCunfyecJ6MmCNaiJCBxq2NYzyNmluPyHT8+0fuB5kccUVZm6CD
32
+ xn3DzOkDE6NYbk8gC9rTsA==
33
+ -----END CERTIFICATE-----
34
+ date: 2016-01-06 00:00:00.000000000 Z
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: schedulability
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '0.1'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.1'
50
+ - !ruby/object:Gem::Dependency
51
+ name: loggability
52
+ requirement: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '0.11'
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '0.11'
64
+ - !ruby/object:Gem::Dependency
65
+ name: configurability
66
+ requirement: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '2.2'
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '2.2'
78
+ - !ruby/object:Gem::Dependency
79
+ name: pluggability
80
+ requirement: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '0.4'
85
+ type: :runtime
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '0.4'
92
+ - !ruby/object:Gem::Dependency
93
+ name: state_machines
94
+ requirement: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - "~>"
97
+ - !ruby/object:Gem::Version
98
+ version: '0.2'
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - "~>"
104
+ - !ruby/object:Gem::Version
105
+ version: '0.2'
106
+ - !ruby/object:Gem::Dependency
107
+ name: msgpack
108
+ requirement: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: '0.6'
113
+ type: :runtime
114
+ prerelease: false
115
+ version_requirements: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '0.6'
120
+ - !ruby/object:Gem::Dependency
121
+ name: rbczmq
122
+ requirement: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - "~>"
125
+ - !ruby/object:Gem::Version
126
+ version: '1.7'
127
+ type: :runtime
128
+ prerelease: false
129
+ version_requirements: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '1.7'
134
+ - !ruby/object:Gem::Dependency
135
+ name: hoe-mercurial
136
+ requirement: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: '1.4'
141
+ type: :development
142
+ prerelease: false
143
+ version_requirements: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '1.4'
148
+ - !ruby/object:Gem::Dependency
149
+ name: hoe-deveiate
150
+ requirement: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: '0.7'
155
+ type: :development
156
+ prerelease: false
157
+ version_requirements: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: '0.7'
162
+ - !ruby/object:Gem::Dependency
163
+ name: hoe-highline
164
+ requirement: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - "~>"
167
+ - !ruby/object:Gem::Version
168
+ version: '0.2'
169
+ type: :development
170
+ prerelease: false
171
+ version_requirements: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - "~>"
174
+ - !ruby/object:Gem::Version
175
+ version: '0.2'
176
+ - !ruby/object:Gem::Dependency
177
+ name: rdoc
178
+ requirement: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - "~>"
181
+ - !ruby/object:Gem::Version
182
+ version: '4.0'
183
+ type: :development
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - "~>"
188
+ - !ruby/object:Gem::Version
189
+ version: '4.0'
190
+ - !ruby/object:Gem::Dependency
191
+ name: rspec
192
+ requirement: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - "~>"
195
+ - !ruby/object:Gem::Version
196
+ version: '3.2'
197
+ type: :development
198
+ prerelease: false
199
+ version_requirements: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - "~>"
202
+ - !ruby/object:Gem::Version
203
+ version: '3.2'
204
+ - !ruby/object:Gem::Dependency
205
+ name: simplecov
206
+ requirement: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - "~>"
209
+ - !ruby/object:Gem::Version
210
+ version: '0.9'
211
+ type: :development
212
+ prerelease: false
213
+ version_requirements: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - "~>"
216
+ - !ruby/object:Gem::Version
217
+ version: '0.9'
218
+ - !ruby/object:Gem::Dependency
219
+ name: timecop
220
+ requirement: !ruby/object:Gem::Requirement
221
+ requirements:
222
+ - - "~>"
223
+ - !ruby/object:Gem::Version
224
+ version: '0.7'
225
+ type: :development
226
+ prerelease: false
227
+ version_requirements: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - "~>"
230
+ - !ruby/object:Gem::Version
231
+ version: '0.7'
232
+ - !ruby/object:Gem::Dependency
233
+ name: hoe
234
+ requirement: !ruby/object:Gem::Requirement
235
+ requirements:
236
+ - - "~>"
237
+ - !ruby/object:Gem::Version
238
+ version: '3.14'
239
+ type: :development
240
+ prerelease: false
241
+ version_requirements: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - "~>"
244
+ - !ruby/object:Gem::Version
245
+ version: '3.14'
246
+ description: |-
247
+ Arborist is a monitoring framework that follows the UNIX philosophy
248
+ of small parts and loose coupling for stability, reliability, and
249
+ customizability.
250
+ email:
251
+ - ged@FaerieMUD.org
252
+ - mahlon@martini.nu
253
+ executables:
254
+ - amanagerd
255
+ - amonitord
256
+ - aobserverd
257
+ extensions: []
258
+ extra_rdoc_files:
259
+ - Events.md
260
+ - History.md
261
+ - Manifest.txt
262
+ - Monitors.md
263
+ - Nodes.md
264
+ - Observers.md
265
+ - Protocol.md
266
+ - README.md
267
+ - TODO.md
268
+ files:
269
+ - ".document"
270
+ - ".simplecov"
271
+ - ChangeLog
272
+ - Events.md
273
+ - History.md
274
+ - LICENSE
275
+ - Manifest.txt
276
+ - Monitors.md
277
+ - Nodes.md
278
+ - Observers.md
279
+ - Protocol.md
280
+ - README.md
281
+ - Rakefile
282
+ - TODO.md
283
+ - bin/amanagerd
284
+ - bin/amonitord
285
+ - bin/aobserverd
286
+ - lib/arborist.rb
287
+ - lib/arborist/client.rb
288
+ - lib/arborist/event.rb
289
+ - lib/arborist/event/node_acked.rb
290
+ - lib/arborist/event/node_delta.rb
291
+ - lib/arborist/event/node_matching.rb
292
+ - lib/arborist/event/node_update.rb
293
+ - lib/arborist/event/sys_reloaded.rb
294
+ - lib/arborist/exceptions.rb
295
+ - lib/arborist/manager.rb
296
+ - lib/arborist/manager/event_publisher.rb
297
+ - lib/arborist/manager/tree_api.rb
298
+ - lib/arborist/mixins.rb
299
+ - lib/arborist/monitor.rb
300
+ - lib/arborist/monitor/socket.rb
301
+ - lib/arborist/monitor_runner.rb
302
+ - lib/arborist/node.rb
303
+ - lib/arborist/node/host.rb
304
+ - lib/arborist/node/root.rb
305
+ - lib/arborist/node/service.rb
306
+ - lib/arborist/observer.rb
307
+ - lib/arborist/observer/action.rb
308
+ - lib/arborist/observer/summarize.rb
309
+ - lib/arborist/observer_runner.rb
310
+ - lib/arborist/subscription.rb
311
+ - spec/arborist/client_spec.rb
312
+ - spec/arborist/event/node_update_spec.rb
313
+ - spec/arborist/event_spec.rb
314
+ - spec/arborist/manager/event_publisher_spec.rb
315
+ - spec/arborist/manager/tree_api_spec.rb
316
+ - spec/arborist/manager_spec.rb
317
+ - spec/arborist/mixins_spec.rb
318
+ - spec/arborist/monitor/socket_spec.rb
319
+ - spec/arborist/monitor_runner_spec.rb
320
+ - spec/arborist/monitor_spec.rb
321
+ - spec/arborist/node/host_spec.rb
322
+ - spec/arborist/node/root_spec.rb
323
+ - spec/arborist/node/service_spec.rb
324
+ - spec/arborist/node_spec.rb
325
+ - spec/arborist/observer/action_spec.rb
326
+ - spec/arborist/observer/summarize_spec.rb
327
+ - spec/arborist/observer_spec.rb
328
+ - spec/arborist/subscription_spec.rb
329
+ - spec/arborist_spec.rb
330
+ - spec/data/monitors/pings.rb
331
+ - spec/data/monitors/port_checks.rb
332
+ - spec/data/monitors/system_resources.rb
333
+ - spec/data/monitors/web_services.rb
334
+ - spec/data/nodes/duir.rb
335
+ - spec/data/nodes/localhost.rb
336
+ - spec/data/nodes/sidonie.rb
337
+ - spec/data/nodes/yevaud.rb
338
+ - spec/data/observers/auditor.rb
339
+ - spec/data/observers/webservices.rb
340
+ - spec/spec_helper.rb
341
+ homepage: http://deveiate.org/projects/arborist
342
+ licenses:
343
+ - BSD-3-Clause
344
+ metadata: {}
345
+ post_install_message:
346
+ rdoc_options:
347
+ - "--main"
348
+ - README.md
349
+ require_paths:
350
+ - lib
351
+ required_ruby_version: !ruby/object:Gem::Requirement
352
+ requirements:
353
+ - - ">="
354
+ - !ruby/object:Gem::Version
355
+ version: 2.2.0
356
+ required_rubygems_version: !ruby/object:Gem::Requirement
357
+ requirements:
358
+ - - ">"
359
+ - !ruby/object:Gem::Version
360
+ version: 1.3.1
361
+ requirements: []
362
+ rubyforge_project:
363
+ rubygems_version: 2.4.8
364
+ signing_key:
365
+ specification_version: 4
366
+ summary: Arborist is a monitoring framework that follows the UNIX philosophy of small
367
+ parts and loose coupling for stability, reliability, and customizability.
368
+ test_files: []