eye 0.9.4.nosigar → 0.9.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: df5b3035c5e2270e4314cf21f764d22b5f429221
4
- data.tar.gz: 3385f97cff38b17f9f93e629b0c7dc94b05ad770
3
+ metadata.gz: 35cc6bba50b6fad896ce85be9e77748360b114bd
4
+ data.tar.gz: 5bae6b094692d2583f6c293524759a8bbb6f1dae
5
5
  SHA512:
6
- metadata.gz: fae4a420a72fcf37f906fe028313a77d5737b4050038db9e72eb76cc695f62001cc9a7fc6fa7f2631d9b9bb6abcdaca2a72bc6183d26b3451bb4afcbd03f28ca
7
- data.tar.gz: e330bca5888e30957800455ace776f760154cf0e6388e48e380bb4b87af85a435cb0a00aca068e3740a0d4e71a679c838845fb6a68ea74f5155e99edfe243290
6
+ metadata.gz: c648607f310d2e23e465afa8d8577df33b7a0164db5fac37d917760cca5d32f2a9bed155aeedb9714f04fdcb6ad95819c6990477903585e9abf9dd57ece71697
7
+ data.tar.gz: 1236360a7fa6340dde581085e750cbdfb5254efda2738a612f3028b6131585c16edd916b050689879ce5f277180c831f79e04d0654068705f9e09866c200daa2
data/eye.gemspec CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |gem|
23
23
  gem.add_dependency 'celluloid-io', '~> 0.17.0'
24
24
  gem.add_dependency 'state_machines'
25
25
  gem.add_dependency 'thor'
26
+ gem.add_dependency 'sigar', '~> 0.7.3'
26
27
 
27
28
  gem.add_development_dependency 'rake'
28
29
  gem.add_development_dependency 'rspec', '< 2.14'
data/lib/eye.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Eye
2
- VERSION = '0.9.4.nosigar'
2
+ VERSION = '0.9.4'
3
3
  ABOUT = "Eye v#{VERSION} (c) 2012-2017 @kostya"
4
4
  PROCLINE = "eye monitoring v#{VERSION}"
5
5
 
@@ -19,6 +19,7 @@ module Eye
19
19
  autoload :Utils, 'eye/utils'
20
20
  autoload :Notify, 'eye/notify'
21
21
  autoload :Config, 'eye/config'
22
+ autoload :Sigar, 'eye/sigar'
22
23
  autoload :Controller, 'eye/controller'
23
24
  autoload :Control, 'eye/control'
24
25
  autoload :Cli, 'eye/cli'
@@ -8,6 +8,7 @@ require_relative 'utils/mini_active_support'
8
8
  Object.send(:include, Eye::Logger::ObjectExt)
9
9
 
10
10
  # needs to preload
11
+ Eye::Sigar
11
12
  Eye::SystemResources
12
13
 
13
14
  class Eye::Controller
@@ -9,7 +9,7 @@ module Eye::Controller::Status
9
9
  about: Eye::ABOUT,
10
10
  resources: Eye::SystemResources.resources($$),
11
11
  ruby: RUBY_DESCRIPTION,
12
- gems: %w[Celluloid Celluloid::IO StateMachines NIO Timers].map { |c| gem_version(c) },
12
+ gems: %w[Celluloid Celluloid::IO StateMachines NIO Timers Sigar].map { |c| gem_version(c) },
13
13
  logger: Eye::Logger.args.present? ? [Eye::Logger.dev.to_s, *Eye::Logger.args] : Eye::Logger.dev.to_s,
14
14
  home: Eye::Local.home,
15
15
  dir: Eye::Local.dir,
data/lib/eye/loader.rb CHANGED
@@ -7,3 +7,4 @@ gem 'nio4r'
7
7
  gem 'timers'
8
8
 
9
9
  gem 'state_machines'
10
+ gem 'sigar', '~> 0.7.3'
@@ -4,7 +4,7 @@ module Eye::Process::Config
4
4
  keep_alive: true, # restart when crashed
5
5
  check_alive_period: 5.seconds,
6
6
 
7
- check_identity: false,
7
+ check_identity: true,
8
8
  check_identity_period: 60.seconds,
9
9
  check_identity_grace: 60.seconds,
10
10
 
data/lib/eye/sigar.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'sigar'
2
+ require 'logger'
3
+
4
+ Eye::Sigar = ::Sigar.new
5
+ Eye::Sigar.logger = ::Logger.new(nil)
data/lib/eye/system.rb CHANGED
@@ -140,26 +140,6 @@ module Eye::System
140
140
  env
141
141
  end
142
142
 
