eye 0.7 → 0.8.celluloid15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +141 -0
  3. data/.travis.yml +5 -3
  4. data/CHANGES.md +9 -1
  5. data/README.md +5 -2
  6. data/Rakefile +6 -6
  7. data/bin/leye +9 -4
  8. data/bin/loader_eye +14 -15
  9. data/examples/custom_check.eye +24 -0
  10. data/examples/custom_trigger.eye +30 -0
  11. data/examples/delayed_job.eye +3 -3
  12. data/examples/dependency.eye +10 -11
  13. data/examples/leye_example/Eyefile +10 -0
  14. data/examples/notify.eye +3 -4
  15. data/examples/plugin/main.eye +5 -5
  16. data/examples/plugin/plugin.rb +10 -2
  17. data/examples/process_thin.rb +8 -8
  18. data/examples/processes/em.rb +18 -12
  19. data/examples/processes/forking.rb +5 -5
  20. data/examples/processes/sample.rb +46 -44
  21. data/examples/puma.eye +9 -8
  22. data/examples/rbenv.eye +5 -5
  23. data/examples/sidekiq.eye +3 -3
  24. data/examples/stress_test.eye +4 -4
  25. data/examples/syslog.eye +1 -1
  26. data/examples/test.eye +1 -2
  27. data/examples/thin-farm.eye +7 -8
  28. data/examples/triggers.eye +13 -15
  29. data/examples/unicorn.eye +12 -13
  30. data/eye.gemspec +16 -14
  31. data/lib/eye.rb +2 -3
  32. data/lib/eye/application.rb +5 -6
  33. data/lib/eye/checker.rb +44 -25
  34. data/lib/eye/checker/children_count.rb +1 -1
  35. data/lib/eye/checker/file_ctime.rb +1 -1
  36. data/lib/eye/checker/http.rb +13 -15
  37. data/lib/eye/checker/nop.rb +1 -0
  38. data/lib/eye/checker/socket.rb +60 -63
  39. data/lib/eye/checker/ssl_socket.rb +5 -5
  40. data/lib/eye/child_process.rb +6 -4
  41. data/lib/eye/cli.rb +74 -46
  42. data/lib/eye/cli/commands.rb +4 -5
  43. data/lib/eye/cli/render.rb +61 -41
  44. data/lib/eye/cli/server.rb +19 -16
  45. data/lib/eye/client.rb +1 -0
  46. data/lib/eye/config.rb +36 -33
  47. data/lib/eye/controller.rb +2 -3
  48. data/lib/eye/controller/commands.rb +1 -1
  49. data/lib/eye/controller/helpers.rb +2 -2
  50. data/lib/eye/controller/load.rb +19 -17
  51. data/lib/eye/controller/options.rb +1 -5
  52. data/lib/eye/controller/send_command.rb +21 -23
  53. data/lib/eye/controller/status.rb +17 -14
  54. data/lib/eye/dsl.rb +6 -1
  55. data/lib/eye/dsl/application_opts.rb +4 -3
  56. data/lib/eye/dsl/chain.rb +2 -2
  57. data/lib/eye/dsl/child_process_opts.rb +3 -3
  58. data/lib/eye/dsl/config_opts.rb +7 -7
  59. data/lib/eye/dsl/group_opts.rb +3 -3
  60. data/lib/eye/dsl/helpers.rb +1 -1
  61. data/lib/eye/dsl/main.rb +4 -3
  62. data/lib/eye/dsl/opts.rb +31 -28
  63. data/lib/eye/dsl/process_opts.rb +13 -7
  64. data/lib/eye/dsl/pure_opts.rb +13 -9
  65. data/lib/eye/dsl/validation.rb +48 -35
  66. data/lib/eye/group.rb +23 -8
  67. data/lib/eye/group/chain.rb +6 -6
  68. data/lib/eye/loader.rb +3 -3
  69. data/lib/eye/local.rb +9 -4
  70. data/lib/eye/logger.rb +11 -4
  71. data/lib/eye/notify.rb +10 -6
  72. data/lib/eye/notify/jabber.rb +1 -1
  73. data/lib/eye/notify/mail.rb +2 -2
  74. data/lib/eye/notify/slack.rb +4 -3
  75. data/lib/eye/process.rb +2 -0
  76. data/lib/eye/process/children.rb +4 -4
  77. data/lib/eye/process/commands.rb +38 -39
  78. data/lib/eye/process/config.rb +22 -16
  79. data/lib/eye/process/controller.rb +5 -19
  80. data/lib/eye/process/data.rb +11 -9
  81. data/lib/eye/process/monitor.rb +86 -76
  82. data/lib/eye/process/notify.rb +10 -10
  83. data/lib/eye/process/scheduler.rb +36 -31
  84. data/lib/eye/process/states.rb +7 -5
  85. data/lib/eye/process/states_history.rb +9 -3
  86. data/lib/eye/process/system.rb +35 -20
  87. data/lib/eye/process/trigger.rb +1 -5
  88. data/lib/eye/process/watchers.rb +12 -9
  89. data/lib/eye/reason.rb +4 -1
  90. data/lib/eye/server.rb +3 -2
  91. data/lib/eye/system.rb +22 -15
  92. data/lib/eye/system_resources.rb +17 -8
  93. data/lib/eye/trigger.rb +18 -16
  94. data/lib/eye/trigger/check_dependency.rb +7 -4
  95. data/lib/eye/trigger/flapping.rb +24 -7
  96. data/lib/eye/trigger/starting_guard.rb +7 -6
  97. data/lib/eye/trigger/stop_children.rb +2 -2
  98. data/lib/eye/trigger/transition.rb +1 -1
  99. data/lib/eye/trigger/wait_dependency.rb +3 -2
  100. data/lib/eye/utils.rb +4 -3
  101. data/lib/eye/utils/alive_array.rb +9 -4
  102. data/lib/eye/utils/celluloid_chain.rb +12 -10
  103. data/lib/eye/utils/mini_active_support.rb +16 -16
  104. data/lib/eye/utils/pmap.rb +2 -0
  105. data/lib/eye/utils/tail.rb +2 -2
  106. metadata +39 -8
  107. data/lib/eye/utils/leak_19.rb +0 -10
