reel-eye 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +32 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE +22 -0
  7. data/README.md +170 -0
  8. data/Rakefile +20 -0
  9. data/bin/eye +322 -0
  10. data/bin/loader_eye +58 -0
  11. data/examples/notify.eye +18 -0
  12. data/examples/process_thin.rb +29 -0
  13. data/examples/processes/em.rb +57 -0
  14. data/examples/processes/forking.rb +20 -0
  15. data/examples/processes/sample.rb +144 -0
  16. data/examples/processes/thin.ru +12 -0
  17. data/examples/puma.eye +34 -0
  18. data/examples/rbenv.eye +11 -0
  19. data/examples/sidekiq.eye +23 -0
  20. data/examples/test.eye +81 -0
  21. data/examples/thin-farm.eye +29 -0
  22. data/examples/unicorn.eye +31 -0
  23. data/eye.gemspec +42 -0
  24. data/lib/eye.rb +28 -0
  25. data/lib/eye/application.rb +74 -0
  26. data/lib/eye/checker.rb +138 -0
  27. data/lib/eye/checker/cpu.rb +27 -0
  28. data/lib/eye/checker/file_ctime.rb +25 -0
  29. data/lib/eye/checker/file_size.rb +34 -0
  30. data/lib/eye/checker/http.rb +98 -0
  31. data/lib/eye/checker/memory.rb +27 -0
  32. data/lib/eye/checker/socket.rb +152 -0
  33. data/lib/eye/child_process.rb +101 -0
  34. data/lib/eye/client.rb +32 -0
  35. data/lib/eye/config.rb +88 -0
  36. data/lib/eye/control.rb +2 -0
  37. data/lib/eye/controller.rb +53 -0
  38. data/lib/eye/controller/commands.rb +73 -0
  39. data/lib/eye/controller/helpers.rb +61 -0
  40. data/lib/eye/controller/load.rb +214 -0
  41. data/lib/eye/controller/options.rb +48 -0
  42. data/lib/eye/controller/send_command.rb +115 -0
  43. data/lib/eye/controller/show_history.rb +62 -0
  44. data/lib/eye/controller/status.rb +131 -0
  45. data/lib/eye/dsl.rb +48 -0
  46. data/lib/eye/dsl/application_opts.rb +33 -0
  47. data/lib/eye/dsl/chain.rb +12 -0
  48. data/lib/eye/dsl/child_process_opts.rb +8 -0
  49. data/lib/eye/dsl/config_opts.rb +48 -0
  50. data/lib/eye/dsl/group_opts.rb +27 -0
  51. data/lib/eye/dsl/helpers.rb +12 -0
  52. data/lib/eye/dsl/main.rb +40 -0
  53. data/lib/eye/dsl/opts.rb +140 -0
  54. data/lib/eye/dsl/process_opts.rb +21 -0
  55. data/lib/eye/dsl/pure_opts.rb +110 -0
  56. data/lib/eye/dsl/validation.rb +59 -0
  57. data/lib/eye/group.rb +134 -0
  58. data/lib/eye/group/chain.rb +81 -0
  59. data/lib/eye/http.rb +31 -0
  60. data/lib/eye/http/router.rb +25 -0
  61. data/lib/eye/loader.rb +23 -0
  62. data/lib/eye/logger.rb +80 -0
  63. data/lib/eye/notify.rb +86 -0
  64. data/lib/eye/notify/jabber.rb +30 -0
  65. data/lib/eye/notify/mail.rb +44 -0
  66. data/lib/eye/process.rb +86 -0
  67. data/lib/eye/process/child.rb +58 -0
  68. data/lib/eye/process/commands.rb +256 -0
  69. data/lib/eye/process/config.rb +70 -0
  70. data/lib/eye/process/controller.rb +76 -0
  71. data/lib/eye/process/data.rb +47 -0
  72. data/lib/eye/process/monitor.rb +95 -0
  73. data/lib/eye/process/notify.rb +32 -0
  74. data/lib/eye/process/scheduler.rb +78 -0
  75. data/lib/eye/process/states.rb +86 -0
  76. data/lib/eye/process/states_history.rb +66 -0
  77. data/lib/eye/process/system.rb +97 -0
  78. data/lib/eye/process/trigger.rb +54 -0
  79. data/lib/eye/process/validate.rb +23 -0
  80. data/lib/eye/process/watchers.rb +69 -0
  81. data/lib/eye/reason.rb +20 -0
  82. data/lib/eye/server.rb +52 -0
  83. data/lib/eye/settings.rb +46 -0
  84. data/lib/eye/system.rb +154 -0
  85. data/lib/eye/system_resources.rb +86 -0
  86. data/lib/eye/trigger.rb +53 -0
  87. data/lib/eye/trigger/flapping.rb +28 -0
  88. data/lib/eye/utils.rb +14 -0
  89. data/lib/eye/utils/alive_array.rb +31 -0
  90. data/lib/eye/utils/celluloid_chain.rb +70 -0
  91. data/lib/eye/utils/leak_19.rb +7 -0
  92. data/lib/eye/utils/tail.rb +20 -0
  93. metadata +390 -0