143
- PS_AUX_CMD = if RUBY_PLATFORM.include?('darwin')
144
- 'ps axo pid,ppid,pcpu,rss,start'
145
- else
146
- 'ps axo pid,ppid,pcpu,rss,start_time'
147
- end
148
-
149
- # get table
150
- # {pid => {:rss =>, :cpu =>, :ppid => , :start_time => }}
151
- # slow
152
- def ps_aux
153
- str = Process.send('`', PS_AUX_CMD).force_encoding('binary')
154
- h = {}
155
- str.each_line do |line|
156
- chunk = line.strip.split(%r[\s+])
157
- h[chunk[0].to_i] = { ppid: chunk[1].to_i, cpu: chunk[2].to_i,
158
- rss: chunk[3].to_i, start_time: chunk[4] }
159
- end
160
- h
161
- end
162
-
163
143
  end
164
144
 
165
145
  end
@@ -7,34 +7,39 @@ class Eye::SystemResources
7
7
 
8
8
  def memory(pid)
9
9
  if mem = cache.proc_mem(pid)
10
- mem * 1024
10
+ mem.resident
11
11
  end
12
12
  end
13
13
 
14
14
  def cpu(pid)
15
- cache.proc_cpu(pid)
15
+ if cpu = cache.proc_cpu(pid)
16
+ cpu.percent * 100
17
+ end
16
18
  end
17
19
 
18
20
  def children(parent_pid)
19
21
  cache.children(parent_pid)
20
22
  end
21
23
 
22
- def start_time(pid) # unixtime
23
- if st = cache.proc_start_time(pid)
24
- Time.parse(st).to_i rescue 0
24
+ # unixtime
25
+ def start_time(pid)
26
+ if cpu = cache.proc_cpu(pid)
27
+ cpu.start_time.to_i / 1000
25
28
  end
26
29
  end
27
30
 
28
31
  # total cpu usage in seconds
29
- def cputime(_pid)
30
- 0
32
+ def cputime(pid)
33
+ if cpu = cache.proc_cpu(pid)
34
+ cpu.total.to_f / 1000
35
+ end
31
36
  end
32
37
 
33
38
  # last child in a children tree
34
39
  def leaf_child(pid)
35
40
  if dc = deep_children(pid)
36
41
  dc.detect do |child|
37
- args = ''
42
+ args = Eye::Sigar.proc_args(child)[0] rescue ''
38
43
  !args.start_with?('logger') && child != pid
39
44
  end
40
45
  end
@@ -53,8 +58,8 @@ class Eye::SystemResources
53
58
  end
54
59
  end
55
60
 
56
- def args(_pid)
57
- '-'
61
+ def args(pid)
62
+ Eye::Sigar.proc_args(pid).join(' ').strip rescue '-'
58
63
  end
59
64
 
60
65
  def resources(pid)
@@ -88,34 +93,31 @@ class Eye::SystemResources
88
93
  end
89
94
 
90
95
  def clear
91
- @ps_aux = nil
96
+ @memory = {}
97
+ @cpu = {}
98
+ @ppids = {}
92
99
  end
93
100
 
94
101
  def proc_mem(pid)
95
- ps_aux[pid].try :[], :rss
102
+ @memory[pid] ||= Eye::Sigar.proc_mem(pid) if pid
103
+
104
+ rescue ArgumentError
105
+ # when incorrect PID, just skip
96
106
  end
97
107
 
98
108
  def proc_cpu(pid)
99
- ps_aux[pid].try :[], :cpu
100
- end
109
+ @cpu[pid] ||= Eye::Sigar.proc_cpu(pid) if pid
101
110
 
102
- def proc_start_time(pid)
103
- ps_aux[pid].try :[], :start_time
111
+ rescue ArgumentError
112
+ # when incorrect PID, just skip
104
113
  end
105
114
 
106
- def children(parent_pid)
107
- parent_pid = parent_pid.to_i
108
-
109
- childs = []
110
- ps_aux.each do |pid, h|
111
- childs << pid if h[:ppid] == parent_pid
115
+ def children(pid)
116
+ if pid
117
+ @ppids[pid] ||= Eye::Sigar.proc_list("State.Ppid.eq=#{pid}")
118
+ else
119
+ []
112
120
  end
113
-
114
- childs
115
- end
116
-
117
- def ps_aux
118
- @ps_aux ||= defer { Eye::System.ps_aux }
119
121
  end
120
122
 
121
123
  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.9.4.nosigar
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Makarchev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-07 00:00:00.000000000 Z
11
+ date: 2017-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: celluloid
@@ -66,6 +66,20 @@ 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.3
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.3
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rake
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -420,6 +434,7 @@ files:
420
434
  - lib/eye/process/validate.rb
421
435
  - lib/eye/process/watchers.rb
422
436
  - lib/eye/server.rb
437
+ - lib/eye/sigar.rb
423
438
  - lib/eye/system.rb
424
439
  - lib/eye/system_resources.rb
425
440
  - lib/eye/trigger.rb