@@ -33,32 +33,33 @@ class Eye::Trigger::StartingGuard < Eye::Trigger
33
33
  @reretry_count = 0
34
34
  return
35
35
  else
36
- info "false executed condition"
36
+ info 'false executed condition'
37
37
  end
38
38
 
39
39
  new_time = nil
40
40
  if every
41
41
  if times
42
- if (@retry_count < times)
42
+ if @retry_count < times
43
43
  new_time = Time.now + every
44
- process.schedule_in every, :conditional_start, Eye::Reason::StartingGuard.new("starting_guard, retry start")
44
+ process.schedule_in every, :conditional_start, Eye::Reason::StartingGuard.new('starting_guard, retry start')
45
45
  else
46
46
  @retry_count = 0
47
47
  @reretry_count += 1
48
48
  if retry_in && (!retry_times || (@reretry_count < retry_times))
49
49
  new_time = Time.now + retry_in
50
- process.schedule_in retry_in, :conditional_start, Eye::Reason::StartingGuard.new("starting_guard, reretry start")
50
+ process.schedule_in retry_in, :conditional_start, Eye::Reason::StartingGuard.new('starting_guard, reretry start')
51
51
  end
52
52
  end
53
53
  else
54
54
  new_time = Time.now + every
55
- process.schedule_in every, :conditional_start, Eye::Reason::StartingGuard.new("starting_guard, retry start")
55
+ process.schedule_in every, :conditional_start, Eye::Reason::StartingGuard.new('starting_guard, retry start')
56
56
  end
57
57
  end
58
58
 
59
59
  retry_msg = new_time ? ", retry at '#{Eye::Utils.human_time2(new_time.to_i)}'" : ''
60
60
  process.switch :unmonitoring, Eye::Reason::StartingGuard.new("starting_guard, failed condition#{retry_msg}")
61
61
 
62
- raise Eye::Process::StateError.new("starting_guard, refused to start")
62
+ raise Eye::Process::StateError, 'starting_guard, refused to start'
63
63
  end
64
+
64
65
  end
@@ -9,9 +9,9 @@ class Eye::Trigger::StopChildren < Eye::Trigger
9
9
  # default on stopped, crashed
10
10
  param_default :event, [:stopped, :crashed]
11
11
 
12
- def check(trans)
12
+ def check(_trans)
13
13
  debug { 'stopping children' }
