reel-eye 0.3.2 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.rspec +1 -1
  4. data/.travis.yml +3 -1
  5. data/CHANGES.md +11 -2
  6. data/Gemfile +1 -0
  7. data/README.md +18 -14
  8. data/Rakefile +10 -3
  9. data/bin/eye +41 -27
  10. data/examples/process_thin.rb +1 -1
  11. data/examples/processes/em.rb +2 -2
  12. data/examples/processes/forking.rb +2 -2
  13. data/examples/processes/sample.rb +5 -5
  14. data/examples/rbenv.eye +1 -1
  15. data/examples/sidekiq.eye +2 -2
  16. data/examples/test.eye +10 -6
  17. data/examples/thin-farm.eye +1 -1
  18. data/examples/unicorn.eye +1 -1
  19. data/eye.gemspec +13 -7
  20. data/lib/eye.rb +6 -6
  21. data/lib/eye/application.rb +9 -6
  22. data/lib/eye/checker.rb +51 -21
  23. data/lib/eye/checker/file_size.rb +1 -1
  24. data/lib/eye/checker/http.rb +3 -3
  25. data/lib/eye/checker/memory.rb +1 -1
  26. data/lib/eye/checker/socket.rb +6 -6
  27. data/lib/eye/child_process.rb +7 -11
  28. data/lib/eye/client.rb +6 -6
  29. data/lib/eye/config.rb +2 -2
  30. data/lib/eye/controller.rb +13 -8
  31. data/lib/eye/controller/commands.rb +9 -10
  32. data/lib/eye/controller/helpers.rb +1 -0
  33. data/lib/eye/controller/load.rb +11 -7
  34. data/lib/eye/controller/options.rb +1 -1
  35. data/lib/eye/controller/send_command.rb +44 -19
  36. data/lib/eye/controller/show_history.rb +8 -7
  37. data/lib/eye/controller/status.rb +39 -26
  38. data/lib/eye/dsl.rb +3 -3
  39. data/lib/eye/dsl/application_opts.rb +4 -4
  40. data/lib/eye/dsl/config_opts.rb +4 -4
  41. data/lib/eye/dsl/helpers.rb +2 -2
  42. data/lib/eye/dsl/main.rb +2 -2
  43. data/lib/eye/dsl/opts.rb +19 -14
  44. data/lib/eye/dsl/process_opts.rb +1 -1
  45. data/lib/eye/dsl/pure_opts.rb +2 -2
  46. data/lib/eye/dsl/validation.rb +7 -5
  47. data/lib/eye/group.rb +17 -11
  48. data/lib/eye/group/chain.rb +3 -3
  49. data/lib/eye/http.rb +1 -1
  50. data/lib/eye/http/router.rb +2 -2
  51. data/lib/eye/loader.rb +8 -7
  52. data/lib/eye/logger.rb +14 -5
  53. data/lib/eye/notify.rb +13 -7
  54. data/lib/eye/notify/jabber.rb +2 -2
  55. data/lib/eye/notify/mail.rb +2 -2
  56. data/lib/eye/process.rb +10 -13
  57. data/lib/eye/process/child.rb +1 -1
  58. data/lib/eye/process/commands.rb +34 -32
  59. data/lib/eye/process/config.rb +17 -12
  60. data/lib/eye/process/controller.rb +3 -6
  61. data/lib/eye/process/data.rb +16 -5
  62. data/lib/eye/process/monitor.rb +12 -5
  63. data/lib/eye/process/notify.rb +1 -1
  64. data/lib/eye/process/scheduler.rb +3 -3
  65. data/lib/eye/process/states.rb +10 -13
  66. data/lib/eye/process/states_history.rb +3 -3
  67. data/lib/eye/process/system.rb +17 -21
  68. data/lib/eye/process/trigger.rb +11 -30
  69. data/lib/eye/process/watchers.rb +9 -9
  70. data/lib/eye/server.rb +14 -6
  71. data/lib/eye/settings.rb +4 -4
  72. data/lib/eye/system.rb +10 -7
  73. data/lib/eye/system_resources.rb +4 -4
  74. data/lib/eye/trigger.rb +58 -21
  75. data/lib/eye/trigger/flapping.rb +24 -4
  76. data/lib/eye/trigger/state.rb +28 -0
  77. data/lib/eye/utils/alive_array.rb +1 -1
  78. data/lib/eye/utils/celluloid_klass.rb +5 -0
  79. data/lib/eye/utils/pmap.rb +7 -0
  80. data/lib/eye/utils/tail.rb +1 -1
  81. metadata +252 -271
  82. data/lib/eye/utils/leak_19.rb +0 -7
