diff options
| author | Paul Buetow <paul@buetow.org> | 2015-01-02 13:27:02 +0100 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2015-01-02 13:27:02 +0100 |
| commit | 336c6c8a415603c772f97ccd63912d05209f3795 (patch) | |
| tree | 1a0febb81031d77fa8bec857333cce0a6d87436e /lib/PINGDOMFETCH/Notify.pm | |
initial1.0.0
Diffstat (limited to 'lib/PINGDOMFETCH/Notify.pm')
| -rw-r--r-- | lib/PINGDOMFETCH/Notify.pm | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/lib/PINGDOMFETCH/Notify.pm b/lib/PINGDOMFETCH/Notify.pm new file mode 100644 index 0000000..07301fd --- /dev/null +++ b/lib/PINGDOMFETCH/Notify.pm @@ -0,0 +1,163 @@ +package PINGDOMFETCH::Notify; + +use strict; +use warnings; + +use PINGDOMFETCH::Config; +use PINGDOMFETCH::DateHelper; +use PINGDOMFETCH::Display; +use PINGDOMFETCH::Utils; + +use MIME::Lite; + +our @ISA = ('PINGDOMFETCH::Display'); + +sub new { + my ( $class, %vals ) = @_; + + my $self = bless \%vals, $class; + + my $config = $self->{config}; + + $self->{message} = []; + $self->{warnings} = 0; + $self->{criticals} = 0; + + return $self; +} + +sub message_push { + my ( $self, $message ) = @_; + + push @{ $self->{message} }, $message; + + return undef; +} + +sub message_unshift { + my ( $self, $message ) = @_; + + my $config = $self->{config}; + unshift @{ $self->{message} }, $message; + + return undef; +} + +sub has_messages { + my ($self) = @_; + + return @{ $self->{message} } > 0 ? 1 : 0; +} + +sub has_warnings { + my ($self) = @_; + + return $self->{warnings} > 0 ? 1 : 0; +} + +sub has_criticals { + my ($self) = @_; + + return $self->{criticals} > 0 ? 1 : 0; +} + +sub info_notification_send { + my ($self) = @_; + + my $config = $self->{config}; + $self->notification_send_to( $config->array('notify.info.email.to') ); + + return undef; +} + +sub notification_send { + my ($self) = @_; + + my $config = $self->{config}; + $self->notification_send_to( $config->array('notify.email.to') ); + + return undef; +} + +sub notification_send_to { + my ( $self, @email_to ) = @_; + + return if !$self->has_messages(); + + my $config = $self->{config}; + my $from = $config->get('notify.email.sender'); + my $warning_less = $config->get('warning.if.avail.is.less'); + my $critical_less = $config->get('critical.if.avail.is.less'); + + my ( $dh_from, $dh_to ) = ( $config->{'dh_from'}, $config->{'dh_to'} ); + my $message = join '', @{ $self->{message} }; + + my $subject = do { + if ( $self->has_criticals() ) { + '!! '; + } + elsif ( $self->has_warnings() ) { + '! '; + } + else { + ' '; + } + }; + + $subject .= 'Availability stats for '; + + if ( $dh_from->is_begin_of_a_day() + and $dh_to->is_begin_of_a_day() + and 1 == $dh_from->days_until($dh_to) ) + { + $subject .= $dh_from->day_str(); + } + else { + $subject .= "'$dh_from' - '$dh_to'"; + } + + $message .= "Legend:\n"; + $message .= +"'!' means: TLS or Service Availability is less than $warning_less% (Exception: Threshold is non-standard)\n"; + $message .= "'!!' means: TLS Availability is less than $critical_less%\n\n"; + $message .= +"Response times are not reasonable (collected from all over the world)!\n"; + + $message .= "\n" . get_version_full(); + + unless ( $config->bool('arg.notify-dummy') ) { + $self->send_mail( $from, $_, $subject, $message ) for @email_to; + + } + else { + $self->info("Dummy-Email to stdout"); + + say $subject; + say ""; + say $message; + } + + $self->{messages} = []; + + return undef; +} + +sub send_mail { + my ( $self, $from, $to, $subject, $message ) = @_; + + my $email = MIME::Lite->new( + From => $from, + To => $to, + Subject => $subject, + Type => 'TEXT', + Data => $message, + ); + + $self->info("Sending email '$subject' to '$to'"); + $email->send(); + + return undef; +} + +1; + |