14
- process.children.pmap { |pid, c| c.stop }
14
+ process.children.pmap { |_pid, c| c.stop }
15
15
  end
16
16
 
17
17
  end
@@ -4,7 +4,7 @@ class Eye::Trigger::Transition < Eye::Trigger
4
4
 
5
5
  param :do, [Proc, Symbol]
6
6
 
7
- def check(trans)
7
+ def check(_trans)
8
8
  exec_proc :do
9
9
  end
10
10
 
@@ -1,4 +1,5 @@
1
1
  class Eye::Trigger::WaitDependency < Eye::Trigger
2
+
2
3
  param :names, [Array], true
3
4
  param :wait_timeout, [Numeric], nil, 15.seconds
4
5
  param :retry_after, [Numeric], nil, 1.minute
@@ -18,7 +19,7 @@ private
18
19
  processes = Eye::Utils::AliveArray.new(processes)
19
20
 
20
21
  processes.each do |p|
21
- if p.state_name != :up && (should_start == nil || should_start)
22
+ if p.state_name != :up && (should_start != false)
22
23
  p.schedule :start, Eye::Reason.new(:start_dependency)
23
24
  end
24
25
  end
@@ -42,7 +43,7 @@ private
42
43
  process.schedule_in retry_after, :start, Eye::Reason.new(:wait_dependency)
43
44
  end
44
45
 
45
- raise Eye::Process::StateError.new('stop transition because dependency is not up')
46
+ raise Eye::Process::StateError, 'stop transition because dependency is not up'
46
47
  end
47
48
  end
48
49
 
@@ -1,14 +1,15 @@
1
1
  require 'date'
2
2
 
3
3
  module Eye::Utils
4
+
4
5
  autoload :Tail, 'eye/utils/tail'
5
6
  autoload :AliveArray, 'eye/utils/alive_array'
6
7
  autoload :CelluloidChain, 'eye/utils/celluloid_chain'
7
8
 
8
9
  def self.deep_clone(value)
9
10
  case
10
- when value.is_a?(Array) then value.map{|v| deep_clone(v) }
11
- when value.is_a?(Hash) then value.inject({}){|r, (k, v)| r[ deep_clone(k) ] = deep_clone(v); r }
11
+ when value.is_a?(Array) then value.map { |v| deep_clone(v) }
12
+ when value.is_a?(Hash) then value.each_with_object({}) { |(k, v), r| r[deep_clone(k)] = deep_clone(v) }
12
13
  else value
13
14
  end
14
15
  end
@@ -47,7 +48,7 @@ module Eye::Utils
47
48
  env_vars = content.split("\n")
48
49
  h = {}
49
50
  env_vars.each do |e|
