process_monitor 0.0.0 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/README +26 -0
- data/VERSION +1 -1
- data/lib/process_monitor.rb +28 -14
- data/process_monitor.gemspec +41 -0
- metadata +5 -3
data/.gitignore
ADDED
data/README
CHANGED
@@ -3,3 +3,29 @@ Process Monitor
|
|
3
3
|
A simple utility to get the process id and it status.
|
4
4
|
|
5
5
|
The input required are the process type i.e. ruby,java or so on and a pattern to identify the process.
|
6
|
+
|
7
|
+
The pattern here could be any part of the name of the process to allow you to get an exact match of the process.
|
8
|
+
|
9
|
+
For example if you want to get the pid of all Ruby processes do this:
|
10
|
+
|
11
|
+
ProcessMonitor.get_pid("ruby")
|
12
|
+
|
13
|
+
will return an array of pids in case of many Ruby processes and return a single pid in case of a single Ruby process.
|
14
|
+
|
15
|
+
If you want to get the status of a process
|
16
|
+
|
17
|
+
ProcessMonitor.get_process_status(pid)
|
18
|
+
|
19
|
+
will return the state of the process i.e. running/sleeping etc.
|
20
|
+
|
21
|
+
if you want to check if a process is up
|
22
|
+
|
23
|
+
ProcessMonitor.process_is_up?(pid)
|
24
|
+
|
25
|
+
will return "true" or "false"
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.1.0
|
data/lib/process_monitor.rb
CHANGED
@@ -1,38 +1,52 @@
|
|
1
1
|
class ProcessMonitor
|
2
2
|
|
3
|
-
def get_pid(process_type,process_pattern)
|
3
|
+
def self.get_pid(process_type,process_pattern="")
|
4
4
|
# Parse the output to fetch the process id.
|
5
5
|
process_id_reg_exp = %r{^(.*)\s*}
|
6
6
|
|
7
7
|
process_information_lines = `pgrep #{process_type}|xargs ps`.split("\n")
|
8
|
-
|
8
|
+
pids = []
|
9
9
|
|
10
|
-
process_information_lines.
|
10
|
+
process_information_lines.each_with_index do |process_line,index|
|
11
|
+
next if index == 0
|
11
12
|
# The name of the process will be verity-spider
|
12
13
|
# This is to make sure we don't kill any other ruby process other than spider.
|
13
14
|
if process_line =~ /#{process_pattern}/
|
14
15
|
process_id_reg_exp.match(process_line)
|
15
|
-
pid =
|
16
|
+
pid = $1.gsub(/\s*/, "").to_i
|
17
|
+
pids << pid unless $$ == pid
|
16
18
|
end
|
17
19
|
end
|
18
|
-
|
20
|
+
if pids.length > 1
|
21
|
+
pids
|
22
|
+
else
|
23
|
+
pids.first
|
24
|
+
end
|
19
25
|
end
|
20
26
|
|
21
27
|
|
22
|
-
def self.get_process_status(
|
23
|
-
pid
|
24
|
-
|
28
|
+
def self.get_process_status(pid=nil)
|
29
|
+
unless pid.nil?
|
30
|
+
`cat /proc/#{pid}/status|grep State`
|
31
|
+
else
|
32
|
+
p "No pid given!"
|
33
|
+
end
|
25
34
|
end
|
26
35
|
|
27
36
|
|
28
|
-
def self.process_is_up?(
|
29
|
-
pid
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
37
|
+
def self.process_is_up?(pid)
|
38
|
+
unless pid.nil?
|
39
|
+
# The folder /proc/<pid>/ contains information about the process
|
40
|
+
# The file /proc/<pid>/status gives information about the process as to if it is sleeping and so on.
|
41
|
+
# If the folder exists it would mean the process exists.
|
42
|
+
(pid.nil? || !File.exists?("/proc/#{pid}"))? false : true
|
43
|
+
else
|
44
|
+
p "No pid given!"
|
45
|
+
end
|
34
46
|
end
|
35
47
|
|
36
48
|
end
|
37
49
|
|
38
50
|
|
51
|
+
|
52
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{process_monitor}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Sriram Varahan"]
|
12
|
+
s.date = %q{2010-06-24}
|
13
|
+
s.description = %q{This gem gets the status(running/sleeping/defunct) based on a pattern you provide to it. For example if you have a service which is running and its a ruby service you would need to pass the type(ruby) and a pattern which would identify the process.}
|
14
|
+
s.email = %q{sriram.varahan@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".gitignore",
|
20
|
+
"README",
|
21
|
+
"Rakefile",
|
22
|
+
"VERSION",
|
23
|
+
"lib/process_monitor.rb",
|
24
|
+
"process_monitor.gemspec"
|
25
|
+
]
|
26
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
27
|
+
s.require_paths = ["lib"]
|
28
|
+
s.rubygems_version = %q{1.3.7}
|
29
|
+
s.summary = %q{A gem to monitor processes}
|
30
|
+
|
31
|
+
if s.respond_to? :specification_version then
|
32
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
33
|
+
s.specification_version = 3
|
34
|
+
|
35
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
36
|
+
else
|
37
|
+
end
|
38
|
+
else
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: process_monitor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.0
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sriram Varahan
|
@@ -28,10 +28,12 @@ extensions: []
|
|
28
28
|
extra_rdoc_files:
|
29
29
|
- README
|
30
30
|
files:
|
31
|
+
- .gitignore
|
31
32
|
- README
|
32
33
|
- Rakefile
|
33
34
|
- VERSION
|
34
35
|
- lib/process_monitor.rb
|
36
|
+
- process_monitor.gemspec
|
35
37
|
has_rdoc: true
|
36
38
|
homepage:
|
37
39
|
licenses: []
|