eye 0.8.celluloid15 → 0.8.pre

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/.travis.yml +3 -5
  3. data/CHANGES.md +3 -7
  4. data/README.md +2 -5
  5. data/Rakefile +6 -6
  6. data/bin/leye +4 -9
  7. data/bin/loader_eye +15 -14
  8. data/examples/delayed_job.eye +3 -3
  9. data/examples/dependency.eye +11 -10
  10. data/examples/notify.eye +4 -3
  11. data/examples/plugin/main.eye +5 -5
  12. data/examples/plugin/plugin.rb +2 -10
  13. data/examples/process_thin.rb +8 -8
  14. data/examples/processes/em.rb +12 -18
  15. data/examples/processes/forking.rb +5 -5
  16. data/examples/processes/sample.rb +44 -46
  17. data/examples/puma.eye +8 -9
  18. data/examples/rbenv.eye +5 -5
  19. data/examples/sidekiq.eye +3 -3
  20. data/examples/stress_test.eye +4 -4
  21. data/examples/syslog.eye +1 -1
  22. data/examples/test.eye +2 -1
  23. data/examples/thin-farm.eye +8 -7
  24. data/examples/triggers.eye +15 -13
  25. data/examples/unicorn.eye +13 -12
  26. data/eye.gemspec +14 -16
  27. data/lib/eye.rb +3 -2
  28. data/lib/eye/application.rb +6 -5
  29. data/lib/eye/checker.rb +25 -44
  30. data/lib/eye/checker/children_count.rb +1 -1
  31. data/lib/eye/checker/file_ctime.rb +1 -1
  32. data/lib/eye/checker/http.rb +15 -13
  33. data/lib/eye/checker/nop.rb +0 -1
  34. data/lib/eye/checker/socket.rb +63 -60
  35. data/lib/eye/checker/ssl_socket.rb +5 -5
  36. data/lib/eye/child_process.rb +4 -6
  37. data/lib/eye/cli.rb +46 -74
  38. data/lib/eye/cli/commands.rb +5 -4
  39. data/lib/eye/cli/render.rb +41 -61
  40. data/lib/eye/cli/server.rb +16 -19
  41. data/lib/eye/client.rb +0 -1
  42. data/lib/eye/config.rb +33 -36
  43. data/lib/eye/controller.rb +3 -2
  44. data/lib/eye/controller/commands.rb +1 -1
  45. data/lib/eye/controller/helpers.rb +2 -2
  46. data/lib/eye/controller/load.rb +17 -19
  47. data/lib/eye/controller/options.rb +5 -1
  48. data/lib/eye/controller/send_command.rb +23 -21
  49. data/lib/eye/controller/status.rb +15 -17
  50. data/lib/eye/dsl.rb +1 -6
  51. data/lib/eye/dsl/application_opts.rb +3 -4
  52. data/lib/eye/dsl/chain.rb +2 -2
  53. data/lib/eye/dsl/child_process_opts.rb +3 -3
  54. data/lib/eye/dsl/config_opts.rb +7 -7
  55. data/lib/eye/dsl/group_opts.rb +3 -3
  56. data/lib/eye/dsl/helpers.rb +1 -1
  57. data/lib/eye/dsl/main.rb +3 -4
  58. data/lib/eye/dsl/opts.rb +28 -31
  59. data/lib/eye/dsl/process_opts.rb +7 -13
  60. data/lib/eye/dsl/pure_opts.rb +9 -13
  61. data/lib/eye/dsl/validation.rb +35 -48
  62. data/lib/eye/group.rb +8 -23
  63. data/lib/eye/group/chain.rb +6 -6
  64. data/lib/eye/loader.rb +3 -3
  65. data/lib/eye/local.rb +4 -9
  66. data/lib/eye/logger.rb +4 -11
  67. data/lib/eye/notify.rb +6 -10
  68. data/lib/eye/notify/jabber.rb +1 -1
  69. data/lib/eye/notify/mail.rb +2 -2
  70. data/lib/eye/notify/slack.rb +3 -4
  71. data/lib/eye/process.rb +0 -2
  72. data/lib/eye/process/children.rb +4 -4
  73. data/lib/eye/process/commands.rb +39 -38
  74. data/lib/eye/process/config.rb +16 -22
  75. data/lib/eye/process/controller.rb +19 -5
  76. data/lib/eye/process/data.rb +9 -11
  77. data/lib/eye/process/monitor.rb +76 -86
  78. data/lib/eye/process/notify.rb +10 -10
  79. data/lib/eye/process/scheduler.rb +31 -36
  80. data/lib/eye/process/states.rb +5 -7
  81. data/lib/eye/process/states_history.rb +3 -9
  82. data/lib/eye/process/system.rb +20 -35
  83. data/lib/eye/process/trigger.rb +5 -1
  84. data/lib/eye/process/watchers.rb +9 -12
  85. data/lib/eye/reason.rb +1 -4
  86. data/lib/eye/server.rb +1 -2
  87. data/lib/eye/system.rb +15 -22
  88. data/lib/eye/system_resources.rb +9 -18
  89. data/lib/eye/trigger.rb +16 -18
  90. data/lib/eye/trigger/check_dependency.rb +4 -7
  91. data/lib/eye/trigger/flapping.rb +7 -24
  92. data/lib/eye/trigger/starting_guard.rb +6 -7
  93. data/lib/eye/trigger/stop_children.rb +2 -2
  94. data/lib/eye/trigger/transition.rb +1 -1
  95. data/lib/eye/trigger/wait_dependency.rb +2 -3
  96. data/lib/eye/utils.rb +3 -4
  97. data/lib/eye/utils/alive_array.rb +4 -9
  98. data/lib/eye/utils/celluloid_chain.rb +10 -12
  99. data/lib/eye/utils/leak_19.rb +10 -0
  100. data/lib/eye/utils/mini_active_support.rb +16 -16
  101. data/lib/eye/utils/pmap.rb +0 -2
  102. data/lib/eye/utils/tail.rb +2 -2
  103. metadata +8 -39
  104. data/.rubocop.yml +0 -141
  105. data/examples/custom_check.eye +0 -24
  106. data/examples/custom_trigger.eye +0 -30
  107. data/examples/leye_example/Eyefile +0 -10
