#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use utf8;
use open qw(:std :encoding(utf8));

# проверяет доступность всех директовых mysql баз
# по-умолчанию готовит вывод для monrun

my @error_msg;

my $cmd_master_errors = q(dbs sql -u direct-sql pr:monitor {pr,sb}:ppc:all pr:ppcdict pr:ppclog pr:ppclog:heavy 'select now()' 2>&1 | grep -vE 'now|\+-' | grep -v `date +%Y-%m-%d` | perl -lne 'if (/^pr:|^sb:/) { $last = $_ } else { print "$last" }' | sort -u | tr '\n' ' ');
my $master_errors = qx($cmd_master_errors);
chomp($master_errors);
push(@error_msg, "Master failed: $master_errors") if $master_errors;

my $cmd_rbac_ok = q(dbs sql -u direct-sql -B pr:rbac:all 'select now()' 2>&1 | grep -v now | grep `date +%Y-%m-%d`);
my $some_rbac_ok = qx($cmd_rbac_ok);
chomp($some_rbac_ok);
push(@error_msg, "All rbac failed") if !$some_rbac_ok;

my $cmd_ppcstat_ok = q(dbs sql -u direct-sql -B pr:ppcstat:all 'select now()' 2>&1 | grep -v now | grep `date +%Y-%m-%d`);
my $some_ppcstat_ok = qx($cmd_ppcstat_ok);
chomp($some_ppcstat_ok);
push(@error_msg, "All ppcstat failed") if !$some_ppcstat_ok;

my $cmd_multimaster_warns = q(dbs sql -u direct-sql pr:rbac:all pr:ppcstat:all 'select now()' 2>&1 | grep -vE 'now|\+-' | grep -v `date +%Y-%m-%d` | perl -lne 'if (/^pr:|^sb:/) { $last = $_ } else { print "$last" }' | sort -u | tr '\n' ' ');
my $multimaster_warns = qx($cmd_multimaster_warns);
chomp($multimaster_warns);

if (@error_msg) {
    printf "2;%s\n", join(", ", @error_msg);
} elsif ($multimaster_warns) {
    print "1;Some rbac or ppcstat replicas unreachable!: $multimaster_warns\n";
} else {
    print "0;OK\n";
}
