ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ#!/usr/bin/perl ############### # # check_cpanel_backups # ############### use strict; use Getopt::Long; use Data::Dumper; use File::Basename; use JSON; use DateTime; use vars qw($opt_h $output $opt_d); my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4); my $path="/usr/lib64/nagios/plugins"; my $opt_d = 3; Getopt::Long::Configure('bundling'); GetOptions ("h|help" => \$opt_h, "help", "d|days=i" => \$opt_d, ); my $program = basename($0); sub print_help () { print " Check cPanel backup status and its date. Example if the backup is not older than 2 days: Example: $program -d 2 "; } if ($opt_h) { print_help(); exit $ERRORS{'OK'}; } my $exit_status=0; my @output = (); my $accounts = decode_json `whmapi1 --output=json listaccts`; my @accounts_names=(); foreach my $account (@{$accounts->{'data'}->{'acct'}}) { unless ($account->{'suspended'}){ my $backup_status = decode_json `uapi --output=json --user=$account->{'user'} Backup list_backups`; #print Dumper ($backup_status); my $date = @{$backup_status->{'result'}->{'data'}}[0]; my $today = DateTime->now; my $finished = DateTime->new( year => (split(/-/,$date))[0], month => (split(/-/,$date))[1], day => (split(/-/,$date))[2], ); my $duration = $today-$finished; my $days = (30*$duration->{'months'})+$duration->{'days'}; if (not $backup_status->{'result'}->{'status'} or $backup_status->{'result'}->{'errors'} or ($days > $opt_d)){ push @output,"'$account->{'user'}' backup is $days old, errors: $backup_status->{'result'}->{'errors'}"; $exit_status = 2; } } } $output = join '
', @output; if ($exit_status > 0){ print "$output\n"; exit $ERRORS{'CRITICAL'}; } print "All cPanel backup is OK\n"; exit $ERRORS{'OK'};