]> git.immae.eu Git - perso/Immae/Config/Nix.git/blame - modules/private/monitoring/plugins/check_emails
Add e-mail relay monitoring for backup-2 and monitoring-1
[perso/Immae/Config/Nix.git] / modules / private / monitoring / plugins / check_emails
CommitLineData
71a2425e
IB
1#!/usr/bin/env perl
2
3use strict;
4use Getopt::Std;
5use File::Basename;
6use Date::Parse;
7use POSIX qw(strftime);
8
9$| = 1;
10
11my %opts;
12getopts('hH:l:s:p:f:i:n:r:', \%opts);
13
14my $STATE_OK = 0;
15my $STATE_WARNING = 1;
16my $STATE_CRITICAL = 2;
17my $STATE_UNKNOWN = 3;
18
19if ($opts{'h'} || scalar(%opts) == 0) {
20 &print_help();
21 exit($STATE_OK);
22}
23
24my $port = $opts{'p'};
25my $host = $opts{'H'};
26my $login = $opts{'l'};
27if ($login ne '') {
28 $login = "$login@";
29}
30
31my $identity = $opts{'i'};
32my $local_directory = $opts{'n'};
33my $return_path = $opts{'r'};
34
35my @emails_to_send = split(/,/, $opts{'s'});
36my @emails_to_expect = split(/,/, $opts{'f'});
37
38my $cmd_result;
39if ($local_directory ne '') {
ef0a9217 40 if (@emails_to_expect and ! -d $local_directory) {
71a2425e
IB
41 print "Emails $host UNKNOWN - Could not find local directory";
42 exit($STATE_UNKNOWN);
43 }
44 $cmd_result = `send_mails $local_directory $return_path @emails_to_send 2>&1`;
45} else {
46 $cmd_result = `ssh -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -p $port -i $identity $login$host send_mails @emails_to_send 2>&1`;
47
48 if ($cmd_result =~ /Host key verification failed./) {
49 print "Emails $host UNKNOWN - Could not connect to host with ssh key\n";
50 exit($STATE_UNKNOWN);
51 }
52}
53
54my @lines = split(/\n/, $cmd_result);
55
56my %found_emails;
57
58foreach my $line (@lines) {
59 my @split_line = split(/;/, $line, 2);
60 $found_emails{$split_line[0]} = $split_line[1];
61}
62
63my $output = "";
64foreach my $email_from (@emails_to_expect) {
65 my @email_split = split(/:/, $email_from);
66 my $email = $email_split[0];
67 my $from = $email_split[1];
68
69 if ( exists $found_emails{$email} ) {
70 my $email_date = str2time($found_emails{$email});
71 my $current_date = strftime "%s", localtime;
72
73 if ($current_date - $email_date > 60*30) {
74 $output = "$output$email ($found_emails{$email} from $from) ";
75 }
76 } else {
77 $output = "$output$email (missing) "
78 }
79}
80
81if ($output ne '') {
82 print "Emails $host CRITICAL - expecting emails: $output\n";
83 exit($STATE_CRITICAL);
84} else {
85 print "Emails $host OK\n";
86 exit($STATE_OK);
87}
88
89sub print_help() {
90 print << "EOF";
91Check sent emails
92
93Options:
94-h
95 Print detailed help screen
96
97-H
98 Host to check
99
100-l
101 Login
102
103-i
104 Identity file
105
106-n
107 Don’t use ssh, pass that directory to script
108
109-r
110 Return path for local e-mails
111
112-s
113 Comma separated list of emails to send from the host.
114
115-f
116 Comma separated list of emails to expect on the host.
117EOF
118}
119