eye 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/CHANGES.md +6 -0
  4. data/README.md +37 -35
  5. data/examples/puma.eye +1 -1
  6. data/examples/test.eye +32 -30
  7. data/examples/unicorn.eye +1 -1
  8. data/lib/eye.rb +1 -1
  9. data/lib/eye/checker.rb +24 -1
  10. data/lib/eye/checker/cpu.rb +4 -14
  11. data/lib/eye/checker/cputime.rb +2 -12
  12. data/lib/eye/checker/file_ctime.rb +2 -3
  13. data/lib/eye/checker/file_size.rb +8 -8
  14. data/lib/eye/checker/http.rb +2 -2
  15. data/lib/eye/checker/memory.rb +4 -14
  16. data/lib/eye/checker/runtime.rb +2 -12
  17. data/lib/eye/checker/socket.rb +1 -1
  18. data/lib/eye/cli.rb +6 -0
  19. data/lib/eye/cli/commands.rb +2 -3
  20. data/lib/eye/cli/render.rb +4 -4
  21. data/lib/eye/cli/server.rb +4 -4
  22. data/lib/eye/controller.rb +1 -1
  23. data/lib/eye/controller/load.rb +14 -13
  24. data/lib/eye/controller/send_command.rb +4 -4
  25. data/lib/eye/controller/status.rb +2 -1
  26. data/lib/eye/dsl.rb +1 -1
  27. data/lib/eye/dsl/child_process_opts.rb +2 -2
  28. data/lib/eye/dsl/opts.rb +5 -1
  29. data/lib/eye/dsl/validation.rb +2 -2
  30. data/lib/eye/group/chain.rb +2 -2
  31. data/lib/eye/notify.rb +3 -3
  32. data/lib/eye/process.rb +7 -7
  33. data/lib/eye/process/children.rb +60 -0
  34. data/lib/eye/process/commands.rb +40 -37
  35. data/lib/eye/process/config.rb +5 -5
  36. data/lib/eye/process/controller.rb +8 -8
  37. data/lib/eye/process/data.rb +4 -4
  38. data/lib/eye/process/monitor.rb +17 -17
  39. data/lib/eye/process/scheduler.rb +1 -1
  40. data/lib/eye/process/states.rb +3 -3
  41. data/lib/eye/process/system.rb +3 -3
  42. data/lib/eye/process/validate.rb +1 -1
  43. data/lib/eye/process/watchers.rb +6 -6
  44. data/lib/eye/server.rb +1 -1
  45. data/lib/eye/system.rb +4 -4
  46. data/lib/eye/system_resources.rb +3 -3
  47. data/lib/eye/trigger.rb +4 -6
  48. data/lib/eye/trigger/flapping.rb +2 -2
  49. data/lib/eye/trigger/stop_children.rb +14 -0
  50. metadata +4 -4
  51. data/lib/eye/process/child.rb +0 -60
  52. data/lib/eye/trigger/stop_childs.rb +0 -10
@@ -61,8 +61,8 @@ class Eye::Process
61
61
  after_transition any-:up => :up, :do => :add_watchers
62
62
  after_transition :up => any-:up, :do => :remove_watchers
63
63
 
64
- after_transition any-:up => :up, :do => :add_childs
65
- after_transition any => [:unmonitored, :down], :do => :remove_childs
64
+ after_transition any-:up => :up, :do => :add_children
65
+ after_transition any => [:unmonitored, :down], :do => :remove_children
66
66
 
67
67
  after_transition :on => :crashed, :do => :on_crashed
68
68
  end