@@ -0,0 +1,10 @@
1
+ # http://stackoverflow.com/questions/7263268/ruby-symbolto-proc-leaks-references-in-1-9-2-p180
2
+
3
+ unless defined?(SimpleCov) # simplecov somehow crashed with this
4
+
5
+ class Symbol
6
+ def to_proc
7
+ lambda { |x| x.send(self) }
8
+ end
9
+ end
10
+ 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_method :percent, :percents
56
+ alias :percent :percents
57
57
 
58
58
  def seconds
59
59
  self
60
60
  end
61
- alias_method :second, :seconds
61
+ alias :second :seconds
62
62
 
63
63
  def minutes
64
64
  self * 60
65
65
  end
66
- alias_method :minute, :minutes
66
+ alias :minute :minutes
67
67
 
68
68
  def hours
69
69
  self * 3600
70
70
  end
71
- alias_method :hour, :hours
71
+ alias :hour :hours
72
72
 
73
73
  def days
74
- self * 86_400
74
+ self * 86400
75
75
  end
76
- alias_method :day, :days
76
+ alias :day :days
77
77
 
78
78
  def weeks
79
- self * 86_400 * 7
79
+ self * 86400 * 7
80
80
  end
81
- alias_method :week, :weeks
81
+ alias :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_method :byte, :bytes
90
+ alias :byte :bytes
91
91
 
92
92
  def kilobytes
93
93
  self * 1024
94
94
  end
95
- alias_method :kilobyte, :kilobytes
95
+ alias :kilobyte :kilobytes
96
96
 
97
97
  def megabytes
98
98
  self * 1024 * 1024
99
99
  end
100
- alias_method :megabyte, :megabytes
100
+ alias :megabyte :megabytes
101
101
 
102
102
  def gigabytes
103
103
  self * 1024 * 1024 * 1024
104
104
  end
105
- alias_method :gigabyte, :gigabytes
105
+ alias :gigabyte :gigabytes
106
106
 
107
107
  def terabytes
108
108
  self * 1024 * 1024 * 1024 * 1024
109
109
  end
110
- alias_method :terabyte, :terabytes
110
+ alias :terabyte :terabytes
111
111
  end
@@ -1,8 +1,6 @@
1
1
  module Enumerable
2
-
3
2
  # Simple parallel map using Celluloid::Futures
4
3
  def pmap(&block)
5
4
  map { |elem| Celluloid::Future.new(elem, &block) }.map(&:value)
6
5
  end
7
-
8
6
  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.8.celluloid15
