����JFIF��x�x����'
| Server IP : 78.140.185.180 / Your IP : 216.73.216.169 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/1630575/task/1630575/root/proc/1630575/root/lib64/nagios/plugins/extra/ |
Upload File : |
#!/usr/bin/env perl
use strict;
use warnings;
use feature qw(say);
use LWP::UserAgent;
use Time::Piece;
use YAML::XS qw(LoadFile);
use JSON::XS;
use Getopt::Long;
my $cur_date = localtime()->ymd;
my $cur_hour = localtime()->hour;
my $es_conf = '/root/.elastic';
if ( !-f $es_conf) {
say 'cannot find Elastic config!';
exit 3;
}
my ( $opt_w, $opt_c, $opt_o, $opt_h );
my $exitcode = '0';
my $msg = 'OK';
GetOptions(
"o|ok=i" => \$opt_o,
"w|warn=i" => \$opt_w,
"c|crit=i" => \$opt_c,
"h|help" => \$opt_h,
);
if ($opt_h) {
my $help_text = <<"END";
Usage: $0 -w 18 -c 21
Checks if today's Elasticsearch snapshot is created and valid.
-o|--ok Hour of the day BEFORE which the existence of snapshot is not checked.
-w|--warning Hour of the day AFTER which warning message is shown if backup is still in progress.
-c|--critical Hour of the day AFTER which critical message is shown if backup is still in progress.
-h|--help (--help) Show this help message
END
say $help_text;
exit;
}
$opt_o //= '5';
$opt_w //= '17';
$opt_c //= '20';
my $conf = LoadFile($es_conf);
my ( $host, $port, $repo ) = (
$conf->{server}->{address},
$conf->{server}->{port},
$conf->{server}->{repo}
);
# get all snapshots
my $all_snap_info = send_req( $host, $port, 'GET', '_snapshot/' . $repo . '/_all', 'no' );
my @today_snapshot =
$all_snap_info->{snapshots} ?
map { $_ } grep { $_->{snapshot} eq $cur_date } @{ $all_snap_info->{snapshots} } :
();
if (!@today_snapshot) {
if ( $cur_hour < $opt_o ) {
say $msg;
exit $exitcode;
}
say 'Backup not started yet!';
exit 2;
}
my $status = $today_snapshot[0]->{state};
if ( $status eq 'IN_PROGRESS' ) {
$exitcode = 1 if $cur_hour > $opt_w;
$exitcode = 2 if $cur_hour > $opt_c;
$msg = 'Snapshot is still being created. Maybe something goes wrong.' if $exitcode;
} else {
unless ( $status eq 'SUCCESS' ) {
$exitcode = 3;
$msg = 'Something wrong with the snapshot, you have to review it.';
}
}
say $msg;
exit $exitcode;
# subs
sub send_req {
my ( $host, $port, $method, $uri, $fail, %params ) = @_;
my $hdr = HTTP::Headers->new( 'Content-Type' => 'application/json' );
my $url = 'http://' . $host . ':' . $port . '/' . $uri;
my $req = %params ?
HTTP::Request->new( $method, $url, $hdr, encode_json(\%params) ) :
HTTP::Request->new( $method, $url, $hdr );
my $ua = LWP::UserAgent->new();
$ua->timeout(10);
my $res;
for my $attempt ( 1 .. 3 ) {
$res = $ua->request($req);
if ($res->is_success) {
return decode_json($res->content);
}
$res->status_line =~ /500 Can't connect to/
? carp $res->status_line
: $fail eq 'yes'
? croak $res->status_line
: return decode_json($res->content);
sleep 1;
}
croak $res->status_line;
}