reel-eye 0.4.1 → 0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.travis.yml +4 -0
- data/CHANGES.md +17 -1
- data/README.md +3 -3
- data/Rakefile +8 -0
- data/bin/eye +0 -316
- data/bin/loader_eye +3 -3
- data/examples/test.eye +2 -2
- data/eye.gemspec +6 -10
- data/lib/eye.rb +4 -2
- data/lib/eye/application.rb +3 -3
- data/lib/eye/checker.rb +35 -7
- data/lib/eye/checker/cputime.rb +23 -0
- data/lib/eye/checker/file_touched.rb +15 -0
- data/lib/eye/checker/http.rb +7 -9
- data/lib/eye/checker/memory.rb +1 -1
- data/lib/eye/checker/runtime.rb +28 -0
- data/lib/eye/checker/socket.rb +4 -4
- data/lib/eye/cli.rb +166 -0
- data/lib/eye/cli/commands.rb +79 -0
- data/lib/eye/cli/render.rb +137 -0
- data/lib/eye/cli/server.rb +85 -0
- data/lib/eye/client.rb +3 -3
- data/lib/eye/config.rb +17 -14
- data/lib/eye/controller.rb +6 -10
- data/lib/eye/controller/commands.rb +6 -10
- data/lib/eye/controller/helpers.rb +1 -1
- data/lib/eye/controller/send_command.rb +5 -2
- data/lib/eye/controller/status.rb +38 -106
- data/lib/eye/dsl.rb +1 -1
- data/lib/eye/dsl/application_opts.rb +6 -2
- data/lib/eye/dsl/child_process_opts.rb +3 -2
- data/lib/eye/dsl/config_opts.rb +2 -2
- data/lib/eye/dsl/group_opts.rb +2 -1
- data/lib/eye/dsl/main.rb +4 -2
- data/lib/eye/dsl/opts.rb +11 -4
- data/lib/eye/dsl/validation.rb +49 -43
- data/lib/eye/group.rb +1 -1
- data/lib/eye/http.rb +4 -9
- data/lib/eye/http/router.rb +1 -1
- data/lib/eye/loader.rb +5 -9
- data/lib/eye/{settings.rb → local.rb} +1 -1
- data/lib/eye/logger.rb +5 -0
- data/lib/eye/notify.rb +12 -6
- data/lib/eye/notify/jabber.rb +2 -2
- data/lib/eye/process/child.rb +3 -1
- data/lib/eye/process/commands.rb +2 -2
- data/lib/eye/process/controller.rb +1 -1
- data/lib/eye/process/trigger.rb +1 -1
- data/lib/eye/sigar.rb +5 -0
- data/lib/eye/system.rb +8 -7
- data/lib/eye/system_resources.rb +46 -41
- data/lib/eye/trigger.rb +15 -8
- data/lib/eye/trigger/flapping.rb +1 -1
- data/lib/eye/trigger/stop_childs.rb +1 -1
- data/lib/eye/trigger/transition.rb +15 -0
- data/lib/eye/utils.rb +12 -0
- data/lib/eye/utils/leak_19.rb +7 -0
- data/lib/eye/utils/mini_active_support.rb +106 -0
- metadata +40 -17
- data/lib/eye/controller/show_history.rb +0 -63
- data/lib/eye/trigger/state.rb +0 -11
data/lib/eye/trigger/flapping.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
class Eye::Trigger::Transition < Eye::Trigger
|
2
|
+
|
3
|
+
# trigger :transition, :to => :up, :from => :starting, :do => ->{ ... }
|
4
|
+
|
5
|
+
param :do, [Proc, Symbol]
|
6
|
+
|
7
|
+
def check(trans)
|
8
|
+
act = @options[:do]
|
9
|
+
if act
|
10
|
+
instance_exec(&@options[:do]) if act.is_a?(Proc)
|
11
|
+
send(act, process) if act.is_a?(Symbol)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
data/lib/eye/utils.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
1
3
|
module Eye::Utils
|
2
4
|
autoload :Tail, 'eye/utils/tail'
|
3
5
|
autoload :AliveArray, 'eye/utils/alive_array'
|
@@ -11,4 +13,14 @@ module Eye::Utils
|
|
11
13
|
end
|
12
14
|
end
|
13
15
|
|
16
|
+
D1 = '%H:%M'
|
17
|
+
D2 = '%b%d'
|
18
|
+
|
19
|
+
def self.human_time(unix_time)
|
20
|
+
time = Time.at(unix_time.to_i)
|
21
|
+
d1 = time.to_date
|
22
|
+
d2 = Time.now.to_date
|
23
|
+
time.strftime (d1 == d2) ? D1 : D2
|
24
|
+
end
|
25
|
+
|
14
26
|
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
3
|
+
def silence_warnings
|
4
|
+
old_verbose, $VERBOSE = $VERBOSE, nil
|
5
|
+
yield
|
6
|
+
ensure
|
7
|
+
$VERBOSE = old_verbose
|
8
|
+
end
|
9
|
+
|
10
|
+
class Object
|
11
|
+
def blank?
|
12
|
+
respond_to?(:empty?) ? empty? : !self
|
13
|
+
end
|
14
|
+
|
15
|
+
def present?
|
16
|
+
!blank?
|
17
|
+
end
|
18
|
+
|
19
|
+
def try(m, *args)
|
20
|
+
send(m, *args) if respond_to?(m)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class NilClass
|
25
|
+
def try(*args)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class String
|
30
|
+
def underscore
|
31
|
+
word = self.dup
|
32
|
+
word.gsub!('::', '/')
|
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!("-", "_")
|
37
|
+
word.downcase!
|
38
|
+
word
|
39
|
+
end
|
40
|
+
|
41
|
+
def truncate(l)
|
42
|
+
self[0..l]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class Array
|
47
|
+
def extract_options!
|
48
|
+
self[-1].is_a?(Hash) ? self.pop : {}
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class Numeric
|
53
|
+
def seconds
|
54
|
+
self
|
55
|
+
end
|
56
|
+
alias :second :seconds
|
57
|
+
|
58
|
+
def minutes
|
59
|
+
self * 60
|
60
|
+
end
|
61
|
+
alias :minute :minutes
|
62
|
+
|
63
|
+
def hours
|
64
|
+
self * 3600
|
65
|
+
end
|
66
|
+
alias :hour :hours
|
67
|
+
|
68
|
+
def days
|
69
|
+
self * 86400
|
70
|
+
end
|
71
|
+
alias :day :days
|
72
|
+
|
73
|
+
def weeks
|
74
|
+
self * 86400 * 7
|
75
|
+
end
|
76
|
+
alias :week :weeks
|
77
|
+
|
78
|
+
def ago
|
79
|
+
::Time.now - self
|
80
|
+
end
|
81
|
+
|
82
|
+
def bytes
|
83
|
+
self
|
84
|
+
end
|
85
|
+
alias :byte :bytes
|
86
|
+
|
87
|
+
def kilobytes
|
88
|
+
self * 1024
|
89
|
+
end
|
90
|
+
alias :kilobyte :kilobytes
|
91
|
+
|
92
|
+
def megabytes
|
93
|
+
self * 1024 * 1024
|
94
|
+
end
|
95
|
+
alias :megabyte :megabytes
|
96
|
+
|
97
|
+
def gigabytes
|
98
|
+
self * 1024 * 1024 * 1024
|
99
|
+
end
|
100
|
+
alias :gigabyte :gigabytes
|
101
|
+
|
102
|
+
def terabytes
|
103
|
+
self * 1024 * 1024 * 1024 * 1024
|
104
|
+
end
|
105
|
+
alias :terabyte :terabytes
|
106
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reel-eye
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.5'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Konstantin Makarchev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-27 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.
|
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.
|
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.
|
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.
|
40
|
+
version: 0.15.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: state_machine
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,22 +66,36 @@ dependencies:
|
|
66
66
|
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: sigar
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.7.2
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.7.2
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: reel
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ~>
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.4.0
|
89
|
+
version: 0.4.0
|
76
90
|
type: :runtime
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - ~>
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.4.0
|
96
|
+
version: 0.4.0
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: reel-rack
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - '>='
|
@@ -95,19 +109,19 @@ dependencies:
|
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: cuba
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - '>='
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
117
|
+
version: '0'
|
104
118
|
type: :runtime
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
122
|
- - '>='
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
124
|
+
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: rake
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -278,7 +292,7 @@ dependencies:
|
|
278
292
|
version: '0'
|
279
293
|
description: Process monitoring tool. Inspired from Bluepill and God. Requires Ruby(MRI)
|
280
294
|
>= 1.9.3-p194. Uses Celluloid and Celluloid::IO.
|
281
|
-
email:
|
295
|
+
email: eye-rb@googlegroups.com
|
282
296
|
executables:
|
283
297
|
- eye
|
284
298
|
- loader_eye
|
@@ -312,13 +326,20 @@ files:
|
|
312
326
|
- lib/eye/application.rb
|
313
327
|
- lib/eye/checker.rb
|
314
328
|
- lib/eye/checker/cpu.rb
|
329
|
+
- lib/eye/checker/cputime.rb
|
315
330
|
- lib/eye/checker/file_ctime.rb
|
316
331
|
- lib/eye/checker/file_size.rb
|
332
|
+
- lib/eye/checker/file_touched.rb
|
317
333
|
- lib/eye/checker/http.rb
|
318
334
|
- lib/eye/checker/memory.rb
|
319
335
|
- lib/eye/checker/nop.rb
|
336
|
+
- lib/eye/checker/runtime.rb
|
320
337
|
- lib/eye/checker/socket.rb
|
321
338
|
- lib/eye/child_process.rb
|
339
|
+
- lib/eye/cli.rb
|
340
|
+
- lib/eye/cli/commands.rb
|
341
|
+
- lib/eye/cli/render.rb
|
342
|
+
- lib/eye/cli/server.rb
|
322
343
|
- lib/eye/client.rb
|
323
344
|
- lib/eye/config.rb
|
324
345
|
- lib/eye/control.rb
|
@@ -328,7 +349,6 @@ files:
|
|
328
349
|
- lib/eye/controller/load.rb
|
329
350
|
- lib/eye/controller/options.rb
|
330
351
|
- lib/eye/controller/send_command.rb
|
331
|
-
- lib/eye/controller/show_history.rb
|
332
352
|
- lib/eye/controller/status.rb
|
333
353
|
- lib/eye/dsl.rb
|
334
354
|
- lib/eye/dsl/application_opts.rb
|
@@ -347,6 +367,7 @@ files:
|
|
347
367
|
- lib/eye/http.rb
|
348
368
|
- lib/eye/http/router.rb
|
349
369
|
- lib/eye/loader.rb
|
370
|
+
- lib/eye/local.rb
|
350
371
|
- lib/eye/logger.rb
|
351
372
|
- lib/eye/notify.rb
|
352
373
|
- lib/eye/notify/jabber.rb
|
@@ -368,17 +389,19 @@ files:
|
|
368
389
|
- lib/eye/process/watchers.rb
|
369
390
|
- lib/eye/reason.rb
|
370
391
|
- lib/eye/server.rb
|
371
|
-
- lib/eye/
|
392
|
+
- lib/eye/sigar.rb
|
372
393
|
- lib/eye/system.rb
|
373
394
|
- lib/eye/system_resources.rb
|
374
395
|
- lib/eye/trigger.rb
|
375
396
|
- lib/eye/trigger/flapping.rb
|
376
|
-
- lib/eye/trigger/state.rb
|
377
397
|
- lib/eye/trigger/stop_childs.rb
|
398
|
+
- lib/eye/trigger/transition.rb
|
378
399
|
- lib/eye/utils.rb
|
379
400
|
- lib/eye/utils/alive_array.rb
|
380
401
|
- lib/eye/utils/celluloid_chain.rb
|
381
402
|
- lib/eye/utils/celluloid_klass.rb
|
403
|
+
- lib/eye/utils/leak_19.rb
|
404
|
+
- lib/eye/utils/mini_active_support.rb
|
382
405
|
- lib/eye/utils/pmap.rb
|
383
406
|
- lib/eye/utils/tail.rb
|
384
407
|
homepage: http://github.com/kostya/eye
|
@@ -401,7 +424,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
401
424
|
version: 1.3.6
|
402
425
|
requirements: []
|
403
426
|
rubyforge_project:
|
404
|
-
rubygems_version: 2.
|
427
|
+
rubygems_version: 2.1.4
|
405
428
|
signing_key:
|
406
429
|
specification_version: 4
|
407
430
|
summary: Process monitoring tool. Inspired from Bluepill and God. Requires Ruby(MRI)
|
@@ -1,63 +0,0 @@
|
|
1
|
-
module Eye::Controller::ShowHistory
|
2
|
-
|
3
|
-
def history_string(*args)
|
4
|
-
data = history_data(*args)
|
5
|
-
|
6
|
-
res = []
|
7
|
-
data.each do |name, data|
|
8
|
-
res << detail_process_info(name, data)
|
9
|
-
end
|
10
|
-
|
11
|
-
res * "\n"
|
12
|
-
end
|
13
|
-
|
14
|
-
def history_data(*args)
|
15
|
-
res = {}
|
16
|
-
get_processes_for_history(*args).each do |process|
|
17
|
-
res[process.full_name] = process.schedule_history.reject{|c| c[:state] == :check_crash }
|
18
|
-
end
|
19
|
-
res
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def get_processes_for_history(*args)
|
25
|
-
args = ['*'] if args.empty?
|
26
|
-
res = []
|
27
|
-
matched_objects(*args) do |obj|
|
28
|
-
if (obj.is_a?(Eye::Process) || obj.is_a?(Eye::ChildProcess))
|
29
|
-
res << obj
|
30
|
-
else
|
31
|
-
res += obj.processes.to_a
|
32
|
-
end
|
33
|
-
end
|
34
|
-
Eye::Utils::AliveArray.new(res)
|
35
|
-
end
|
36
|
-
|
37
|
-
def detail_process_info(name, history)
|
38
|
-
return if history.empty?
|
39
|
-
|
40
|
-
res = "\033[1m#{name}\033[0m:\n"
|
41
|
-
history = history.reverse
|
42
|
-
|
43
|
-
history.chunk{|h| [h[:state], h[:reason].to_s] }.each do |_, hist|
|
44
|
-
if hist.size >= 3
|
45
|
-
res << detail_process_info_string(hist[0])
|
46
|
-
res << detail_process_info_string(:state => "... #{hist.size - 2} times", :reason => '...', :at => hist[-1][:at])
|
47
|
-
res << detail_process_info_string(hist[-1])
|
48
|
-
else
|
49
|
-
hist.each do |h|
|
50
|
-
res << detail_process_info_string(h)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
res
|
56
|
-
end
|
57
|
-
|
58
|
-
def detail_process_info_string(h)
|
59
|
-
state = h[:state].to_s.ljust(14)
|
60
|
-
"#{Time.at(h[:at]).to_s(:db)} - #{state} (#{h[:reason]})\n"
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|