4
+ version: 0.8.pre
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-11-22 00:00:00.000000000 Z
11
+ date: 2015-09-14 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.15.0
19
+ version: 0.17.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.15.0
26
+ version: 0.17.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.15.0
33
+ version: 0.17.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.15.0
40
+ version: 0.17.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: state_machine
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -248,20 +248,6 @@ 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
265
251
  - !ruby/object:Gem::Dependency
266
252
  name: simplecov
267
253
  requirement: !ruby/object:Gem::Requirement
@@ -304,20 +290,6 @@ dependencies:
304
290
  - - ">="
305
291
  - !ruby/object:Gem::Version
306
292
  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'
321
293
  description: Process monitoring tool. Inspired from Bluepill and God. Requires Ruby(MRI)
322
294
  >= 1.9.3-p194. Uses Celluloid and Celluloid::IO.
323
295
  email: eye-rb@googlegroups.com
@@ -330,7 +302,6 @@ extra_rdoc_files: []
330
302
  files:
331
303
  - ".gitignore"
332
304
  - ".rspec"
333
- - ".rubocop.yml"
334
305
  - ".travis.yml"
335
306
  - CHANGES.md
336
307
  - Gemfile
@@ -340,11 +311,8 @@ files:
340
311
  - bin/eye
341
312
  - bin/leye
342
313
  - bin/loader_eye
343
- - examples/custom_check.eye
344
- - examples/custom_trigger.eye
345
314
  - examples/delayed_job.eye
346
315
  - examples/dependency.eye
347
- - examples/leye_example/Eyefile
348
316
  - examples/notify.eye
349
317
  - examples/plugin/README.md
350
318
  - examples/plugin/main.eye
@@ -446,6 +414,7 @@ files:
446
414
  - lib/eye/utils.rb
447
415
  - lib/eye/utils/alive_array.rb
448
416
  - lib/eye/utils/celluloid_chain.rb
417
+ - lib/eye/utils/leak_19.rb
449
418
  - lib/eye/utils/mini_active_support.rb
450
419
  - lib/eye/utils/pmap.rb
451
420
  - lib/eye/utils/tail.rb
@@ -469,7 +438,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
469
438
  version: 1.3.6
470
439
  requirements: []
471
440
  rubyforge_project:
472
- rubygems_version: 2.4.5
441
+ rubygems_version: 2.4.7
473
442
  signing_key:
474
443
  specification_version: 4
475
444
  summary: Process monitoring tool. Inspired from Bluepill and God. Requires Ruby(MRI)