@@ -80,4 +80,4 @@ class Eye::Process
80
80
  info "switch :#{transition.event} [:#{transition.from_name} => :#{transition.to_name}] #{@state_reason ? "(reason: #{@state_reason})" : nil}"
81
81
  end
82
82
 
83
- end
83
+ end
@@ -36,9 +36,9 @@ module Eye::Process::System
36
36
  File.ctime(self[:pid_file_ex]) rescue Time.now
37
37
  end
38
38
 
39
- def process_realy_running?
39
+ def process_really_running?
40
40
  res = Eye::System.check_pid_alive(self.pid)
41
- debug "process_realy_running?: (#{self.pid}) #{res.inspect}"
41
+ debug "process_really_running?: (#{self.pid}) #{res.inspect}"
42
42
  !!res[:result]
43
43
  end
44
44
 
@@ -90,4 +90,4 @@ module Eye::Process::System
90
90
  false
91
91
  end
92
92
 
93
- end
93
+ end
@@ -12,7 +12,7 @@ module Eye::Process::Validate
12
12
 
13
13
  if config[:daemonize]
14
14
  if spl =~ %r[sh#\-c|#&&#|;#]
15
- raise Error, "#{config[:name]}, start_command in daemonize not supported shell concats like '&&'"
15
+ raise Error, "#{config[:name]}, daemonize does not support concats like '&&' in start_command"
16
16
  end
17
17
  end
18
18
  end
@@ -11,17 +11,17 @@ module Eye::Process::Watchers
11
11
  check_alive
12
12
  end
13
13
 
14
- # monitor childs pids
14
+ # monitor children pids
15
15
  if self[:monitor_children]
16
- add_watcher(:check_childs, self[:childs_update_period]) do
17
- add_or_update_childs
16
+ add_watcher(:check_children, self[:children_update_period]) do
17
+ add_or_update_children
18
18
  end
19
19
  end
20
20
 
21
21
  # monitor conditional watchers
22
22
  start_checkers
23
23
  else
24
- warn 'try add_watchers, but its already here'
24
+ warn 'add_watchers failed, watchers are already present'
25
25
  end
26
26
  end
27
27
 
@@ -35,7 +35,7 @@ private
35
35
  def add_watcher(type, period = 2, subject = nil, &block)
36
36
  return if @watchers[type]
37
37
 
38
- debug "add watcher #{type}(#{period})"
38
+ debug "adding watcher: #{type}(#{period})"
39
39
 
40
40
  timer = every(period.to_f) do
41
41
  debug "check #{type}"
@@ -69,4 +69,4 @@ private
69
69
  end
70
70
  end
71
71
 
72
- end
72
+ end
@@ -26,7 +26,7 @@ class Eye::Server
26
26
  begin
27
27
  command, *args = Marshal.load(text)
28
28
  rescue => ex
29
- error "Failed socket read #{ex.message}"
29
+ error "Failed to read from socket: #{ex.message}"
30
30
  return
31
31
  end
32
32
 
@@ -4,7 +4,7 @@ require 'etc'
4
4
 
5
5
  module Eye::System
6
6
  class << self
7
- # Check that pid realy exits
7
+ # Check that pid really exits
8
8
  # very fast
9
9
  # return result hash
10
10
  def check_pid_alive(pid)
@@ -19,7 +19,7 @@ module Eye::System
19
19
  {:error => ex}
20
20
  end
21
21
 
22
- # Check that pid realy exits
22
+ # Check that pid really exits
23
23
  # very fast
24
24
  # return true/false
25
25
  def pid_alive?(pid)
@@ -86,7 +86,7 @@ module Eye::System
86
86
 
87
87
  rescue Timeout::Error => ex
88
88
  if pid
89
- warn "[#{cfg[:name]}] send signal 9 to #{pid} (because of timeouted<#{timeout}> execution)"
89
+ warn "[#{cfg[:name]}] sending :KILL signal to <#{pid}> due to timeout (#{timeout}s)"
90
90
  send_signal(pid, 9)
91
91
  end
92
92
  {:error => ex}
@@ -132,4 +132,4 @@ module Eye::System
132
132
  end
133
133
  end
134
134
 
135
- end
135
+ end
@@ -15,8 +15,8 @@ class Eye::SystemResources
15
15
  end
16
16
  end
17
17
 
18
- def childs(parent_pid)
19
- cache.childs(parent_pid)
18
+ def children(parent_pid)
19
+ cache.children(parent_pid)
20
20
  end
21
21
 
22
22
  def start_time(pid) # unixtime
@@ -79,7 +79,7 @@ class Eye::SystemResources
79
79
  rescue ArgumentError # when incorrect PID
80
80
  end
81
81
 
82
- def childs(pid)
82
+ def children(pid)
83
83
  if pid
84
84
  @ppids[pid] ||= Eye::Sigar.proc_list("State.Ppid.eq=#{pid}")
85
85
  else
@@ -3,11 +3,9 @@ class Eye::Trigger
3
3
 
4
4
  autoload :Flapping, 'eye/trigger/flapping'
5
5
  autoload :Transition, 'eye/trigger/transition'
6
- autoload :StopChilds, 'eye/trigger/stop_childs'
6
+ autoload :StopChildren, 'eye/trigger/stop_children'
7
7
 
8
- # ex: { :type => :flapping, :times => 2, :within => 30.seconds}
9
-
10
- TYPES = {:flapping => 'Flapping', :transition => 'Transition', :stop_childs => 'StopChilds'}
8
+ TYPES = {:flapping => 'Flapping', :transition => 'Transition', :stop_children => 'StopChildren'}
11
9
 
12
10
  attr_reader :message, :options, :process
13
11
 
@@ -23,7 +21,7 @@ class Eye::Trigger
23
21
 
24
22
  def self.get_class(type)
25
23
  klass = eval("Eye::Trigger::#{TYPES[type]}") rescue nil
26
- raise "Unknown trigger #{type}" unless klass
24
+ raise "unknown trigger #{type}" unless klass
27
25
  if deps = klass.depends_on
28
26
  Array(deps).each { |d| require d }
29
27
  end
@@ -86,7 +84,7 @@ class Eye::Trigger
86
84
  end
87
85
 
88
86
  def check(transition)
89
- raise 'realize me'
87
+ raise NotImplementedError
90
88
  end
91
89
 
92
90
  def run_in_process_context(p)
@@ -1,7 +1,7 @@
1
1
  class Eye::Trigger::Flapping < Eye::Trigger
2
2
 
3
- # triggers :flapping, :times => 10, :within => 1.minute,
4
- # :retry_in => 10.minutes, :retry_times => 15
3
+ # trigger :flapping, :times => 10, :within => 1.minute,
4
+ # :retry_in => 10.minutes, :retry_times => 15
5
5
 
6
6
  param :times, [Fixnum], true, 5
7
7
  param :within, [Float, Fixnum], true
@@ -0,0 +1,14 @@
1
+ class Eye::Trigger::StopChildren < Eye::Trigger
2
+
3
+ # Kill process children when parent process crashed, or stopped:
4
+ #
5
+ # trigger :stop_children, :event => [:stopped, :crashed]
6
+
7
+ param :timeout, [Fixnum, Float], nil, 60
8
+
9
+ def check(trans)
10
+ debug 'stopping children'
11
+ process.children.pmap { |pid, c| c.stop }
12
+ end
13
+
14
+ end
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.1
4
+ version: 0.5.2
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-01-18 00:00:00.000000000 Z
11
+ date: 2014-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: celluloid
@@ -343,7 +343,7 @@ files:
343
343
  - lib/eye/notify/jabber.rb
344
344
  - lib/eye/notify/mail.rb
345
345
  - lib/eye/process.rb
346
- - lib/eye/process/child.rb
346
+ - lib/eye/process/children.rb
347
347
  - lib/eye/process/commands.rb
348
348
  - lib/eye/process/config.rb
349
349
  - lib/eye/process/controller.rb
@@ -364,7 +364,7 @@ files:
364
364
  - lib/eye/system_resources.rb
365
365
  - lib/eye/trigger.rb
366
366
  - lib/eye/trigger/flapping.rb
367
- - lib/eye/trigger/stop_childs.rb
367
+ - lib/eye/trigger/stop_children.rb
368
368
  - lib/eye/trigger/transition.rb
369
369
  - lib/eye/utils.rb
370
370
  - lib/eye/utils/alive_array.rb
@@ -1,60 +0,0 @@
1
- module Eye::Process::Child
2
-
3
- def add_childs
4
- add_or_update_childs
5
- end
6
-
7
- def add_or_update_childs
8
- return unless self[:monitor_children]
9
- return unless self.up?
10
- return if @updating_childs
11
- @updating_childs = true
12
-
13
- unless self.pid
14
- warn 'Cant add childs, because no pid'
15
- return
16
- end
17
-
18
- now_childs = Eye::SystemResources.childs(self.pid)
19
- new_childs = []
20
- exist_childs = []
21
-
22
- now_childs.each do |child_pid|
23
- if self.childs[child_pid]
24
- exist_childs << child_pid
25
- else
26
- new_childs << child_pid
27
- end
28
- end
29
-
30
- removed_childs = self.childs.keys - now_childs
31
-
32
- if new_childs.present?
33
- new_childs.each do |child_pid|
34
- self.childs[child_pid] = Eye::ChildProcess.new(child_pid, self[:monitor_children], logger.prefix)
35
- end
36
- end
37
-
38
- if removed_childs.present?
39
- removed_childs.each{|child_pid| remove_child(child_pid) }
40
- end
41
-
42
- h = {:new => new_childs.size, :removed => removed_childs.size, :exists => exist_childs.size }
43
- debug "childs info: #{ h.inspect }"
44
-
45
- @updating_childs = false
46
- h
47
- end
48
-
49
- def remove_childs
50
- if childs.present?
51
- childs.keys.each{|child_pid| remove_child(child_pid) }
52
- end
53
- end
54
-
55
- def remove_child(child_pid)
56
- child = self.childs.delete(child_pid)
57
- child.destroy if child && child.alive?
58
- end
59
-
60
- end
@@ -1,10 +0,0 @@
1
- class Eye::Trigger::StopChilds < Eye::Trigger
2
-
3
- param :timeout, [Fixnum, Float], nil, 60
4
-
5
- def check(trans)
6
- debug 'stop childs'
7
- process.childs.pmap { |pid, c| c.stop }
8
- end
9
-
10
- end