Daemon-Shutdown
view release on metacpan or search on metacpan
lib/Daemon/Shutdown/Monitor/hdparm.pm~ view on Meta::CPAN
How long to sleep between each test
Default: 60 (1 minute)
=item disks <ArrayRef>
An array of disks to be tested. e.g. /dev/sda
Default: [ '/dev/sda' ]
=item trigger_time <Int>
The time to wait after discovering that all disks are spun down before returning (trigger a shutdown).
Default: 3600 (1 hour)
=item use_sudo 1|0
Use sudo for hdparm
sudo hdparm -C /dev/sda
Default: 0
=back
=head3 Example configuration
monitor:
hdparm:
trigger_time: 1800
loop_sleep: 1
use_sudo: 0
disks:
- /dev/sdb
- /dev/sdc
- /dev/sdd
=cut
sub new {
my $class = shift;
my %params = @_;
# Validate the config file
%params = validate_with(
params => \%params,
spec => {
loop_sleep => {
regex => qr/^\d*$/,
default => 60,
},
trigger_time => {
regex => qr/^\d*$/,
default => 3600,
},
disks => {
type => ARRAYREF,
default => [ '/dev/sda' ],
callbacks => {
'Disks exist' => sub {
my $disks_ref = shift();
foreach my $disk ( @{$disks_ref} ) {
return 0 if !-e $disk;
}
return 1;
},
},
},
use_sudo => {
default => 0,
regex => qr/^[1|0]$/,
},
},
);
my $self = {};
$self->{params} = \%params;
$self->{trigger_pending} = 0;
bless $self, $class;
my $logger = Log::Log4perl->get_logger();
$self->{logger} = $logger;
$logger->debug( "Monitor hdparm params:\n" . Dump( \%params ) );
return $self;
}
=head2 run
Run the hdparm spindown Monitor
=cut
sub run {
my $self = shift;
my $logger = $self->{logger};
$logger->info( "Monitor started running: hdparm" );
my $conditions_met = 1;
# Test each disk
foreach my $disk ( @{ $self->{params}->{disks} } ) {
$logger->debug( "Monitor hdparm testing $disk" );
my @cmd = ( qw/hdparm -C/, $disk );
if ( $self->{params}->{use_sudo} ) {
unshift( @cmd, 'sudo' );
}
$logger->debug( "Monitor hdparm CMD: " . join( ' ', @cmd ) );
my ( $in, $out, $err );
if ( not IPC::Run::run( \@cmd, \$in, \$out, \$err, IPC::Run::timeout( 10 ) ) ) {
$logger->warn( "Could not run '" . join( ' ', @cmd ) . "': $!" );
}
if ( $err ) {
$logger->error( "Monitor hdparm: $err" );
$conditions_met = 0;
}
( run in 0.480 second using v1.01-cache-2.11-cpan-39bf76dae61 )