langrove 0.0.4.5 → 0.0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +29 -38
- data/Gemfile +13 -7
- data/Gemfile.lock +35 -32
- data/Guardfile +11 -0
- data/README.md +34 -0
- data/Rakefile +8 -6
- data/bin/README.md +3 -0
- data/bin/langrove +1 -2
- data/langrove.gemspec +35 -0
- data/lib/langrove/README.md +82 -0
- data/lib/langrove/adaptor/README.md +92 -0
- data/lib/langrove/adaptor/adaptor_base.rb +123 -0
- data/lib/langrove/adaptor/base.rb +12 -2
- data/lib/langrove/adaptor/default.rb +8 -0
- data/lib/langrove/adaptor/event_machine_adaptor.rb +152 -0
- data/lib/langrove/adaptor/query_adaptor.rb +271 -0
- data/lib/langrove/behaviour/README.md +170 -0
- data/lib/langrove/behaviour/assessable.rb +63 -0
- data/lib/langrove/behaviour/base.rb +16 -0
- data/lib/langrove/behaviour/behaviour_base.rb +341 -0
- data/lib/langrove/behaviour/enqueueable.rb +104 -0
- data/lib/langrove/behaviour/notifiable.rb +48 -0
- data/lib/langrove/behaviour/persistable.rb +89 -0
- data/lib/langrove/behaviour/preloadable.rb +63 -0
- data/lib/langrove/daemon/README.md +7 -0
- data/lib/langrove/daemon/base.rb +9 -2
- data/lib/langrove/daemon/daemon_base.rb +330 -0
- data/lib/langrove/daemon/default.rb +3 -0
- data/lib/langrove/ext/README.md +48 -0
- data/lib/langrove/ext/class_loader.rb +9 -66
- data/lib/langrove/ext/config_item.rb +31 -23
- data/lib/langrove/ext/config_loader.rb +42 -8
- data/lib/langrove/ext/fake_config.rb +121 -0
- data/lib/langrove/ext/fake_logger.rb +50 -7
- data/lib/langrove/ext/fake_root.rb +38 -0
- data/lib/langrove/ext/hash.rb +56 -0
- data/lib/langrove/ext/i.rb +43 -0
- data/lib/langrove/ext/log_monitor.rb +272 -0
- data/lib/langrove/ext/module_loader.rb +52 -0
- data/lib/langrove/ext/recursive_string.rb +94 -0
- data/lib/langrove/ext/spec_helper.rb +84 -0
- data/lib/langrove/ext.rb +8 -2
- data/lib/langrove/handler/README.md +161 -0
- data/lib/langrove/handler/base.rb +29 -2
- data/lib/langrove/handler/default.rb +4 -0
- data/lib/langrove/handler/deferred.rb +105 -0
- data/lib/langrove/handler/handler_base.rb +242 -0
- data/lib/langrove/handler/http_servlet.rb +58 -0
- data/lib/langrove/handler/socket.rb +21 -0
- data/lib/langrove/handler/socket_base.rb +127 -0
- data/lib/langrove/handler/socket_multiplexer.rb +438 -0
- data/lib/langrove/handler/web_socket.rb +41 -0
- data/lib/langrove/plugin/README.md +76 -0
- data/lib/langrove/plugin/assessor.rb +363 -0
- data/lib/langrove/plugin/base.rb +18 -0
- data/lib/langrove/plugin/buffered_persistor.rb +97 -0
- data/lib/langrove/plugin/enqueuer.rb +186 -0
- data/lib/langrove/plugin/notifier.rb +144 -0
- data/lib/langrove/plugin/persistor.rb +360 -0
- data/lib/langrove/plugin/plugin_base.rb +79 -0
- data/lib/langrove/plugin/yaml_file.md +5 -0
- data/lib/langrove/plugin/yaml_file.rb +261 -0
- data/lib/langrove/protocol/README.md +102 -0
- data/lib/langrove/protocol/base.rb +10 -2
- data/lib/langrove/protocol/default.rb +3 -0
- data/lib/langrove/protocol/protocol_base.rb +60 -0
- data/lib/langrove/protocol/syslog.rb +34 -27
- data/lib/langrove/root/README.md +17 -0
- data/lib/langrove/root/base.rb +11 -0
- data/lib/langrove/root/config.rb +163 -0
- data/lib/langrove/root/root_base.rb +259 -0
- data/lib/langrove/server/README.md +7 -0
- data/lib/langrove/server/base.rb +9 -0
- data/lib/langrove/server/default.rb +3 -0
- data/lib/langrove/server/server_base.rb +301 -0
- data/lib/langrove/version.rb +3 -1
- data/lib/langrove.rb +44 -1
- data/spec/langrove/adaptor/adaptor_base_spec.rb +33 -0
- data/spec/langrove/adaptor/event_machine_adaptor_spec.rb +62 -0
- data/spec/langrove/adaptor/query_adaptor_spec.rb +94 -0
- data/spec/langrove/behaviour/assessable_spec.rb +42 -0
- data/spec/langrove/behaviour/behaviour_base_spec.rb +396 -0
- data/spec/langrove/behaviour/enqueueable_spec.rb +19 -0
- data/spec/langrove/behaviour/notifiable_spec.rb +6 -0
- data/spec/langrove/behaviour/persistable_spec.rb +19 -0
- data/spec/langrove/behaviour/preloadable_spec.rb +19 -0
- data/spec/langrove/daemon/base_spec.rb +6 -0
- data/spec/langrove/daemon/daemon_base_spec.rb +253 -0
- data/spec/langrove/ext/class_loader_spec.rb +9 -12
- data/spec/langrove/ext/fake_config_spec.rb +50 -0
- data/spec/langrove/ext/fake_logger_spec.rb +12 -0
- data/spec/langrove/ext/fake_root_spec.rb +19 -0
- data/spec/langrove/ext/hash_spec.rb +54 -0
- data/spec/langrove/ext/i_spec.rb +11 -0
- data/spec/langrove/ext/log_monitor_spec.rb +254 -0
- data/spec/langrove/ext/module_loader_spec.rb +70 -0
- data/spec/langrove/ext/recursive_string_spec.rb +132 -0
- data/{functional/config/environments/development.rb → spec/langrove/ext/spec_helper_spec.rb} +0 -0
- data/spec/langrove/handler/deferred_spec.rb +9 -0
- data/spec/langrove/handler/handler_base_spec.rb +134 -0
- data/spec/langrove/handler/socket_base_spec.rb +76 -0
- data/spec/langrove/handler/socket_multiplexer_spec.rb +480 -0
- data/spec/langrove/handler/socket_spec.rb +6 -0
- data/spec/langrove/handler/web_socket_spec.rb +19 -0
- data/spec/langrove/plugin/assessor_spec.rb +278 -0
- data/spec/langrove/plugin/buffered_persistor_spec.rb +94 -0
- data/spec/langrove/plugin/enqueuer_spec.rb +136 -0
- data/spec/langrove/plugin/notifier_spec.rb +107 -0
- data/spec/langrove/plugin/persistor_spec.rb +300 -0
- data/spec/langrove/plugin/plugin_base_spec.rb +86 -0
- data/spec/langrove/plugin/yaml_file_spec.rb +348 -0
- data/spec/langrove/protocol/protocol_base_spec.rb +19 -0
- data/spec/langrove/protocol/syslog_spec.rb +5 -2
- data/spec/langrove/root/config_spec.rb +103 -0
- data/spec/langrove/root/root_base_spec.rb +93 -0
- data/spec/langrove/server/server_base_spec.rb +414 -0
- data/spec/spec_helper.rb +38 -0
- metadata +157 -92
- data/.watchr +0 -27
- data/functional/config/boot.rb +0 -64
- data/functional/config/daemons.yml +0 -13
- data/functional/config/environment.rb +0 -28
- data/functional/config/environments/production.rb +0 -0
- data/functional/config/environments/test.rb +0 -0
- data/functional/lib/client/socket_to_file.rb +0 -47
- data/functional/lib/daemon/datagram.rb +0 -21
- data/functional/lib/protocol/socket_to_file.rb +0 -55
- data/functional/libexec/daemon.rb +0 -68
- data/functional/tmp/README +0 -1
- data/lib/langrove/_base.rb +0 -28
- data/lib/langrove/adaptor_base.rb +0 -116
- data/lib/langrove/client/base.rb +0 -2
- data/lib/langrove/client/datagram.rb +0 -25
- data/lib/langrove/client_base.rb +0 -92
- data/lib/langrove/daemon_base.rb +0 -281
- data/lib/langrove/ext/find.rb +0 -90
- data/lib/langrove/ext/persistable.rb +0 -103
- data/lib/langrove/handler_base.rb +0 -148
- data/lib/langrove/job/base.rb +0 -1
- data/lib/langrove/job_base.rb +0 -24
- data/lib/langrove/protocol_base.rb +0 -32
- data/spec/functional/daemon/datagram_spec.rb +0 -121
- data/spec/langrove/adaptor_base_spec.rb +0 -63
- data/spec/langrove/client/datagram_spec.rb +0 -1
- data/spec/langrove/client_base_spec.rb +0 -5
- data/spec/langrove/daemon_base_spec.rb +0 -154
- data/spec/langrove/ext/find_spec.rb +0 -53
- data/spec/langrove/ext/persistable_spec.rb +0 -117
- data/spec/langrove/handler_base_spec.rb +0 -103
- data/spec/langrove/job_base_spec.rb +0 -28
- data/spec/langrove/protocol_base_spec.rb +0 -6
- data/spec/todo_spec.rb +0 -12
- data/tmp/README +0 -2
@@ -0,0 +1,121 @@
|
|
1
|
+
module LanGrove
|
2
|
+
|
3
|
+
class FakeConfig
|
4
|
+
|
5
|
+
#
|
6
|
+
# for easy spec setup
|
7
|
+
#
|
8
|
+
|
9
|
+
attr_accessor :system
|
10
|
+
|
11
|
+
attr_accessor :application
|
12
|
+
|
13
|
+
attr_accessor :plugins
|
14
|
+
|
15
|
+
attr_accessor :daemons
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
|
19
|
+
flush
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def flush
|
24
|
+
|
25
|
+
@system = 'system'
|
26
|
+
@application = 'application'
|
27
|
+
@plugins = {}
|
28
|
+
@daemons = {}
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
def []( key )
|
33
|
+
|
34
|
+
return self.send( key )
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
def hash
|
39
|
+
|
40
|
+
config = {
|
41
|
+
|
42
|
+
:system => 'system',
|
43
|
+
:application => 'application',
|
44
|
+
:plugins => @plugins,
|
45
|
+
:daemons => @daemons
|
46
|
+
|
47
|
+
}
|
48
|
+
|
49
|
+
return config
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
def create_behaviour( daemon, behaviour, plugin, trigger = :handler_after_receive, action = nil )
|
54
|
+
|
55
|
+
init_daemon_config( daemon )
|
56
|
+
|
57
|
+
@daemons[daemon][:server][:behaviours] = {} if
|
58
|
+
@daemons[daemon][:server][:behaviours].nil?
|
59
|
+
|
60
|
+
behaviours = @daemons[daemon][:server][:behaviours]
|
61
|
+
|
62
|
+
behaviours[behaviour] = {} if
|
63
|
+
behaviours[behaviour].nil?
|
64
|
+
|
65
|
+
this = behaviours[behaviour]
|
66
|
+
|
67
|
+
this[:plugin] = plugin
|
68
|
+
|
69
|
+
this[:at] = {
|
70
|
+
trigger => action
|
71
|
+
}
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
def create( daemon_name, module_name, module_class, module_config = {} )
|
76
|
+
|
77
|
+
init_daemon_config( daemon_name )
|
78
|
+
|
79
|
+
@daemons[daemon_name][module_name] = {
|
80
|
+
|
81
|
+
:class => module_class
|
82
|
+
|
83
|
+
}
|
84
|
+
|
85
|
+
@daemons[daemon_name][module_name].merge!( module_config )
|
86
|
+
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
def get_plugin_config( name )
|
91
|
+
|
92
|
+
@plugins[ name ]
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
def get_plugin( name )
|
97
|
+
|
98
|
+
config = LanGrove::Config::Base.new( ROOT, hash, LOG )
|
99
|
+
config.get_plugin( name )
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
|
105
|
+
def init_daemon_config( daemon_name )
|
106
|
+
|
107
|
+
if @daemons[daemon_name].nil?
|
108
|
+
|
109
|
+
@daemons[daemon_name] = {}
|
110
|
+
@daemons[daemon_name][:adaptor] = nil
|
111
|
+
@daemons[daemon_name][:handler] = nil
|
112
|
+
@daemons[daemon_name][:protocol] = nil
|
113
|
+
@daemons[daemon_name][:server] = {}
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
@@ -1,8 +1,51 @@
|
|
1
|
-
module LanGrove
|
2
|
-
|
3
|
-
|
1
|
+
module LanGrove
|
2
|
+
|
3
|
+
class FakeLogger
|
4
|
+
|
5
|
+
#
|
6
|
+
# for easy spec setup
|
7
|
+
#
|
8
|
+
|
9
|
+
class << self
|
10
|
+
|
11
|
+
def on
|
12
|
+
|
13
|
+
@silent = false
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
def off
|
18
|
+
|
19
|
+
@silent = true
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def debug( msg )
|
24
|
+
|
25
|
+
puts "LOG.debug: [#{msg}]" unless @silent
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def info( msg )
|
30
|
+
|
31
|
+
puts "LOG.info: [#{msg}]" unless @silent
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
def warn( msg )
|
36
|
+
|
37
|
+
puts "LOG.warn: [#{msg}]" unless @silent
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
def error( msg )
|
42
|
+
|
43
|
+
puts "LOG.error: [#{msg}]" unless @silent
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
4
49
|
end
|
5
|
-
|
6
|
-
|
7
|
-
end
|
8
|
-
end; end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module LanGrove
|
2
|
+
|
3
|
+
class FakeRoot
|
4
|
+
|
5
|
+
#
|
6
|
+
# for easy spec setup
|
7
|
+
#
|
8
|
+
|
9
|
+
attr_accessor :logger
|
10
|
+
attr_accessor :config
|
11
|
+
|
12
|
+
def initialize( config = {
|
13
|
+
|
14
|
+
#
|
15
|
+
# Fake Config
|
16
|
+
#
|
17
|
+
|
18
|
+
:system => 'system',
|
19
|
+
:application => 'application'
|
20
|
+
|
21
|
+
}, logger = FakeLogger )
|
22
|
+
|
23
|
+
@logger = logger
|
24
|
+
@config = LanGrove::Config::Base.new( self, config, logger )
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
def method_missing( symbol, *args, &block )
|
31
|
+
|
32
|
+
logger.info "call to ROOT.#{symbol}( #{args})" unless logger.nil?
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
class Hash
|
2
|
+
|
3
|
+
|
4
|
+
def sym_key_sub( sub = '_' )
|
5
|
+
|
6
|
+
#
|
7
|
+
# Substitutes all :symkeys with '_symkeys'
|
8
|
+
#
|
9
|
+
|
10
|
+
replace( inject({}) do |hash, (key,val) |
|
11
|
+
|
12
|
+
val.sym_key_sub( sub ) if val.is_a?( Hash )
|
13
|
+
|
14
|
+
if key.is_a?( Symbol )
|
15
|
+
|
16
|
+
hash["#{sub}#{key.to_s}"] = val
|
17
|
+
|
18
|
+
else
|
19
|
+
|
20
|
+
hash[key] = val
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
hash
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
)
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
def sym_key_usub( sub = '_')
|
33
|
+
|
34
|
+
replace( inject({}) do |hash, (key,val) |
|
35
|
+
|
36
|
+
val.sym_key_usub( sub ) if val.is_a?( Hash )
|
37
|
+
|
38
|
+
if key[0] == '_'
|
39
|
+
|
40
|
+
hash[key[1..-1].to_sym] = val
|
41
|
+
|
42
|
+
else
|
43
|
+
|
44
|
+
hash[key] = val
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
hash
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
)
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'awesome_print'
|
2
|
+
|
3
|
+
class I
|
4
|
+
|
5
|
+
def self.show( variable )
|
6
|
+
|
7
|
+
ap variable
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.shoe( variable )
|
12
|
+
|
13
|
+
#
|
14
|
+
# i keep writing shoe, support it... ;)
|
15
|
+
#
|
16
|
+
|
17
|
+
ap variable
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.notify( logger, need_description, tags = [] )
|
22
|
+
|
23
|
+
#
|
24
|
+
# log reminders into the running server
|
25
|
+
#
|
26
|
+
do_it = "["
|
27
|
+
tags.each do |tag|
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
do_it = "#{do_it}:#{tag}, "
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
done = do_it.chop.chop
|
36
|
+
|
37
|
+
logger.info( "#{done}] (todo) #{need_description}" )
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end unless defined?( I ) # unlikely
|
42
|
+
|
43
|
+
Unimplemented = I
|
@@ -0,0 +1,272 @@
|
|
1
|
+
module LanGrove
|
2
|
+
|
3
|
+
module LogMonitor
|
4
|
+
|
5
|
+
def log_monitor_config( config, hash = nil )
|
6
|
+
|
7
|
+
#
|
8
|
+
# <hash> as the state storage (capsule)
|
9
|
+
#
|
10
|
+
|
11
|
+
#
|
12
|
+
# <config> as hash, as loaded from the
|
13
|
+
# relevant cofig branch.
|
14
|
+
#
|
15
|
+
# :success: regex match
|
16
|
+
# :error: regex match
|
17
|
+
# :known_errors:
|
18
|
+
# :short_name: regex_match
|
19
|
+
# :nother_name: nother match
|
20
|
+
# :versions:
|
21
|
+
# :version_name: regex match
|
22
|
+
#
|
23
|
+
# Errors that match :error: but no :known_error: are
|
24
|
+
# tracked as unknown errors.
|
25
|
+
#
|
26
|
+
# Errors that match a :known_errors: are tracked by name
|
27
|
+
#
|
28
|
+
# Success match will reset all errors.... (GONE!)
|
29
|
+
# and set :success: to true on the capsule.
|
30
|
+
#
|
31
|
+
# last_run_at is updated with each log message.
|
32
|
+
#
|
33
|
+
|
34
|
+
raise LanGrove::DaemonConfigException.new(
|
35
|
+
|
36
|
+
"#{self.class} requires :success:, :error:, and :known_errors: config."
|
37
|
+
|
38
|
+
) unless (
|
39
|
+
|
40
|
+
config.has_key?( :success ) and
|
41
|
+
config.has_key?( :error ) and
|
42
|
+
config.has_key?( :known_errors )
|
43
|
+
|
44
|
+
)
|
45
|
+
|
46
|
+
#
|
47
|
+
# Mandatory config
|
48
|
+
#
|
49
|
+
@success_match = config[:success]
|
50
|
+
@error_match = config[:error]
|
51
|
+
|
52
|
+
|
53
|
+
#
|
54
|
+
# Optional config
|
55
|
+
#
|
56
|
+
@known_error_matchers = config[:known_errors]
|
57
|
+
@known_error_matchers ||= {}
|
58
|
+
|
59
|
+
@version_matchers = config[:versions]
|
60
|
+
@version_matchers ||= {}
|
61
|
+
|
62
|
+
@known_error_matchers.each do |name, matcher|
|
63
|
+
|
64
|
+
raise LanGrove::DaemonConfigException.new(
|
65
|
+
|
66
|
+
"#{self.class} :known_error:#{name}: has no regex matcher"
|
67
|
+
|
68
|
+
) if matcher.nil?
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
#
|
73
|
+
# Move unknown_errors that are now in config
|
74
|
+
# to known_errors.
|
75
|
+
#
|
76
|
+
|
77
|
+
hash['unknown_errors'].each do |error_name, count|
|
78
|
+
|
79
|
+
known_error = known_error?( error_name )
|
80
|
+
|
81
|
+
unless known_error.nil?
|
82
|
+
|
83
|
+
hash['known_errors'] = {} if hash['known_errors'].nil?
|
84
|
+
|
85
|
+
hash['known_errors'][known_error] = count
|
86
|
+
|
87
|
+
hash['unknown_errors'].delete error_name
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
end if (
|
92
|
+
|
93
|
+
not hash.nil? and
|
94
|
+
hash.has_key?( 'unknown_errors' )
|
95
|
+
|
96
|
+
)
|
97
|
+
|
98
|
+
|
99
|
+
#
|
100
|
+
# Clear known_errors from state that
|
101
|
+
# are no longer in config
|
102
|
+
#
|
103
|
+
|
104
|
+
hash['known_errors'].each_key do |error_name|
|
105
|
+
|
106
|
+
unless @known_error_matchers.has_key?( error_name )
|
107
|
+
|
108
|
+
hash['known_errors'].delete error_name
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
end if (
|
113
|
+
|
114
|
+
not hash.nil? and
|
115
|
+
hash.has_key?( 'known_errors' )
|
116
|
+
|
117
|
+
)
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
def log_monitor_event( hash, event )
|
122
|
+
|
123
|
+
changed = false
|
124
|
+
|
125
|
+
hash['known_errors'] = {} if hash['known_errors'].nil?
|
126
|
+
hash['unknown_errors'] = {} if hash['unknown_errors'].nil?
|
127
|
+
|
128
|
+
hash['last_ran_at'] = event[:timestamp]
|
129
|
+
|
130
|
+
changed = update_versions( hash, event )
|
131
|
+
|
132
|
+
success_match = /#{@success_match}/.match( event[:event] )
|
133
|
+
|
134
|
+
unless success_match.nil?
|
135
|
+
|
136
|
+
hash['success'] = true
|
137
|
+
|
138
|
+
hash['success_at'] = event[:timestamp]
|
139
|
+
|
140
|
+
changed = log_monitor_reset( hash )
|
141
|
+
|
142
|
+
return changed
|
143
|
+
|
144
|
+
end
|
145
|
+
|
146
|
+
error_match = /#{@error_match}/.match( event[:event] )
|
147
|
+
error_type = 'unknown_errors'
|
148
|
+
error_name = nil
|
149
|
+
|
150
|
+
unless error_match.nil?
|
151
|
+
|
152
|
+
#
|
153
|
+
# Success to false on error
|
154
|
+
#
|
155
|
+
|
156
|
+
hash['success'] = false
|
157
|
+
|
158
|
+
error_name = event[:event]
|
159
|
+
|
160
|
+
known_error = known_error?( error_name )
|
161
|
+
|
162
|
+
unless known_error.nil?
|
163
|
+
|
164
|
+
error_type = 'known_errors'
|
165
|
+
error_name = known_error
|
166
|
+
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
unless error_name.nil?
|
172
|
+
|
173
|
+
if hash[ error_type ].nil?
|
174
|
+
|
175
|
+
hash[ error_type ] = {}
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
if hash[ error_type ][ error_name ].nil?
|
180
|
+
|
181
|
+
hash[ error_type ][ error_name ] = 0
|
182
|
+
|
183
|
+
end
|
184
|
+
|
185
|
+
hash[ error_type ][ error_name ] =
|
186
|
+
hash[ error_type ][ error_name ] + 1
|
187
|
+
|
188
|
+
changed = true
|
189
|
+
|
190
|
+
end
|
191
|
+
|
192
|
+
return changed
|
193
|
+
|
194
|
+
end
|
195
|
+
|
196
|
+
def log_monitor_reset( hash )
|
197
|
+
|
198
|
+
hash.delete 'unknown_errors'
|
199
|
+
|
200
|
+
hash['unknown_errors'] = {}
|
201
|
+
|
202
|
+
hash.delete 'known_errors'
|
203
|
+
|
204
|
+
hash['known_errors'] = {}
|
205
|
+
|
206
|
+
return true
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
|
211
|
+
private
|
212
|
+
|
213
|
+
|
214
|
+
def update_versions( hash, event )
|
215
|
+
|
216
|
+
@version_matchers.each do |version_name, match_regex|
|
217
|
+
|
218
|
+
version_match = /#{match_regex}/.match( event[:event] )
|
219
|
+
|
220
|
+
unless version_match.nil?
|
221
|
+
|
222
|
+
version_number = version_match[1]
|
223
|
+
|
224
|
+
return false if version_number.nil? # bad regex... did not match 'out' an actual version number
|
225
|
+
|
226
|
+
hash[version_name] = {} if hash[version_name.to_sym].nil?
|
227
|
+
|
228
|
+
hash[version_name]['latest'] = version_number
|
229
|
+
|
230
|
+
#
|
231
|
+
# Over time this (collected date of version change / her host)
|
232
|
+
# may get quite long
|
233
|
+
#
|
234
|
+
hash[version_name][version_number] = event[:timestamp]
|
235
|
+
|
236
|
+
return true
|
237
|
+
|
238
|
+
end
|
239
|
+
|
240
|
+
end
|
241
|
+
|
242
|
+
return false
|
243
|
+
|
244
|
+
end
|
245
|
+
|
246
|
+
|
247
|
+
def known_error?( event )
|
248
|
+
|
249
|
+
known_error = nil
|
250
|
+
|
251
|
+
@known_error_matchers.each do |key, value|
|
252
|
+
|
253
|
+
known_error = /#{value}/.match( event )
|
254
|
+
|
255
|
+
unless known_error.nil?
|
256
|
+
|
257
|
+
error_type = :known_errors
|
258
|
+
error_name = key
|
259
|
+
|
260
|
+
return key
|
261
|
+
|
262
|
+
end
|
263
|
+
|
264
|
+
end
|
265
|
+
|
266
|
+
return nil
|
267
|
+
|
268
|
+
end
|
269
|
+
|
270
|
+
end
|
271
|
+
|
272
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module LanGrove
|
2
|
+
class ModuleLoader
|
3
|
+
class << self
|
4
|
+
|
5
|
+
def create(args={})
|
6
|
+
|
7
|
+
#
|
8
|
+
# args = {
|
9
|
+
#
|
10
|
+
# :config => <hash of config>,
|
11
|
+
# :key => <daemon_root_component_key>,
|
12
|
+
# :mandatory => <default true>
|
13
|
+
#
|
14
|
+
# }
|
15
|
+
#
|
16
|
+
|
17
|
+
|
18
|
+
# if the config has no 'module key'
|
19
|
+
unless args[:config].has_key?(args[:key])
|
20
|
+
|
21
|
+
mandatory = args[:mandatory]
|
22
|
+
mandatory = true if mandatory.nil? #stu defaults to correct
|
23
|
+
|
24
|
+
if mandatory
|
25
|
+
raise DaemonConfigException, "Cannot find key with '#{args[:key]}'"
|
26
|
+
else
|
27
|
+
# just exit
|
28
|
+
return nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
params = {
|
33
|
+
:class => "Default",
|
34
|
+
:module => args[:key].to_s.camelize
|
35
|
+
}
|
36
|
+
|
37
|
+
begin
|
38
|
+
class_name = args[:config][args[:key]][:class]
|
39
|
+
rescue
|
40
|
+
#class_name = 'Base' if args[:config].has_key?( args[:key] )
|
41
|
+
end
|
42
|
+
|
43
|
+
params.merge!(:class => class_name) unless class_name.nil?
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
ClassLoader.create(params, args[:logger])
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|