#!/usr/bin/perl =head1 NAME loadcheck =head1 DESCRIPTION Only takes email transactions if the system load is at or below a specified level. =head1 CONFIG max_load This is the 1 minute system load where we won't take transactions if our load is higher than this value. (Default: 7) uptime The path to the command 'uptime' if different than the default. (Default: /usr/bin/uptime) Example: loadcheck max_load 7 uptime /usr/bin/uptime =over 4 =head1 AUTHOR Written by Peter Eisch . =cut my $VERSION = 0.01; sub register { my ($self, $qp, @args) = @_; %{$self->{_args}} = @args; $self->{_args}->{max_load} = 7 if (! defined $self->{_args}->{max_load}); $self->{_args}->{uptime} = '/usr/bin/uptime' if (! defined $self->{_args}->{uptime}); $self->register_hook("connect", "loadcheck"); } sub loadcheck { my ($self, $transaction) = @_; my $hiload = 0; my $cmd = $self->{_args}->{uptime}; #10:33AM up 2:06, 1 user, load averages: 6.55, 3.76, 2.48 # 12:29am 2 users, load average: 0.05, 0.05, 0.06 # 12:30am up 5 days, 12:43, 1 user, load average: 0.00, 0.00, 0.00 my $res = `$self->{_args}->{uptime}`; if ($res =~ /aver\S+: (\d+\.\d+)/) { $hiload = $1; } if ($hiload > $self->{_args}->{max_load}) { $self->log(LOGERROR, "local load too high: $hiload"); return DENYSOFT; } return (DECLINED, "continuing with load: $hiload"); }