@@ -31,8 +31,8 @@ class Eye::SystemResources
31
31
  def resources(pid)
32
32
  return {} unless ps_aux[pid]
33
33
 
34
- { :memory => memory(pid),
35
- :cpu => cpu(pid),
34
+ { :memory => memory(pid),
35
+ :cpu => cpu(pid),
36
36
  :start_time => start_time(pid),
37
37
  :pid => pid
38
38
  }
@@ -42,14 +42,14 @@ class Eye::SystemResources
42
42
  def setup
43
43
  @actor ||= PsAxActor.new
44
44
  end
45
-
45
+
46
46
  private
47
47
 
48
48
  def reset!
49
49
  setup.terminate
50
50
  @actor = nil
51
51
  end
52
-
52
+
53
53
  def ps_aux
54
54
  setup
55
55
  @actor.get
data/lib/eye/trigger.rb CHANGED
@@ -1,13 +1,24 @@
1
1
  class Eye::Trigger
2
- include Eye::Logger::Helpers
3
-
4
2
  autoload :Flapping, 'eye/trigger/flapping'
3
+ autoload :State, 'eye/trigger/state'
5
4
 
6
5
  # ex: { :type => :flapping, :times => 2, :within => 30.seconds}
7
6
 
8
- TYPES = {:flapping => "Flapping"}
7
+ TYPES = {:flapping => "Flapping", :state => "State"}
9
8
 
10
- attr_reader :message, :options
9
+ attr_reader :message, :options, :process
10
+
11
+ extend Eye::Dsl::Validation
12
+
13
+ def self.name_and_class(type)
14
+ type = type.to_sym
15
+ return {:name => type, :type => type} if TYPES[type]
16
+
17
+ if type =~ /\A(.*?)_?[0-9]+\z/
18
+ ctype = $1.to_sym
19
+ return {:name => type, :type => ctype} if TYPES[ctype]
20
+ end
21
+ end
11
22
 
12
23
  def self.get_class(type)
13
24
  klass = eval("Eye::Trigger::#{TYPES[type]}") rescue nil
@@ -15,39 +26,65 @@ class Eye::Trigger
15
26
  klass
16
27
  end
17
28
 
18
- def self.create(options = {}, logger_prefix = nil)
19
- get_class(options[:type]).new(options, logger_prefix)
29
+ def self.create(process, options = {})
30
+ get_class(options[:type]).new(process, options)
20
31
  end
21
32
 
22
33
  def self.validate!(options = {})
23
34
  get_class(options[:type]).validate(options)
24
35
  end
25
36
 
26
- def initialize(options = {}, logger_prefix = nil)
37
+ def initialize(process, options = {})
27
38
  @options = options
28
- @logger = Eye::Logger.new(logger_prefix, "trigger")
39
+ @process = process
29
40
 
30
41
  debug "add #{options}"
31
42
  end
32
43
 
33
- def check(states_history)
34
- @states_history = states_history
44
+ def inspect
45
+ "<#{self.class} @process='#{@process.full_name}' @options=#{@options}>"
46
+ end
35
47
 
36
- res = good?
48
+ def logger_tag
49
+ @process.logger.prefix
50
+ end
37
51
 
38
- if res
39
- debug 'check flapping'
40
- else
41
- debug "!!! #{self.class} recognized !!!"
42
- end
43
-
44
- res
52
+ def logger_sub_tag
53
+ "trigger(#{@options[:type]})"
45
54
  end
46
55
 
47
- def good?
48
- raise 'realize me'
56
+ def notify(transition)
57
+ debug "check"
58
+ @transition = transition
59
+ check(transition)
60
+ rescue => ex
61
+ warn "failed #{ex.message} #{ex.backtrace}"
49
62
  end
50
63
 
51
- extend Eye::Dsl::Validation
64
+ def check(transition)
65
+ raise "realize me"
66
+ end
67
+
68
+ def run_in_process_context(p)
69
+ process.instance_exec(&p) if process.alive?
70
+ end
71
+
72
+ def defer(&block)
73
+ Celluloid::Future.new(&block).value
74
+ end
52
75
 
76
+ def self.register(base)
77
+ name = base.to_s.gsub("Eye::Trigger::", '')
78
+ name = base.to_s
79
+ type = name.underscore.to_sym
80
+ Eye::Trigger::TYPES[type] = name
81
+ Eye::Trigger.const_set(name, base)
82
+ end
83
+
84
+ class Custom < Eye::Trigger
85
+ def self.inherited(base)
86
+ super
87
+ register(base)
88
+ end
89
+ end
53
90
  end
@@ -1,6 +1,6 @@
1
1
  class Eye::Trigger::Flapping < Eye::Trigger
2
2
 
3
- # triggers :flapping, :times => 10, :within => 1.minute,
3
+ # triggers :flapping, :times => 10, :within => 1.minute,
4
4
  # :retry_in => 10.minutes, :retry_times => 15
5
5
 
6
6
  param :times, [Fixnum], true, 5
@@ -13,16 +13,36 @@ class Eye::Trigger::Flapping < Eye::Trigger
13
13
  @last_at = nil
14
14
  end
15
15
 
16
+ def check(transition)
17
+ unless good?
18
+ on_flapping
19
+ end
20
+ end
21
+
22
+ private
23
+
16
24
  def good?
17
- states = @states_history.states_for_period( within, @last_at )
25
+ states = process.states_history.states_for_period( within, @last_at )
18
26
  down_count = states.count{|st| st == :down }
19
27
 
20
28
  if down_count >= times
21
- @last_at = @states_history.last_state_changed_at
29
+ @last_at = process.states_history.last_state_changed_at
22
30
  false
23
31
  else
24
32
  true
25
33
  end
26
34
  end
27
35
 
28
- end
36
+ def on_flapping
37
+ debug "flapping recognized!!!"
38
+
39
+ process.notify :error, 'flapping!'
40
+ process.schedule :unmonitor, Eye::Reason.new(:flapping)
41
+
42
+ return unless retry_in
43
+ return if retry_times && process.flapping_times >= retry_times
44
+
45
+ process.schedule_in(retry_in.to_f, :retry_start_after_flapping)
46
+ end
47
+
48
+ end
@@ -0,0 +1,28 @@
1
+ class Eye::Trigger::State < Eye::Trigger
2
+
3
+ # triggers :state, :to => :up, :from => :starting, :do => ->{ ... }
4
+
5
+ param :to, [Symbol, Array]
6
+ param :from, [Symbol, Array]
7
+ param :event, [Symbol, Array]
8
+ param :do, [Proc]
9
+
10
+ def check(trans)
11
+ if compare(trans.to_name, to) || compare(trans.from_name, from) || compare(trans.event, event)
12
+ debug "trans ok #{trans}, executing proc!"
13
+ run_in_process_context(@options[:do]) if @options[:do]
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def compare(state_name, condition)
20
+ case condition
21
+ when Symbol
22
+ state_name == condition
23
+ when Array
24
+ condition.include?(state_name)
25
+ end
26
+ end
27
+
28
+ end
@@ -2,7 +2,7 @@ class Eye::Utils::AliveArray
2
2
  extend Forwardable
3
3
  include Enumerable
4
4
 
5
- def_delegators :@arr, :[], :<<, :clear, :delete, :size, :empty?, :push,
5
+ def_delegators :@arr, :[], :<<, :clear, :delete, :size, :empty?, :push,
6
6
  :flatten, :present?, :uniq!
7
7
 
8
8
  def initialize(arr = [])
@@ -0,0 +1,5 @@
1
+ class Celluloid::SyncProxy
2
+ def __klass__
3
+ @klass
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ module Enumerable
2
+ # Simple parallel map using Celluloid::Futures
3
+ def pmap(&block)
4
+ futures = map { |elem| Celluloid::Future.new(elem, &block) }
5
+ futures.map { |future| future.value }
6
+ end
7
+ end
@@ -9,7 +9,7 @@ class Eye::Utils::Tail < Array
9
9
 
10
10
  def push(el)
11
11
  super(el)
12
- shift if length > @max_size
12
+ shift if length > @max_size
13
13
  self
14
14
  end
15
15
 
metadata CHANGED
@@ -1,297 +1,290 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: reel-eye
3
- version: !ruby/object:Gem::Version
4
- hash: 23
5
- prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 2
10
- version: 0.3.2
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.4'
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Konstantin Makarchev
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2013-07-07 00:00:00 +04:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
11
+ date: 2013-08-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
22
14
  name: celluloid
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
27
17
  - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 43
30
- segments:
31
- - 0
32
- - 13
33
- - 0
34
- version: 0.13.0
18
+ - !ruby/object:Gem::Version
19
+ version: 0.14.0
35
20
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: celluloid-io
39
21
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
43
24
  - - ~>
44
- - !ruby/object:Gem::Version
45
- hash: 43
46
- segments:
47
- - 0
48
- - 13
49
- - 0
50
- version: 0.13.0
51
- type: :runtime
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: state_machine
55
- prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - <
60
- - !ruby/object:Gem::Version
61
- hash: 11
62
- segments:
63
- - 1
64
- - 2
65
- version: "1.2"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.14.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: celluloid-io
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.14.0
66
34
  type: :runtime
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- name: activesupport
70
35
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
72
- none: false
73
- requirements:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
74
38
  - - ~>
75
- - !ruby/object:Gem::Version
76
- hash: 15
77
- segments:
78
- - 3
79
- - 2
80
- - 0
81
- version: 3.2.0
39
+ - !ruby/object:Gem::Version
40
+ version: 0.14.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: state_machine
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
82
48
  type: :runtime
83
- version_requirements: *id004
84
- - !ruby/object:Gem::Dependency
85
- name: thor
86
49
  prerelease: false
87
- requirement: &id005 !ruby/object:Gem::Requirement
88
- none: false
89
- requirements:
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- hash: 3
93
- segments:
94
- - 0
95
- version: "0"
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: thor
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
96
62
  type: :runtime
97
- version_requirements: *id005
98
- - !ruby/object:Gem::Dependency
99
- name: reel
100
63
  prerelease: false
101
- requirement: &id006 !ruby/object:Gem::Requirement
102
- none: false
103
- requirements:
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: reel
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
104
73
  - - ~>
105
- - !ruby/object:Gem::Version
106
- hash: -853327506
107
- segments:
108
- - 0
109
- - 4
110
- - 0
111
- - pre
74
+ - !ruby/object:Gem::Version
112
75
  version: 0.4.0.pre
113
76
  type: :runtime
114
- version_requirements: *id006
115
- - !ruby/object:Gem::Dependency
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 0.4.0.pre
83
+ - !ruby/object:Gem::Dependency
116
84
  name: cuba
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
117
91
  prerelease: false
118
- requirement: &id007 !ruby/object:Gem::Requirement
119
- none: false
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- hash: 3
124
- segments:
125
- - 0
126
- version: "0"
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: activesupport
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '3'
127
104
  type: :runtime
128
- version_requirements: *id007
129
- - !ruby/object:Gem::Dependency
130
- name: rake
131
105
  prerelease: false
132
- requirement: &id008 !ruby/object:Gem::Requirement
133
- none: false
134
- requirements:
135
- - - ">="
136
- - !ruby/object:Gem::Version
137
- hash: 3
138
- segments:
139
- - 0
140
- version: "0"
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '3'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
141
118
  type: :development
142
- version_requirements: *id008
143
- - !ruby/object:Gem::Dependency
144
- name: rspec
145
119
  prerelease: false
146
- requirement: &id009 !ruby/object:Gem::Requirement
147
- none: false
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- hash: 3
152
- segments:
153
- - 0
154
- version: "0"
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - <
130
+ - !ruby/object:Gem::Version
131
+ version: '2.14'
155
132
  type: :development
156
- version_requirements: *id009
157
- - !ruby/object:Gem::Dependency
158
- name: rr
159
133
  prerelease: false
160
- requirement: &id010 !ruby/object:Gem::Requirement
161
- none: false
162
- requirements:
163
- - - ">="
164
- - !ruby/object:Gem::Version
165
- hash: 3
166
- segments:
167
- - 0
168
- version: "0"
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - <
137
+ - !ruby/object:Gem::Version
138
+ version: '2.14'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rr
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
169
146
  type: :development
170
- version_requirements: *id010
171
- - !ruby/object:Gem::Dependency
172
- name: ruby-graphviz
173
147
  prerelease: false
174
- requirement: &id011 !ruby/object:Gem::Requirement
175
- none: false
176
- requirements:
177
- - - ">="
178
- - !ruby/object:Gem::Version
179
- hash: 3
180
- segments:
181
- - 0
182
- version: "0"
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: ruby-graphviz
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
183
160
  type: :development
184
- version_requirements: *id011
185
- - !ruby/object:Gem::Dependency
186
- name: forking
187
161
  prerelease: false
188
- requirement: &id012 !ruby/object:Gem::Requirement
189
- none: false
190
- requirements:
191
- - - ">="
192
- - !ruby/object:Gem::Version
193
- hash: 3
194
- segments:
195
- - 0
196
- version: "0"
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: forking
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
197
174
  type: :development
198
- version_requirements: *id012
199
- - !ruby/object:Gem::Dependency
200
- name: fakeweb
201
175
  prerelease: false
202
- requirement: &id013 !ruby/object:Gem::Requirement
203
- none: false
204
- requirements:
205
- - - ">="
206
- - !ruby/object:Gem::Version
207
- hash: 3
208
- segments:
209
- - 0
210
- version: "0"
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: fakeweb
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
211
188
  type: :development
212
- version_requirements: *id013
213
- - !ruby/object:Gem::Dependency
214
- name: eventmachine
215
189
  prerelease: false
216
- requirement: &id014 !ruby/object:Gem::Requirement
217
- none: false
218
- requirements:
219
- - - ">="
220
- - !ruby/object:Gem::Version
221
- hash: 17
222
- segments:
223
- - 1
224
- - 0
225
- - 3
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '>='
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: eventmachine
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '>='
200
+ - !ruby/object:Gem::Version
226
201
  version: 1.0.3
227
202
  type: :development
228
- version_requirements: *id014
229
- - !ruby/object:Gem::Dependency
230
- name: sinatra
231
203
  prerelease: false
232
- requirement: &id015 !ruby/object:Gem::Requirement
233
- none: false
234
- requirements:
235
- - - ">="
236
- - !ruby/object:Gem::Version
237
- hash: 3
238
- segments:
239
- - 0
240
- version: "0"
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '>='
207
+ - !ruby/object:Gem::Version
208
+ version: 1.0.3
209
+ - !ruby/object:Gem::Dependency
210
+ name: sinatra
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - '>='
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
241
216
  type: :development
242
- version_requirements: *id015
243
- - !ruby/object:Gem::Dependency
244
- name: thin
245
217
  prerelease: false
246
- requirement: &id016 !ruby/object:Gem::Requirement
247
- none: false
248
- requirements:
249
- - - ">="
250
- - !ruby/object:Gem::Version
251
- hash: 3
252
- segments:
253
- - 0
254
- version: "0"
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: thin
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
255
230
  type: :development
256
- version_requirements: *id016
257
- - !ruby/object:Gem::Dependency
258
- name: xmpp4r
259
231
  prerelease: false
260
- requirement: &id017 !ruby/object:Gem::Requirement
261
- none: false
262
- requirements:
263
- - - ">="
264
- - !ruby/object:Gem::Version
265
- hash: 3
266
- segments:
267
- - 0
268
- version: "0"
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - '>='
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: xmpp4r
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - '>='
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
269
244
  type: :development
270
- version_requirements: *id017
271
- - !ruby/object:Gem::Dependency
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - '>='
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ - !ruby/object:Gem::Dependency
272
252
  name: coveralls
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - '>='
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :development
273
259
  prerelease: false
274
- requirement: &id018 !ruby/object:Gem::Requirement
275
- none: false
276
- requirements:
277
- - - ">="
278
- - !ruby/object:Gem::Version
279
- hash: 3
280
- segments:
281
- - 0
282
- version: "0"
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - '>='
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: parallel_tests
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - '>='
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
283
272
  type: :development
284
- version_requirements: *id018
285
- description: Process monitoring tool. An alternative to God and Bluepill. With Bluepill like config syntax. Requires MRI Ruby >= 1.9.2. Uses Celluloid and Celluloid::IO.
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - '>='
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ description: Process monitoring tool. An alternative to God and Bluepill. With Bluepill
280
+ like config syntax. Requires MRI Ruby >= 1.9.2. Uses Celluloid and Celluloid::IO.
286
281
  email: kostya27@gmail.com
287
- executables:
282
+ executables:
288
283
  - eye
289
284
  - loader_eye
290
285
  extensions: []
291
-
292
286
  extra_rdoc_files: []
293
-
294
- files:
287
+ files:
295
288
  - .gitignore
296
289
  - .rspec
297
290
  - .travis.yml
@@ -379,48 +372,36 @@ files:
379
372
  - lib/eye/system_resources.rb
380
373
  - lib/eye/trigger.rb
381
374
  - lib/eye/trigger/flapping.rb
375
+ - lib/eye/trigger/state.rb
382
376
  - lib/eye/utils.rb
383
377
  - lib/eye/utils/alive_array.rb
384
378
  - lib/eye/utils/celluloid_chain.rb
385
- - lib/eye/utils/leak_19.rb
379
+ - lib/eye/utils/celluloid_klass.rb
380
+ - lib/eye/utils/pmap.rb
386
381
  - lib/eye/utils/tail.rb
387
- has_rdoc: true
388
382
  homepage: http://github.com/kostya/eye
389
- licenses:
383
+ licenses:
390
384
  - MIT
385
+ metadata: {}
391
386
  post_install_message:
392
387
  rdoc_options: []
393
-
394
- require_paths:
388
+ require_paths:
395
389
  - lib
396
- required_ruby_version: !ruby/object:Gem::Requirement
397
- none: false
398
- requirements:
399
- - - ">="
400
- - !ruby/object:Gem::Version
401
- hash: 55
402
- segments:
403
- - 1
404
- - 9
405
- - 2
390
+ required_ruby_version: !ruby/object:Gem::Requirement
391
+ requirements:
392
+ - - '>='
393
+ - !ruby/object:Gem::Version
406
394
  version: 1.9.2
407
- required_rubygems_version: !ruby/object:Gem::Requirement
408
- none: false
409
- requirements:
410
- - - ">="
411
- - !ruby/object:Gem::Version
412
- hash: 23
413
- segments:
414
- - 1
415
- - 3
416
- - 6
395
+ required_rubygems_version: !ruby/object:Gem::Requirement
396
+ requirements:
397
+ - - '>='
398
+ - !ruby/object:Gem::Version
417
399
  version: 1.3.6
418
400
  requirements: []
419
-
420
401
  rubyforge_project:
421
- rubygems_version: 1.4.2
402
+ rubygems_version: 2.0.2
422
403
  signing_key:
423
- specification_version: 3
424
- summary: Process monitoring tool. An alternative to God and Bluepill. With Bluepill like config syntax. Requires MRI Ruby >= 1.9.2. Uses Celluloid and Celluloid::IO.
404
+ specification_version: 4
405
+ summary: Process monitoring tool. An alternative to God and Bluepill. With Bluepill
406
+ like config syntax. Requires MRI Ruby >= 1.9.2. Uses Celluloid and Celluloid::IO.
425
407
  test_files: []
426
-