50
- e = e.gsub(/#.+$/, '').strip
51
+ e = e.gsub(%r[#.+$], '').strip
51
52
  next unless e.include?('=')
52
53
  k, v = e.split('=', 2)
53
54
  h[k] = v
@@ -1,20 +1,21 @@
1
1
  class Eye::Utils::AliveArray
2
+
2
3
  extend Forwardable
3
4
  include Enumerable
4
5
 
5
6
  def_delegators :@arr, :[], :<<, :clear, :delete, :size, :empty?, :push,
6
- :flatten, :present?, :uniq!, :select!
7
+ :flatten, :present?, :uniq!, :select!
7
8
 
8
9
  def initialize(arr = [])
9
10
  @arr = arr
10
11
  end
11
12
 
12
13
  def each(&block)
13
- @arr.each{|elem| elem && elem.alive? && block[elem] }
14
+ @arr.each { |elem| elem && elem.alive? && block[elem] }
14
15
  end
15
16
 
16
17
  def to_a
17
- map{|x| x }
18
+ map { |x| x }
18
19
  end
19
20
 
20
21
  def full_size
@@ -33,6 +34,10 @@ class Eye::Utils::AliveArray
33
34
  self.class.new super
34
35
  end
35
36
 
37
+ def sort!
38
+ @arr.sort!
39
+ end
40
+
36
41
  def +(other)
37
42
  if other.is_a?(Eye::Utils::AliveArray)
38
43
  @arr += other.pure
@@ -54,4 +59,4 @@ class Eye::Utils::AliveArray
54
59
  end
55
60
  end
56
61
 
57
- end
62
+ end
@@ -1,6 +1,7 @@
1
1
  require 'celluloid'
2
2
 
3
3
  class Eye::Utils::CelluloidChain
4
+
4
5
  include Celluloid
5
6
 
6
7
  def initialize(target)
@@ -10,21 +11,21 @@ class Eye::Utils::CelluloidChain
10
11
  @target_class = @target.class
11
12
  end
12
13
 
13
- def add(method_name, *args, &block)
14
- @calls << {:method_name => method_name, :args => args, :block => block}
14
+ def add(method_name, *args)
15
+ @calls << { method_name: method_name, args: args }
15
16
  ensure_process
16
17
  end
17
18
 
18
- def add_wo_dups(method_name, *args, &block)
19
- h = {:method_name => method_name, :args => args, :block => block}
19
+ def add_wo_dups(method_name, *args)
20
+ h = { method_name: method_name, args: args }
20
21
  if @calls[-1] != h
21
22
  @calls << h
22
23
  ensure_process
23
24
  end
24
25
  end
25
26
 
26
- def add_wo_dups_current(method_name, *args, &block)
27
- h = {:method_name => method_name, :args => args, :block => block}
27
+ def add_wo_dups_current(method_name, *args)
28
+ h = { method_name: method_name, args: args }
28
29
  if !@calls.include?(h) && @call != h
29
30
  @calls << h
30
31
  ensure_process
@@ -36,14 +37,14 @@ class Eye::Utils::CelluloidChain
36
37
  end
37
38
 
38
39
  def names_list
39
- list.map{|el| el[:method_name].to_sym }
40
+ list.map { |el| el[:method_name].to_sym }
40
41
  end
41
42
 
42
43
  def clear
43
44
  @calls = []
44
45
  end
45
46
 
46
- alias :clear_pending_list :clear
47
+ alias_method :clear_pending_list, :clear
47
48
 
48
49
  # need, because of https://github.com/celluloid/celluloid/issues/22
49
50
  def inspect
@@ -64,8 +65,9 @@ private
64
65
  def process
65
66
  while @call = @calls.shift
66
67
  @running = true
67
- @target.send(@call[:method_name], *@call[:args], &@call[:block]) if @target.alive?
68
+ @target.send(@call[:method_name], *@call[:args]) if @target.alive?
68
69
  end
69
70
  @running = false
70
71
  end
71
- end
72
+
73
+ end
@@ -31,9 +31,9 @@ class String
31
31
  word = self.dup
32
32
  word.gsub!('::', '/')
33
33
  word.gsub!(/(?:([A-Za-z\d])|^)((?=a)b)(?=\b|[^a-z])/) { "#{$1}#{$1 && '_'}#{$2.downcase}" }
34
- word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
35
- word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
36
- word.tr!("-", "_")
34
+ word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
35
+ word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
36
+ word.tr!('-', '_')
37
37
  word.downcase!
38
38
  word
39
39
  end
@@ -53,32 +53,32 @@ class Numeric
53
53
  def percents
54
54
  self
55
55
  end
56
- alias :percent :percents
56
+ alias_method :percent, :percents
57
57
 
58
58
  def seconds
59
59
  self
60
60
  end
61
- alias :second :seconds
61
+ alias_method :second, :seconds
62
62
 
63
63
  def minutes
64
64
  self * 60
65
65
  end
66
- alias :minute :minutes
66
+ alias_method :minute, :minutes
67
67
 
68
68
  def hours
69
69
  self * 3600
70
70
  end
71
- alias :hour :hours
71
+ alias_method :hour, :hours
72
72
 
73
73
  def days
74
- self * 86400
74
+ self * 86_400
75
75
  end
76
- alias :day :days
76
+ alias_method :day, :days
77
77
 
78
78
  def weeks
79
- self * 86400 * 7
79
+ self * 86_400 * 7
80
80
  end
81
- alias :week :weeks
81
+ alias_method :week, :weeks
82
82
 
83
83
  def ago
84
84
  ::Time.now - self
@@ -87,25 +87,25 @@ class Numeric
87
87
  def bytes
88
88
  self
89
89
  end
90
- alias :byte :bytes
90
+ alias_method :byte, :bytes
91
91
 
92
92
  def kilobytes
93
93
  self * 1024
94
94
  end
95
- alias :kilobyte :kilobytes
95
+ alias_method :kilobyte, :kilobytes
96
96
 
97
97
  def megabytes
98
98
  self * 1024 * 1024
99
99
  end
100
- alias :megabyte :megabytes
100
+ alias_method :megabyte, :megabytes
101
101
 
102
102
  def gigabytes
103
103
  self * 1024 * 1024 * 1024
104
104
  end
105
- alias :gigabyte :gigabytes
105
+ alias_method :gigabyte, :gigabytes
106
106
 
107
107
  def terabytes
108
108
  self * 1024 * 1024 * 1024 * 1024
109
109
  end
110
- alias :terabyte :terabytes
110
+ alias_method :terabyte, :terabytes
111
111
  end
@@ -1,6 +1,8 @@
1
1
  module Enumerable
2
+
2
3
  # Simple parallel map using Celluloid::Futures
3
4
  def pmap(&block)
4
5
  map { |elem| Celluloid::Future.new(elem, &block) }.map(&:value)
5
6
  end
7
+
6
8
  end
@@ -13,8 +13,8 @@ class Eye::Utils::Tail < Array
13
13
  self
14
14
  end
15
15
 
16
- def << (el)
16
+ def <<(el)
17
17
  push(el)
18
18
  end
19
19
 
20
- end
20
+ 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.7'
4
+ version: 0.8.celluloid15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Makarchev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-14 00:00:00.000000000 Z
11
+ date: 2015-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: celluloid
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.16.0
19
+ version: 0.15.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.16.0
26
+ version: 0.15.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: celluloid-io
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.16.0
33
+ version: 0.15.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.16.0
40
+ version: 0.15.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: state_machine
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -248,6 +248,20 @@ dependencies:
248
248
  - - ">="
249
249
  - !ruby/object:Gem::Version
250
250
  version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: tins
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - '='
256
+ - !ruby/object:Gem::Version
257
+ version: 1.6.0
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - '='
263
+ - !ruby/object:Gem::Version
264
+ version: 1.6.0
251
265
  - !ruby/object:Gem::Dependency
252
266
  name: simplecov
253
267
  requirement: !ruby/object:Gem::Requirement
@@ -290,6 +304,20 @@ dependencies:
290
304
  - - ">="
291
305
  - !ruby/object:Gem::Version
292
306
  version: '0'
307
+ - !ruby/object:Gem::Dependency
308
+ name: rubocop
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ type: :development
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - ">="
319
+ - !ruby/object:Gem::Version
320
+ version: '0'
293
321
  description: Process monitoring tool. Inspired from Bluepill and God. Requires Ruby(MRI)
294
322
  >= 1.9.3-p194. Uses Celluloid and Celluloid::IO.
295
323
  email: eye-rb@googlegroups.com
@@ -302,6 +330,7 @@ extra_rdoc_files: []
302
330
  files:
303
331
  - ".gitignore"
304
332
  - ".rspec"
333
+ - ".rubocop.yml"
305
334
  - ".travis.yml"
306
335
  - CHANGES.md
307
336
  - Gemfile
@@ -311,8 +340,11 @@ files:
311
340
  - bin/eye
312
341
  - bin/leye
313
342
  - bin/loader_eye
343
+ - examples/custom_check.eye
344
+ - examples/custom_trigger.eye
314
345
  - examples/delayed_job.eye
315
346
  - examples/dependency.eye
347
+ - examples/leye_example/Eyefile
316
348
  - examples/notify.eye
317
349
  - examples/plugin/README.md
318
350
  - examples/plugin/main.eye
@@ -414,7 +446,6 @@ files:
414
446
  - lib/eye/utils.rb
415
447
  - lib/eye/utils/alive_array.rb
416
448
  - lib/eye/utils/celluloid_chain.rb
417
- - lib/eye/utils/leak_19.rb
418
449
  - lib/eye/utils/mini_active_support.rb
419
450
  - lib/eye/utils/pmap.rb
420
451
  - lib/eye/utils/tail.rb
@@ -438,7 +469,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
438
469
  version: 1.3.6
439
470
  requirements: []
440
471
  rubyforge_project:
441
- rubygems_version: 2.4.7
472
+ rubygems_version: 2.4.5
442
473
  signing_key:
443
474
  specification_version: 4
444
475
  summary: Process monitoring tool. Inspired from Bluepill and God. Requires Ruby(MRI)