@@ -0,0 +1,86 @@
1
+ require 'celluloid'
2
+
3
+ class Eye::SystemResources
4
+
5
+ # cached system resources
6
+ class << self
7
+
8
+ def memory(pid)
9
+ ps_aux[pid].try :[], :rss
10
+ end
11
+
12
+ def cpu(pid)
13
+ ps_aux[pid].try :[], :cpu
14
+ end
15
+
16
+ def childs(parent_pid)
17
+ parent_pid = parent_pid.to_i
18
+
19
+ childs = []
20
+ ps_aux.each do |pid, h|
21
+ childs << pid if h[:ppid] == parent_pid
22
+ end
23
+
24
+ childs
25
+ end
26
+
27
+ def start_time(pid)
28
+ ps_aux[pid].try :[], :start_time
29
+ end
30
+
31
+ def resources(pid)
32
+ return {} unless ps_aux[pid]
33
+
34
+ { :memory => memory(pid),
35
+ :cpu => cpu(pid),
36
+ :start_time => start_time(pid),
37
+ :pid => pid
38
+ }
39
+ end
40
+
41
+ # initialize actor, call 1 time before using
42
+ def setup
43
+ @actor ||= PsAxActor.new
44
+ end
45
+
46
+ private
47
+
48
+ def reset!
49
+ setup.terminate
50
+ @actor = nil
51
+ end
52
+
53
+ def ps_aux
54
+ setup
55
+ @actor.get
56
+ end
57
+
58
+ end
59
+
60
+ class PsAxActor
61
+ include Celluloid
62
+
63
+ UPDATE_INTERVAL = 5 # seconds
64
+
65
+ def initialize
66
+ set
67
+ end
68
+
69
+ def get
70
+ if @at + UPDATE_INTERVAL < Time.now
71
+ @at = Time.now # for minimize races
72
+ async.set
73
+ end
74
+ @ps_aux
75
+ end
76
+
77
+ private
78
+
79
+ def set
80
+ @ps_aux = Eye::System.ps_aux
81
+ @at = Time.now
82
+ end
83
+
84
+ end
85
+
86
+ end
@@ -0,0 +1,53 @@
1
+ class Eye::Trigger
2
+ include Eye::Logger::Helpers
3
+
4
+ autoload :Flapping, 'eye/trigger/flapping'
5
+
6
+ # ex: { :type => :flapping, :times => 2, :within => 30.seconds}
7
+
8
+ TYPES = {:flapping => "Flapping"}
9
+
10
+ attr_reader :message, :options
11
+
12
+ def self.get_class(type)
13
+ klass = eval("Eye::Trigger::#{TYPES[type]}") rescue nil
14
+ raise "Unknown trigger #{type}" unless klass
15
+ klass
16
+ end
17
+
18
+ def self.create(options = {}, logger_prefix = nil)
19
+ get_class(options[:type]).new(options, logger_prefix)
20
+ end
21
+
22
+ def self.validate!(options = {})
23
+ get_class(options[:type]).validate(options)
24
+ end
25
+
26
+ def initialize(options = {}, logger_prefix = nil)
27
+ @options = options
28
+ @logger = Eye::Logger.new(logger_prefix, "trigger")
29
+
30
+ debug "add #{options}"
31
+ end
32
+
33
+ def check(states_history)
34
+ @states_history = states_history
35
+
36
+ res = good?
37
+
38
+ if res
39
+ debug 'check flapping'
40
+ else
41
+ debug "!!! #{self.class} recognized !!!"
42
+ end
43
+
44
+ res
45
+ end
46
+
47
+ def good?
48
+ raise 'realize me'
49
+ end
50
+
51
+ extend Eye::Dsl::Validation
52
+
53
+ end
@@ -0,0 +1,28 @@
1
+ class Eye::Trigger::Flapping < Eye::Trigger
2
+
3
+ # triggers :flapping, :times => 10, :within => 1.minute,
4
+ # :retry_in => 10.minutes, :retry_times => 15
5
+
6
+ param :times, [Fixnum], true, 5
7
+ param :within, [Float, Fixnum], true
8
+ param :retry_in, [Float, Fixnum]
9
+ param :retry_times, [Fixnum]
10
+
11
+ def initialize(*args)
12
+ super
13
+ @last_at = nil
14
+ end
15
+
16
+ def good?
17
+ states = @states_history.states_for_period( within, @last_at )
18
+ down_count = states.count{|st| st == :down }
19
+
20
+ if down_count >= times
21
+ @last_at = @states_history.last_state_changed_at
22
+ false
23
+ else
24
+ true
25
+ end
26
+ end
27
+
28
+ end
data/lib/eye/utils.rb ADDED
@@ -0,0 +1,14 @@
1
+ module Eye::Utils
2
+ autoload :Tail, 'eye/utils/tail'
3
+ autoload :AliveArray, 'eye/utils/alive_array'
4
+ autoload :CelluloidChain, 'eye/utils/celluloid_chain'
5
+
6
+ def self.deep_clone(value)
7
+ case
8
+ when value.is_a?(Array) then value.map{|v| deep_clone(v) }
9
+ when value.is_a?(Hash) then value.inject({}){|r, (k, v)| r[ deep_clone(k) ] = deep_clone(v); r }
10
+ else value
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,31 @@
1
+ class Eye::Utils::AliveArray
2
+ extend Forwardable
3
+ include Enumerable
4
+
5
+ def_delegators :@arr, :[], :<<, :clear, :delete, :size, :empty?, :push, :flatten
6
+
7
+ def initialize(arr = [])
8
+ @arr = arr
9
+ end
10
+
11
+ def each(&block)
12
+ @arr.each{|elem| elem && elem.alive? && block[elem] }
13
+ end
14
+
15
+ def to_a
16
+ map{|x| x }
17
+ end
18
+
19
+ def full_size
20
+ @arr.size
21
+ end
22
+
23
+ def pure
24
+ @arr
25
+ end
26
+
27
+ def sort_by(&block)
28
+ self.class.new super
29
+ end
30
+
31
+ end
@@ -0,0 +1,70 @@
1
+ require 'celluloid'
2
+
3
+ class Eye::Utils::CelluloidChain
4
+ include Celluloid
5
+
6
+ def initialize(target)
7
+ @target = target
8
+ @calls = []
9
+ @running = false
10
+ end
11
+
12
+ def add(method_name, *args, &block)
13
+ @calls << {:method_name => method_name, :args => args, :block => block}
14
+ ensure_process
15
+ end
16
+
17
+ def add_wo_dups(method_name, *args, &block)
18
+ h = {:method_name => method_name, :args => args, :block => block}
19
+ if @calls[-1] != h
20
+ @calls << h
21
+ ensure_process
22
+ end
23
+ end
24
+
25
+ def add_wo_dups_current(method_name, *args, &block)
26
+ h = {:method_name => method_name, :args => args, :block => block}
27
+ if !@calls.include?(h) && @call != h
28
+ @calls << h
29
+ ensure_process
30
+ end
31
+ end
32
+
33
+ def list
34
+ @calls
35
+ end
36
+
37
+ def names_list
38
+ list.map{|el| el[:method_name].to_sym }
39
+ end
40
+
41
+ def clear
42
+ @calls = []
43
+ end
44
+
45
+ alias :clear_pending_list :clear
46
+
47
+ # need, because of https://github.com/celluloid/celluloid/issues/22
48
+ def inspect
49
+ "Celluloid::Chain(#{@target.class}: #{@calls.inspect})"
50
+ end
51
+
52
+ attr_reader :running
53
+
54
+ private
55
+
56
+ def ensure_process
57
+ unless @running
58
+ @running = true
59
+ async.process
60
+ end
61
+ end
62
+
63
+ def process
64
+ while @call = @calls.shift
65
+ @running = true
66
+ @target.send(@call[:method_name], *@call[:args], &@call[:block]) if @target.alive?
67
+ end
68
+ @running = false
69
+ end
70
+ end
@@ -0,0 +1,7 @@
1
+ # http://stackoverflow.com/questions/7263268/ruby-symbolto-proc-leaks-references-in-1-9-2-p180
2
+
3
+ class Symbol
4
+ def to_proc
5
+ lambda { |x| x.send(self) }
6
+ end
7
+ end
@@ -0,0 +1,20 @@
1
+ class Eye::Utils::Tail < Array
2
+
3
+ # limited array
4
+
5
+ def initialize(max_size = 100)
6
+ @max_size = max_size
7
+ super()
8
+ end
9
+
10
+ def push(el)
11
+ super(el)
12
+ shift if length > @max_size
13
+ self
14
+ end
15
+
16
+ def << (el)
17
+ push(el)
18
+ end
19
+
20
+ end
metadata ADDED
@@ -0,0 +1,390 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: reel-eye
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.1
5
+ platform: ruby
6
+ authors:
7
+ - Konstantin Makarchev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-06-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: celluloid
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.13.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.13.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.13.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.13.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: '1.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - <
53
+ - !ruby/object:Gem::Version
54
+ version: '1.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 3.2.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 3.2.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: thor
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: reel
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 0.4.0.pre
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 0.4.0.pre
97
+ - !ruby/object:Gem::Dependency
98
+ name: cuba
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
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'
118
+ type: :development
119
+ prerelease: false
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: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
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: rr
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
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: ruby-graphviz
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
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: forking
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
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: fakeweb
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '>='
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: eventmachine
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - '>='
214
+ - !ruby/object:Gem::Version
215
+ version: 1.0.3
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - '>='
221
+ - !ruby/object:Gem::Version
222
+ version: 1.0.3
223
+ - !ruby/object:Gem::Dependency
224
+ name: sinatra
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
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: thin
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - '>='
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
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
252
+ name: xmpp4r
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
+ description: Process monitoring tool. An alternative to God and Bluepill. With Bluepill
266
+ like config syntax. Requires MRI Ruby >= 1.9.2. Uses Celluloid and Celluloid::IO.
267
+ email: kostya27@gmail.com
268
+ executables:
269
+ - eye
270
+ - loader_eye
271
+ extensions: []
272
+ extra_rdoc_files: []
273
+ files:
274
+ - .gitignore
275
+ - .rspec
276
+ - .travis.yml
277
+ - Gemfile
278
+ - LICENSE
279
+ - README.md
280
+ - Rakefile
281
+ - bin/eye
282
+ - bin/loader_eye
283
+ - examples/notify.eye
284
+ - examples/process_thin.rb
285
+ - examples/processes/em.rb
286
+ - examples/processes/forking.rb
287
+ - examples/processes/sample.rb
288
+ - examples/processes/thin.ru
289
+ - examples/puma.eye
290
+ - examples/rbenv.eye
291
+ - examples/sidekiq.eye
292
+ - examples/test.eye
293
+ - examples/thin-farm.eye
294
+ - examples/unicorn.eye
295
+ - eye.gemspec
296
+ - lib/eye.rb
297
+ - lib/eye/application.rb
298
+ - lib/eye/checker.rb
299
+ - lib/eye/checker/cpu.rb
300
+ - lib/eye/checker/file_ctime.rb
301
+ - lib/eye/checker/file_size.rb
302
+ - lib/eye/checker/http.rb
303
+ - lib/eye/checker/memory.rb
304
+ - lib/eye/checker/socket.rb
305
+ - lib/eye/child_process.rb
306
+ - lib/eye/client.rb
307
+ - lib/eye/config.rb
308
+ - lib/eye/control.rb
309
+ - lib/eye/controller.rb
310
+ - lib/eye/controller/commands.rb
311
+ - lib/eye/controller/helpers.rb
312
+ - lib/eye/controller/load.rb
313
+ - lib/eye/controller/options.rb
314
+ - lib/eye/controller/send_command.rb
315
+ - lib/eye/controller/show_history.rb
316
+ - lib/eye/controller/status.rb
317
+ - lib/eye/dsl.rb
318
+ - lib/eye/dsl/application_opts.rb
319
+ - lib/eye/dsl/chain.rb
320
+ - lib/eye/dsl/child_process_opts.rb
321
+ - lib/eye/dsl/config_opts.rb
322
+ - lib/eye/dsl/group_opts.rb
323
+ - lib/eye/dsl/helpers.rb
324
+ - lib/eye/dsl/main.rb
325
+ - lib/eye/dsl/opts.rb
326
+ - lib/eye/dsl/process_opts.rb
327
+ - lib/eye/dsl/pure_opts.rb
328
+ - lib/eye/dsl/validation.rb
329
+ - lib/eye/group.rb
330
+ - lib/eye/group/chain.rb
331
+ - lib/eye/http.rb
332
+ - lib/eye/http/router.rb
333
+ - lib/eye/loader.rb
334
+ - lib/eye/logger.rb
335
+ - lib/eye/notify.rb
336
+ - lib/eye/notify/jabber.rb
337
+ - lib/eye/notify/mail.rb
338
+ - lib/eye/process.rb
339
+ - lib/eye/process/child.rb
340
+ - lib/eye/process/commands.rb
341
+ - lib/eye/process/config.rb
342
+ - lib/eye/process/controller.rb
343
+ - lib/eye/process/data.rb
344
+ - lib/eye/process/monitor.rb
345
+ - lib/eye/process/notify.rb
346
+ - lib/eye/process/scheduler.rb
347
+ - lib/eye/process/states.rb
348
+ - lib/eye/process/states_history.rb
349
+ - lib/eye/process/system.rb
350
+ - lib/eye/process/trigger.rb
351
+ - lib/eye/process/validate.rb
352
+ - lib/eye/process/watchers.rb
353
+ - lib/eye/reason.rb
354
+ - lib/eye/server.rb
355
+ - lib/eye/settings.rb
356
+ - lib/eye/system.rb
357
+ - lib/eye/system_resources.rb
358
+ - lib/eye/trigger.rb
359
+ - lib/eye/trigger/flapping.rb
360
+ - lib/eye/utils.rb
361
+ - lib/eye/utils/alive_array.rb
362
+ - lib/eye/utils/celluloid_chain.rb
363
+ - lib/eye/utils/leak_19.rb
364
+ - lib/eye/utils/tail.rb
365
+ homepage: http://github.com/kostya/eye
366
+ licenses:
367
+ - MIT
368
+ metadata: {}
369
+ post_install_message:
370
+ rdoc_options: []
371
+ require_paths:
372
+ - lib
373
+ required_ruby_version: !ruby/object:Gem::Requirement
374
+ requirements:
375
+ - - '>='
376
+ - !ruby/object:Gem::Version
377
+ version: 1.9.2
378
+ required_rubygems_version: !ruby/object:Gem::Requirement
379
+ requirements:
380
+ - - '>='
381
+ - !ruby/object:Gem::Version
382
+ version: 1.3.6
383
+ requirements: []
384
+ rubyforge_project:
385
+ rubygems_version: 2.0.2
386
+ signing_key:
387
+ specification_version: 4
388
+ summary: Process monitoring tool. An alternative to God and Bluepill. With Bluepill
389
+ like config syntax. Requires MRI Ruby >= 1.9.2. Uses Celluloid and Celluloid::IO.
390
+ test_files: []