pstree 0.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a6483f4b487ab4ec0b945edb4d9c58123b206ed5
4
+ data.tar.gz: e3ee7b02e2f7d05c678633dcf5dc255eb15406f7
5
+ SHA512:
6
+ metadata.gz: 2cf3d9536175720c6bbc0d7cca86bb63d93f436b452c181cff7705dcc4e346c379e54634cd6c6f8630ec70516b8425eae96d06bd6e0d5e33dc07dc71328e3800
7
+ data.tar.gz: bea7fa97a2481d8447e29f719fc3062f099e16f00d1b44b3c4fd3300b73c7ce5783bd87d1f893662661f3d3d59ff49da603f87c236b420c72552651b7848f191
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ .*.sw[pon]
2
+ .rvmrc
3
+ Gemfile.lock
4
+ coverage
5
+ pkg
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # vim: set filetype=ruby et sw=2 ts=2:
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
data/README.rdoc ADDED
@@ -0,0 +1,30 @@
1
+ = PSTree - Process Status Tree for UNIX in Ruby
2
+
3
+ == Description
4
+
5
+ This library can be used to create and display a process status tree as a Ruby
6
+ datastructure.
7
+
8
+ == Installation
9
+
10
+ Install the gem by typing
11
+
12
+ # gem install term-ansicolor
13
+
14
+ == Download
15
+
16
+ The homepage of this library is located at
17
+
18
+ You can display a simple process tree by executing the ruby-pstree script.
19
+
20
+ * http://flori.github.com/pstree
21
+
22
+ == Author
23
+
24
+ Florian Frank mailto:flori@ping.de
25
+
26
+ == License
27
+
28
+ This is free software; you can redistribute it and/or modify it under the
29
+ terms of the GNU General Public License Version 2 as published by the Free
30
+ Software Foundation: www.gnu.org/copyleft/gpl.html
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ # vim: set filetype=ruby et sw=2 ts=2:
2
+
3
+ require 'gem_hadar'
4
+
5
+ GemHadar do
6
+ name 'pstree'
7
+ path_module 'PSTree'
8
+ module_type 'class'
9
+ author 'Florian Frank'
10
+ email 'flori@ping.de'
11
+ homepage "http://flori.github.com/#{name}"
12
+ summary 'Ruby library that builds a process tree of this host'
13
+ description 'This library uses the output of the ps command to creaste process tree data structure for the current host.'
14
+ licenses << 'GPL-2'
15
+ test_dir 'tests'
16
+ ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', '.rvmrc', 'coverage'
17
+ readme 'README.rdoc'
18
+ executables << 'ruby-pstree'
19
+
20
+ development_dependency 'simplecov'
21
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.0
data/bin/ruby-pstree ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pstree'
4
+
5
+ puts PSTree.new(ARGV.shift)
data/lib/pstree.rb ADDED
@@ -0,0 +1,76 @@
1
+ require 'pstree/version'
2
+
3
+ class PSTree
4
+ class ProcStruct
5
+ def initialize(ppid, pid, user, cmd)
6
+ @ppid, @pid, @user, @cmd = ppid.to_i, pid.to_i, user, cmd
7
+ end
8
+
9
+ attr_reader :ppid, :pid, :user, :cmd
10
+
11
+ def to_s
12
+ "%05u %s (%s)" % [ pid, cmd, user ]
13
+ end
14
+ end
15
+
16
+ include Enumerable
17
+
18
+ def initialize(root_pid = nil)
19
+ @root_pid = root_pid.to_i
20
+ end
21
+
22
+ def to_s
23
+ build
24
+ result = ''
25
+ recurse @root_pid,
26
+ -> children, last {
27
+ if children.zero?
28
+ result << (last ? '`-- ' : ' ')
29
+ else
30
+ result << (last ? '+-- ' : '| ')
31
+ end
32
+ } do |ps|
33
+ result << ps.to_s << "\n"
34
+ end
35
+ result
36
+ end
37
+
38
+ def each(&block)
39
+ build
40
+ recurse @root_pid, &block
41
+ self
42
+ end
43
+
44
+ private
45
+
46
+ def build
47
+ @child_count = [ 0 ]
48
+ @process = {}
49
+ @pstree = Hash.new { |h,k| h[k] = [] }
50
+ pid = @root_pid.zero? ? nil : @root_pid
51
+ psoutput = `/bin/ps axww -o ppid,pid,user,command #{pid}`
52
+ psoutput.each_line do |line|
53
+ next if line !~ /^\s*\d+/
54
+ line.strip!
55
+ ps = ProcStruct.new *line.split(/\s+/, 4)
56
+ @process[ps.pid] = ps
57
+ @pstree[ps.ppid] << ps
58
+ end
59
+ end
60
+
61
+ def recurse(pid, shift_callback = nil, level = 0, &node_callback)
62
+ @child_count[level] = @pstree[pid].size
63
+ for l in 0...level
64
+ shift_callback && shift_callback.call(@child_count[l], l == level - 1)
65
+ end
66
+ node_callback && (process = @process[pid]) && node_callback.call(process)
67
+ if @pstree.key?(pid)
68
+ @child_count[level] = @pstree[pid].size - 1
69
+ @pstree[pid].each do |ps|
70
+ recurse(ps.pid, shift_callback, level + 1 , &node_callback)
71
+ @child_count[level] -= 1
72
+ end
73
+ end
74
+ @pstree.delete pid
75
+ end
76
+ end
@@ -0,0 +1,8 @@
1
+ class PSTree
2
+ # PSTree version
3
+ VERSION = '0.0.0'
4
+ VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
+ VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
+ VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
7
+ VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
8
+ end
data/pstree.gemspec ADDED
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "pstree"
5
+ s.version = "0.0.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Florian Frank"]
9
+ s.date = "2013-05-15"
10
+ s.description = "This library uses the output of the ps command to creaste process tree data structure for the current host."
11
+ s.email = "flori@ping.de"
12
+ s.executables = ["ruby-pstree"]
13
+ s.extra_rdoc_files = ["README.rdoc", "lib/pstree.rb", "lib/pstree/version.rb"]
14
+ s.files = [".gitignore", "Gemfile", "README.rdoc", "Rakefile", "VERSION", "bin/ruby-pstree", "lib/pstree.rb", "lib/pstree/version.rb", "pstree.gemspec"]
15
+ s.homepage = "http://flori.github.com/pstree"
16
+ s.licenses = ["GPL-2"]
17
+ s.rdoc_options = ["--title", "Pstree - Ruby library that builds a process tree of this host", "--main", "README.rdoc"]
18
+ s.require_paths = ["lib"]
19
+ s.rubygems_version = "2.0.3"
20
+ s.summary = "Ruby library that builds a process tree of this host"
21
+
22
+ if s.respond_to? :specification_version then
23
+ s.specification_version = 4
24
+
25
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
+ s.add_development_dependency(%q<gem_hadar>, ["~> 0.3.1"])
27
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
28
+ else
29
+ s.add_dependency(%q<gem_hadar>, ["~> 0.3.1"])
30
+ s.add_dependency(%q<simplecov>, [">= 0"])
31
+ end
32
+ else
33
+ s.add_dependency(%q<gem_hadar>, ["~> 0.3.1"])
34
+ s.add_dependency(%q<simplecov>, [">= 0"])
35
+ end
36
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pstree
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Florian Frank
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: gem_hadar
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.3.1
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.3.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: simplecov
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: This library uses the output of the ps command to creaste process tree
42
+ data structure for the current host.
43
+ email: flori@ping.de
44
+ executables:
45
+ - ruby-pstree
46
+ extensions: []
47
+ extra_rdoc_files:
48
+ - README.rdoc
49
+ - lib/pstree.rb
50
+ - lib/pstree/version.rb
51
+ files:
52
+ - .gitignore
53
+ - Gemfile
54
+ - README.rdoc
55
+ - Rakefile
56
+ - VERSION
57
+ - bin/ruby-pstree
58
+ - lib/pstree.rb
59
+ - lib/pstree/version.rb
60
+ - pstree.gemspec
61
+ homepage: http://flori.github.com/pstree
62
+ licenses:
63
+ - GPL-2
64
+ metadata: {}
65
+ post_install_message:
66
+ rdoc_options:
67
+ - --title
68
+ - Pstree - Ruby library that builds a process tree of this host
69
+ - --main
70
+ - README.rdoc
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ requirements: []
84
+ rubyforge_project:
85
+ rubygems_version: 2.0.3
86
+ signing_key:
87
+ specification_version: 4
88
+ summary: Ruby library that builds a process tree of this host
89
+ test_files: []