@@ -1,141 +0,0 @@
1
- AllCops:
2
- Include:
3
- - '**/*.eye'
4
- Exclude:
5
- - 'spec/**/*'
6
- - 'lib/eye/utils/mini_active_support.rb'
7
-
8
- Style/ClassAndModuleChildren:
9
- EnforcedStyle: compact
10
-
11
- Style/EmptyLinesAroundClassBody:
12
- EnforcedStyle: empty_lines
13
-
14
- Style/EmptyLinesAroundModuleBody:
15
- EnforcedStyle: empty_lines
16
- Exclude:
17
- - 'lib/eye.rb'
18
-
19
- Style/RegexpLiteral:
20
- EnforcedStyle: percent_r
21
- Exclude:
22
- - 'examples/**/*'
23
-
24
- Style/AccessModifierIndentation:
25
- EnforcedStyle: outdent
26
-
27
- Lint/EndAlignment:
28
- AlignWith: variable
29
-
30
- Style/IndentHash:
31
- EnforcedStyle: consistent
32
-
33
- Style/Lambda:
34
- Exclude:
35
- - 'examples/**/*'
36
-
37
- Style/BlockDelimiters:
38
- Exclude:
39
- - 'examples/**/*'
40
-
41
- Style/CaseIndentation:
42
- IndentOneStep: true
43
- IndentWhenRelativeTo: end
44
-
45
- Style/HashSyntax:
46
- Exclude:
47
- - 'lib/eye/process/states.rb'
48
-
49
- Style/RaiseArgs:
50
- EnforcedStyle: exploded
51
-
52
- Style/PercentLiteralDelimiters:
53
- PreferredDelimiters:
54
- '%w': '[]'
55
- '%r': '[]'
56
- '%': '{}'
57
-
58
- Metrics/LineLength:
59
- Max: 142
60
-
61
- Metrics/PerceivedComplexity:
62
- Max: 15
63
- Exclude:
64
- - 'lib/eye/cli/render.rb'
65
-
66
- Metrics/BlockNesting:
67
- Max: 3
68
- Exclude:
69
- - 'lib/eye/trigger/starting_guard.rb'
70
-
71
- Metrics/MethodLength:
72
- Max: 45
73
-
74
- Metrics/CyclomaticComplexity:
75
- Max: 19
76
-
77
- Metrics/ClassLength:
78
- Max: 200
79
-
80
- Metrics/ModuleLength:
81
- Max: 200
82
- Exclude:
83
- - 'lib/eye/process/commands.rb'
84
-
85
- Metrics/AbcSize:
86
- Max: 60
87
-
88
- Style/GuardClause:
89
- MinBodyLength: 10
90
-
91
- Style/IfUnlessModifier:
92
- MaxLineLength: 50
93
-
94
- Lint/RescueException:
95
- Exclude:
96
- - 'lib/eye/checker/socket.rb'
97
- - 'lib/eye/controller/load.rb'
98
- - 'lib/eye/logger.rb'
99
-
100
- Style/RedundantSelf:
101
- Exclude:
102
- - 'lib/eye/process/**/*' # self.pid is nicer
103
-
104
- Style/SignalException:
105
- EnforcedStyle: only_raise
106
-
107
- Style/Documentation:
108
- Enabled: false
109
-
110
- Style/DoubleNegation:
111
- Enabled: false
112
-
113
- Lint/Eval:
114
- Enabled: false
115
-
116
- Lint/Void:
117
- Exclude:
118
- - Rakefile
119
- - bin/loader_eye
120
- - lib/eye/controller.rb
121
-
122
- Lint/AssignmentInCondition:
123
- Enabled: false
124
-
125
- Style/AccessorMethodName:
126
- Enabled: false
127
-
128
- Style/SpecialGlobalVars:
129
- Enabled: false
130
-
131
- Style/RescueModifier:
132
- Enabled: false
133
-
134
- Lint/HandleExceptions:
135
- Enabled: false
136
-
137
- Lint/LiteralInInterpolation:
138
- Exclude:
139
- - 'lib/eye/notify/jabber.rb'
140
- - 'lib/eye/notify/slack.rb'
141
- - 'lib/eye/process/commands.rb'
@@ -1,24 +0,0 @@
1
- # This example shows how to write custom checks:
2
- # We check process procline every 1.second, and if it matches `haha`
3
- # send TERM signal
4
-
5
- class MyCheck < Eye::Checker::Custom
6
-
7
- def get_value
8
- Eye::SystemResources.args(@pid)
9
- end
10
-
11
- def good?(value)
12
- !(value =~ /haha/)
13
- end
14
-
15
- end
16
-
17
- Eye.app :bla do
18
- process :a do
19
- start_command "ruby -e 'sleep 10; $0 = %{HAHA}.downcase; sleep'"
20
- daemonize true
21
- pid_file '/tmp/1.pid'
22
- check :my_check, every: 1.second, fires: -> { send_signal(:TERM) }
23
- end
24
- end
@@ -1,30 +0,0 @@
1
- # send notify when many times crashed process, finally resolved
2
-
3
- class Eye::Trigger::FixCrash < Eye::Trigger::Custom
4
-
5
- param :times, Fixnum, nil, 1
6
- param_default :to, :up
7
-
8
- def check(_)
9
- # process states here like this: [..., :starting, :down, :starting, :down, :starting, :up]
10
- states = process.states_history.states
11
-
12
- # states to compare with
13
- compare = [:starting, :down] * times + [:starting, :up]
14
-
15
- if states[-compare.length..-1] == compare
16
- process.notify(:info, 'yahho, process up')
17
- end
18
- end
19
-
20
- end
21
-
22
- Eye.app :custom_trigger do
23
- trigger :fix_crash
24
-
25
- process :some do
26
- pid_file '/tmp/custom_trigger_some.pid'
27
- start_command "ruby -e 's = `cat /tmp/bla`; exit(1) unless s =~ /bla/; loop { sleep 1 } '"
28
- daemonize!
29
- end
30
- end
@@ -1,10 +0,0 @@
1
-
2
- Eye.application :test_leye do
3
- 5.times do |i|
4
- process "test-#{i}" do
5
- start_command "sleep 200"
6
- daemonize!
7
- pid_file "#{i}.pid"
8
- end
9
- end
10
- end