eye 0.5.2 → 0.6

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 (60) hide show
  1. checksums.yaml +13 -5
  2. data/.travis.yml +1 -6
  3. data/CHANGES.md +12 -0
  4. data/README.md +5 -0
  5. data/Rakefile +4 -4
  6. data/bin/loader_eye +14 -3
  7. data/bin/runner +16 -0
  8. data/examples/dependency.eye +17 -0
  9. data/examples/plugin/README.md +15 -0
  10. data/examples/plugin/main.eye +15 -0
  11. data/examples/plugin/plugin.rb +63 -0
  12. data/examples/unicorn.eye +1 -1
  13. data/eye.gemspec +1 -2
  14. data/lib/eye.rb +1 -1
  15. data/lib/eye/checker.rb +16 -4
  16. data/lib/eye/checker/children_count.rb +44 -0
  17. data/lib/eye/checker/children_memory.rb +12 -0
  18. data/lib/eye/checker/socket.rb +9 -2
  19. data/lib/eye/child_process.rb +6 -2
  20. data/lib/eye/cli.rb +13 -2
  21. data/lib/eye/cli/commands.rb +2 -2
  22. data/lib/eye/cli/server.rb +11 -3
  23. data/lib/eye/config.rb +2 -2
  24. data/lib/eye/controller/commands.rb +29 -2
  25. data/lib/eye/controller/helpers.rb +31 -6
  26. data/lib/eye/controller/load.rb +5 -6
  27. data/lib/eye/controller/options.rb +1 -1
  28. data/lib/eye/controller/send_command.rb +0 -1
  29. data/lib/eye/dsl.rb +2 -1
  30. data/lib/eye/dsl/application_opts.rb +4 -7
  31. data/lib/eye/dsl/group_opts.rb +2 -1
  32. data/lib/eye/dsl/helpers.rb +9 -1
  33. data/lib/eye/dsl/main.rb +11 -5
  34. data/lib/eye/dsl/opts.rb +5 -22
  35. data/lib/eye/dsl/process_opts.rb +20 -2
  36. data/lib/eye/dsl/pure_opts.rb +1 -1
  37. data/lib/eye/dsl/validation.rb +17 -2
  38. data/lib/eye/local.rb +79 -50
  39. data/lib/eye/notify.rb +5 -3
  40. data/lib/eye/notify/mail.rb +6 -2
  41. data/lib/eye/process.rb +3 -1
  42. data/lib/eye/process/children.rb +1 -1
  43. data/lib/eye/process/commands.rb +17 -6
  44. data/lib/eye/process/config.rb +6 -1
  45. data/lib/eye/process/data.rb +20 -0
  46. data/lib/eye/process/monitor.rb +10 -4
  47. data/lib/eye/process/states.rb +5 -2
  48. data/lib/eye/process/states_history.rb +1 -1
  49. data/lib/eye/process/system.rb +6 -2
  50. data/lib/eye/process/trigger.rb +0 -1
  51. data/lib/eye/process/validate.rb +8 -6
  52. data/lib/eye/process/watchers.rb +1 -7
  53. data/lib/eye/system.rb +14 -11
  54. data/lib/eye/system_resources.rb +8 -0
  55. data/lib/eye/trigger.rb +12 -4
  56. data/lib/eye/trigger/check_dependency.rb +30 -0
  57. data/lib/eye/trigger/stop_children.rb +4 -1
  58. data/lib/eye/trigger/wait_dependency.rb +49 -0
  59. data/lib/eye/utils.rb +13 -0
  60. metadata +41 -45
@@ -20,7 +20,7 @@ class Eye::Process::StatesHistory < Eye::Utils::Tail
20
20
  end
21
21
 
22
22
  def last_reason
23
- last[:reason]
23
+ last[:reason] rescue nil
24
24
  end
25
25
 
26
26
  def last_state_changed_at
@@ -37,8 +37,12 @@ module Eye::Process::System
37
37
  end
38
38
 
39
39
  def process_really_running?
40
- res = Eye::System.check_pid_alive(self.pid)
41
- debug "process_really_running?: (#{self.pid}) #{res.inspect}"
40
+ process_pid_running?(self.pid)
41
+ end
42
+
43
+ def process_pid_running?(pid)
44
+ res = Eye::System.check_pid_alive(pid)
45
+ debug "process_really_running?: (#{pid}) #{res.inspect}"
42
46
  !!res[:result]
