File Coverage

blib/lib/Watchdog/Process.pm
Criterion Covered Total %
statement 4 6 66.6
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 6 8 75.0


line stmt bran cond sub pod time code
1             package Watchdog::Process;
2              
3 1     1   31118 use strict;
  1         4  
  1         55  
4 1     1   1983 use Alias;
  0            
  0            
5             use Proc::ProcessTable;
6             use base qw(Watchdog::Base);
7             use vars qw($NAME $PSTRING $HOST $PORT);
8              
9             =head1 NAME
10              
11             Watchdog::Process - Check for process in process table
12              
13             =head1 SYNOPSIS
14              
15             use Watchdog::Process;
16             $s = new Watchdog::Process($name,$pstring);
17             print $s->id, $s->is_alive ? ' is alive' : ' is dead', "\n";
18              
19             =head1 DESCRIPTION
20              
21             B is an extension for monitoring processes running
22             on a Unix host. The class provides a trivial method for determining
23             whether a service is alive. I
24             tested on Solaris 2.6>.
25              
26             =cut
27              
28             my %fields = ( PSTRING => undef, );
29              
30             =head1 CLASS METHODS
31              
32             =head2 new($name,$pstring)
33              
34             Returns a new B object. I<$name> is a string which
35             will identify the service to a human. I<$pstring> is a string which
36             can be used to identify a process in the process table.
37              
38             =cut
39              
40             sub new($$) {
41             my $DEBUG = 0;
42             my $proto = shift;
43             my $class = ref($proto) || $proto;
44              
45             my $self = bless($class->SUPER::new(shift,undef,undef),$class);
46             for my $element (keys %fields) {
47             $self->{_PERMITTED}->{$element} = $fields{$element};
48             }
49             @{$self}{keys %fields} = values %fields;
50             $self->{PSTRING} = shift;
51              
52             return $self;
53             }
54              
55             #------------------------------------------------------------------------------
56              
57             =head2 is_alive()
58              
59             Returns true if the service is alive, else false.
60              
61             =cut
62              
63             sub is_alive() {
64             my $DEBUG = 0;
65             my $self = attr shift;
66             my $t = new Proc::ProcessTable;
67              
68             for ( @{$t->table} ) {
69             # Proc::ProcessTable::Process::cmndline() seems to return
70             # undefined sometimes. Bug reported to author.
71             my $cmndline = $_->cmndline;
72             print STDERR "\$cmndline = $cmndline\n" if $DEBUG;
73             return 1 if defined($cmndline) && $cmndline =~ /$PSTRING/;
74             }
75             return 0;
76             }
77              
78             #------------------------------------------------------------------------------
79              
80             =head1 BUGS
81              
82             This class is I on Linux as
83             B sometimes returns undef.
84              
85             =head1 SEE ALSO
86              
87             L
88              
89             =head1 AUTHOR
90              
91             Paul Sharpe Epaul@miraclefish.comE
92              
93             =head1 COPYRIGHT
94              
95             Copyright (c) 1998 Paul Sharpe. England. All rights reserved. This
96             program is free software; you can redistribute it and/or modify it
97             under the same terms as Perl itself.
98              
99             =cut