eye 0.5.2 → 0.6

Sign up to get free protection for your applications and to get access to all the features.
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)