43
47
  end
44
48
 
@@ -13,7 +13,6 @@ module Eye::Process::Trigger
13
13
  end
14
14
 
15
15
  def check_triggers(transition)
16
- return if unmonitored?
17
16
  self.triggers.each { |trigger| trigger.notify(transition, state_reason) }
18
17
  end
19
18
 
@@ -5,12 +5,12 @@ module Eye::Process::Validate
5
5
 
6
6
  class Error < Exception; end
7
7
 
8
- def validate(config)
8
+ def validate(config, localize = true)
9
9
  if (str = config[:start_command])
10
10
  # it should parse with Shellwords and not raise
11
11
  spl = Shellwords.shellwords(str) * '#'
12
12
 
13
- if config[:daemonize]
13
+ if config[:daemonize] && !config[:use_leaf_child]
14
14
  if spl =~ %r[sh#\-c|#&&#|;#]
15
15
  raise Error, "#{config[:name]}, daemonize does not support concats like '&&' in start_command"
16
16
  end
@@ -20,11 +20,13 @@ module Eye::Process::Validate
20
20
  Shellwords.shellwords(config[:stop_command]) if config[:stop_command]
21
21
  Shellwords.shellwords(config[:restart_command]) if config[:restart_command]
22
22
 
23
- Etc.getpwnam(config[:uid]) if config[:uid]
24
- Etc.getpwnam(config[:gid]) if config[:gid]
23
+ if localize
24
+ Etc.getpwnam(config[:uid]) if config[:uid]
25
+ Etc.getpwnam(config[:gid]) if config[:gid]
25
26
 
26
- if config[:working_dir]
27
- raise Error, "working_dir '#{config[:working_dir]}' is invalid" unless File.directory?(config[:working_dir])
27
+ if config[:working_dir]
28
+ raise Error, "working_dir '#{config[:working_dir]}' is invalid" unless File.directory?(config[:working_dir])
29
+ end
28
30
  end
29
31
  end
30
32
 
@@ -59,13 +59,7 @@ private
59
59
  def watcher_tick(subject)
60
60
  unless subject.check
61
61
  return unless up?
62
-
63
- actions = subject.fires ? Array(subject.fires) : [:restart]
64
- notify :warn, "Bounded #{subject.check_name}: #{subject.last_human_values} send to #{actions}"
65
-
66
- actions.each do |action|
67
- schedule action, Eye::Reason.new("bounded #{subject.check_name}")
68
- end
62
+ subject.fire
69
63
  end
70
64
  end
71
65
 
data/lib/eye/system.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'shellwords'
2
2
  require 'pathname'
3
3
  require 'etc'
4
+ require 'timeout'
4
5
 
5
6
  module Eye::System
6
7
  class << self
@@ -103,22 +104,24 @@ module Eye::System
103
104
  Pathname.new(file).expand_path(working_dir).to_s
104
105
  end
105
106
 
106
- private
107
-
108
107
  def spawn_options(config = {})
109
- o = {pgroup: true, chdir: config[:working_dir] || '/'}
110
- o.update(out: [config[:stdout], 'a']) if config[:stdout]
111
- o.update(err: [config[:stderr], 'a']) if config[:stderr]
112
- o.update(in: config[:stdin]) if config[:stdin]
108
+ options = {
109
+ pgroup: true,
110
+ chdir: config[:working_dir] || '/'
111
+ }
112
+
113
+ options[:out] = [config[:stdout], 'a'] if config[:stdout]
114
+ options[:err] = [config[:stderr], 'a'] if config[:stderr]
115
+ options[:in] = config[:stdin] if config[:stdin]
116
+ options[:umask] = config[:umask] if config[:umask]
117
+ options[:close_others] = false if config[:preserve_fds]
113
118
 
114
119
  if Eye::Local.root?
115
- o.update(uid: Etc.getpwnam(config[:uid]).uid) if config[:uid]
116
- o.update(gid: Etc.getpwnam(config[:gid]).gid) if config[:gid]
120
+ options[:uid] = Etc.getpwnam(config[:uid]).uid if config[:uid]
121
+ options[:gid] = Etc.getpwnam(config[:gid]).gid if config[:gid]
117
122
  end
118
123
 
119
- o.update(umask: config[:umask]) if config[:umask]
120
-
121
- o
124
+ options
122
125
  end
123
126
 
124
127
  def prepare_env(config = {})
@@ -32,6 +32,14 @@ class Eye::SystemResources
32
32
  end
33
33
  end
34
34
 
35
+ # last child in a children tree
36
+ def leaf_child(pid)
37
+ c = children(pid)
38
+ return if c.empty?
39
+ c += children(c.shift) while c.size > 1
40
+ c[0]
41
+ end
42
+
35
43
  def resources(pid)
36
44
  { :memory => memory(pid),
37
45
  :cpu => cpu(pid),
data/lib/eye/trigger.rb CHANGED
@@ -4,8 +4,12 @@ class Eye::Trigger
4
4
  autoload :Flapping, 'eye/trigger/flapping'
5
5
  autoload :Transition, 'eye/trigger/transition'
6
6
  autoload :StopChildren, 'eye/trigger/stop_children'
7
+ autoload :WaitDependency, 'eye/trigger/wait_dependency'
8
+ autoload :CheckDependency, 'eye/trigger/check_dependency'
7
9
 
8
- TYPES = {:flapping => 'Flapping', :transition => 'Transition', :stop_children => 'StopChildren'}
10
+ TYPES = {:flapping => 'Flapping', :transition => 'Transition', :stop_children => 'StopChildren',
11
+ :wait_dependency => 'WaitDependency', :check_dependency => 'CheckDependency'
12
+ }
9
13
 
10
14
  attr_reader :message, :options, :process
11
15
 
@@ -22,7 +26,7 @@ class Eye::Trigger
22
26
  def self.get_class(type)
23
27
  klass = eval("Eye::Trigger::#{TYPES[type]}") rescue nil
24
28
  raise "unknown trigger #{type}" unless klass
25
- if deps = klass.depends_on
29
+ if deps = klass.requires
26
30
  Array(deps).each { |d| require d }
27
31
  end
28
32
  klass
@@ -68,7 +72,11 @@ class Eye::Trigger
68
72
  check(transition) if filter_transition(transition)
69
73
 
70
74
  rescue Exception, Timeout::Error => ex
71
- log_ex(ex)
75
+ if ex.class == Eye::Process::StateError
76
+ raise ex
77
+ else
78
+ log_ex(ex)
79
+ end
72
80
  end
73
81
 
74
82
  param :to, [Symbol, Array]
@@ -102,7 +110,7 @@ class Eye::Trigger
102
110
  Eye::Trigger.const_set(name, base)
103
111
  end
104
112
 
105
- def self.depends_on
113
+ def self.requires
106
114
  end
107
115
 
108
116
  class Custom < Eye::Trigger
@@ -0,0 +1,30 @@
1
+ class Eye::Trigger::CheckDependency < Eye::Trigger
2
+ param :names, [Array], true, 5
3
+
4
+ def check(transition)
5
+ check_dependency(transition.to_name) if transition.from_name == :up
6
+ end
7
+
8
+ private
9
+
10
+ def check_dependency(to)
11
+ processes = names.map do |name|
12
+ Eye::Control.find_nearest_process(name, process.group_name_pure, process.app_name)
13
+ end.compact
14
+ return if processes.empty?
15
+ processes = Eye::Utils::AliveArray.new(processes)
16
+
17
+ act = case to
18
+ when :down, :restarting; :restart
19
+ when :stopping; :stop
20
+ when :unmonitored; :unmonitor
21
+ end
22
+
23
+ if act
24
+ processes.each do |p|
25
+ p.schedule act, Eye::Reason.new(:"#{act} dependecies")
26
+ end
27
+ end
28
+ end
29
+
30
+ end
@@ -2,10 +2,13 @@ class Eye::Trigger::StopChildren < Eye::Trigger
2
2
 
3
3
  # Kill process children when parent process crashed, or stopped:
4
4
  #
5
- # trigger :stop_children, :event => [:stopped, :crashed]
5
+ # trigger :stop_children
6
6
 
7
7
  param :timeout, [Fixnum, Float], nil, 60
8
8
 
9
+ # default on stopped, crashed
10
+ param_default :event, [:stopped, :crashed]
11
+
9
12
  def check(trans)
10
13
  debug 'stopping children'
11
14
  process.children.pmap { |pid, c| c.stop }
@@ -0,0 +1,49 @@
1
+ class Eye::Trigger::WaitDependency < Eye::Trigger
2
+ param :names, [Array], true
3
+ param :wait_timeout, [Numeric], nil, 15.seconds
4
+ param :retry_after, [Numeric], nil, 1.minute
5
+ param :should_start, [TrueClass, FalseClass]
6
+
7
+ def check(transition)
8
+ wait_dependency if transition.to_name == :starting
9
+ end
10
+
11
+ private
12
+
13
+ def wait_dependency
14
+ processes = names.map do |name|
15
+ Eye::Control.find_nearest_process(name, process.group_name_pure, process.app_name)
16
+ end.compact
17
+ return if processes.empty?
18
+ processes = Eye::Utils::AliveArray.new(processes)
19
+
20
+ processes.each do |p|
21
+ if p.state_name != :up && (should_start == nil || should_start)
22
+ p.schedule :start, Eye::Reason.new(:start_dependency)
23
+ end
24
+ end
25
+
26
+ res = true
27
+
28
+ processes.pmap do |p|
29
+ name = p.name
30
+
31
+ res &= process.wait_for_condition(wait_timeout, 0.5) do
32
+ info "wait for #{name} until it :up"
33
+ p.state_name == :up
34
+ end
35
+ end
36
+
37
+ unless res
38
+ warn "not waited for #{names} to be up"
39
+ process.switch :unmonitoring
40
+
41
+ if retry_after
42
+ process.schedule_in retry_after, :start, Eye::Reason.new(:wait_dependency)
43
+ end
44
+
45
+ raise Eye::Process::StateError.new('stop transition because dependency is not up')
46
+ end
47
+ end
48
+
49
+ end
data/lib/eye/utils.rb CHANGED
@@ -13,6 +13,19 @@ module Eye::Utils
13
13
  end
14
14
  end
15
15
 
16
+ # deep merging b into a (a deeply changed)
17
+ def self.deep_merge!(a, b, allowed_keys = nil)
18
+ b.each do |k, v|
19
+ next if allowed_keys && !allowed_keys.include?(k)
20
+ if a[k].is_a?(Hash) && v.is_a?(Hash)
21
+ deep_merge!(a[k], v)
22
+ else
23
+ a[k] = v
24
+ end
25
+ end
26
+ a
27
+ end
28
+
16
29
  D1 = '%H:%M'
17
30
  D2 = '%b%d'
18
31
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eye
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: '0.6'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Makarchev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-23 00:00:00.000000000 Z
11
+ date: 2014-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: celluloid
@@ -42,28 +42,28 @@ dependencies:
42
42
  name: state_machine
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: thor
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ! '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
@@ -84,14 +84,14 @@ dependencies:
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ! '>='
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ! '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
@@ -112,162 +112,149 @@ dependencies:
112
112
  name: rr
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - ! '>='
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '>='
122
+ - - ! '>='
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: ruby-graphviz
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '>='
129
+ - - ! '>='
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '>='
136
+ - - ! '>='
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: forking
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - '>='
143
+ - - ! '>='
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - '>='
150
+ - - ! '>='
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: fakeweb
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - '>='
157
+ - - ! '>='
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - '>='
164
+ - - ! '>='
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: eventmachine
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - '>='
171
+ - - ! '>='
172
172
  - !ruby/object:Gem::Version
173
173
  version: 1.0.3
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - '>='
178
+ - - ! '>='
179
179
  - !ruby/object:Gem::Version
180
180
  version: 1.0.3
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: sinatra
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - '>='
185
+ - - ! '>='
186
186
  - !ruby/object:Gem::Version
187
187
  version: '0'
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
- - - '>='
192
+ - - ! '>='
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: thin
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - '>='
199
+ - - ! '>='
200
200
  - !ruby/object:Gem::Version
201
201
  version: '0'
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
- - - '>='
206
+ - - ! '>='
207
207
  - !ruby/object:Gem::Version
208
208
  version: '0'
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: xmpp4r
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
- - - '>='
213
+ - - ! '>='
214
214
  - !ruby/object:Gem::Version
215
215
  version: '0'
216
216
  type: :development
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
- - - '>='
220
+ - - ! '>='
221
221
  - !ruby/object:Gem::Version
222
222
  version: '0'
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: coveralls
225
225
  requirement: !ruby/object:Gem::Requirement
226
226
  requirements:
227
- - - '>='
227
+ - - ! '>='
228
228
  - !ruby/object:Gem::Version
229
229
  version: '0'
230
230
  type: :development
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
- - - '>='
234
+ - - ! '>='
235
235
  - !ruby/object:Gem::Version
236
236
  version: '0'
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: simplecov
239
239
  requirement: !ruby/object:Gem::Requirement
240
240
  requirements:
241
- - - '>='
241
+ - - ! '>='
242
242
  - !ruby/object:Gem::Version
243
243
  version: 0.8.1
244
244
  type: :development
245
245
  prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
247
247
  requirements:
248
- - - '>='
248
+ - - ! '>='
249
249
  - !ruby/object:Gem::Version
250
250
  version: 0.8.1
251
- - !ruby/object:Gem::Dependency
252
- name: parallel_tests
253
- requirement: !ruby/object:Gem::Requirement
254
- requirements:
255
- - - '>='
256
- - !ruby/object:Gem::Version
257
- version: '0'
258
- type: :development
259
- prerelease: false
260
- version_requirements: !ruby/object:Gem::Requirement
261
- requirements:
262
- - - '>='
263
- - !ruby/object:Gem::Version
264
- version: '0'
265
251
  description: Process monitoring tool. Inspired from Bluepill and God. Requires Ruby(MRI)
266
252
  >= 1.9.3-p194. Uses Celluloid and Celluloid::IO.
267
253
  email: eye-rb@googlegroups.com
268
254
  executables:
269
255
  - eye
270
256
  - loader_eye
257
+ - runner
271
258
  extensions: []
272
259
  extra_rdoc_files: []
273
260
  files:
@@ -281,7 +268,12 @@ files:
281
268
  - Rakefile
282
269
  - bin/eye
283
270
  - bin/loader_eye
271
+ - bin/runner
272
+ - examples/dependency.eye
284
273
  - examples/notify.eye
274
+ - examples/plugin/README.md
275
+ - examples/plugin/main.eye
276
+ - examples/plugin/plugin.rb
285
277
  - examples/process_thin.rb
286
278
  - examples/processes/em.rb
287
279
  - examples/processes/forking.rb
@@ -297,6 +289,8 @@ files:
297
289
  - lib/eye.rb
298
290
  - lib/eye/application.rb
299
291
  - lib/eye/checker.rb
292
+ - lib/eye/checker/children_count.rb
293
+ - lib/eye/checker/children_memory.rb
300
294
  - lib/eye/checker/cpu.rb
301
295
  - lib/eye/checker/cputime.rb
302
296
  - lib/eye/checker/file_ctime.rb
@@ -363,9 +357,11 @@ files:
363
357
  - lib/eye/system.rb
364
358
  - lib/eye/system_resources.rb
365
359
  - lib/eye/trigger.rb
360
+ - lib/eye/trigger/check_dependency.rb
366
361
  - lib/eye/trigger/flapping.rb
367
362
  - lib/eye/trigger/stop_children.rb
368
363
  - lib/eye/trigger/transition.rb
364
+ - lib/eye/trigger/wait_dependency.rb
369
365
  - lib/eye/utils.rb
370
366
  - lib/eye/utils/alive_array.rb
371
367
  - lib/eye/utils/celluloid_chain.rb
@@ -384,17 +380,17 @@ require_paths:
384
380
  - lib
385
381
  required_ruby_version: !ruby/object:Gem::Requirement
386
382
  requirements:
387
- - - '>='
383
+ - - ! '>='
388
384
  - !ruby/object:Gem::Version
389
385
  version: 1.9.2
390
386
  required_rubygems_version: !ruby/object:Gem::Requirement
391
387
  requirements:
392
- - - '>='
388
+ - - ! '>='
393
389
  - !ruby/object:Gem::Version
394
390
  version: 1.3.6
395
391
  requirements: []
396
392
  rubyforge_project:
397
- rubygems_version: 2.1.4
393
+ rubygems_version: 2.2.2
398
394
  signing_key:
399
395
  specification_version: 4
400
396
  summary: Process monitoring tool. Inspired from Bluepill and God. Requires Ruby(MRI)