eye 0.9.4.nosigar → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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