File Coverage

blib/lib/Solaris/SMF.pm
Criterion Covered Total %
statement 17 30 56.6
branch 0 10 0.0
condition n/a
subroutine 6 7 85.7
pod 1 1 100.0
total 24 48 50.0


line stmt bran cond sub pod time code
1 4     4   50851 use strict;
  4         5  
  4         143  
2 4     4   15 use warnings;
  4         6  
  4         208  
3              
4             package Solaris::SMF;
5             $Solaris::SMF::VERSION = '1.0.0';
6             # ABSTRACT: Manipulate Solaris 10 services from Perl
7              
8             BEGIN {
9 4     4   8 eval { require Data::Dumper; };
  4         2340  
10             }
11             require Exporter;
12             our @ISA = qw(Exporter);
13             our @EXPORT = qw( get_services );
14 4     4   28712 use Params::Validate qw ( validate :types );
  4         29189  
  4         740  
15 4     4   1428 use Solaris::SMF::Service;
  4         8  
  4         111  
16 4     4   22 use Carp;
  4         6  
  4         1206  
17              
18             my $debug = $ENV{RELEASE_TESTING} ? $ENV{RELEASE_TESTING} : 0;
19              
20              
21             sub get_services {
22 0 0   0 1   $debug && warn( 'get_services ' . join( ',', @_ ) );
23 0           my %p =
24             validate( @_, { wildcard => { type => SCALAR, default => '*' } } );
25 0           local $ENV{PATH} = '/bin:/usr/bin:/sbin:/usr/sbin';
26 0           my @service_list;
27 0 0         open my $svc_list, '-|', " svcs -aH '$p{wildcard}' 2>/dev/null"
28             or die 'Unable to query SMF services';
29 0           while ( my $svc_line = <$svc_list> ) {
30 0 0         $debug
31             && warn($svc_line);
32 0           my ( $state, $date, $FMRI ) = (
33             $svc_line =~ m/
34             ^
35             ([^\s]+) # Current state
36             [\s]+
37             ([^\s]+) # Date this state was set
38             [\s]+
39             ( (?:svc:|lrc:) [^\s]+) # FMRI
40             \n?
41             $
42             /xms
43             );
44 0 0         $debug
45             && warn(
46             Data::Dumper->Dump(
47             [ $state, $date, $FMRI ],
48             [qw($state $date $FMRI)]
49             )
50             );
51 0 0         if ($FMRI) {
52 0           push( @service_list, Solaris::SMF::Service->new($FMRI) );
53             }
54             }
55 0           close $svc_list;
56 0           return @service_list;
57             }
58              
59             1;
60              
61             __END__