arborist 0.0.1.pre20160106113421

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.
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: []