#!/usr/bin/env perl

#  Copyright (C) 2011 DeNA Co.,Ltd.
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#   along with this program; if not, write to the Free Software
#  Foundation, Inc.,
#  51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

use strict;
use warnings FATAL => 'all';

use English qw(-no_match_vars);
use Getopt::Long qw(:config pass_through);
use Pod::Usage;
use MHA::MasterMonitor;
use MHA::ManagerConst;

my $help;
my $version;

$| = 1;

GetOptions(
  'help'    => \$help,
  'version' => \$version,
);

if ($version) {
  print "masterha_master_monitor version $MHA::ManagerConst::VERSION.\n";
  exit 0;
}

if ($help) {
  pod2usage(0);
}

my ( $exit_code, $dead_master, $ssh_reachable ) =
  MHA::MasterMonitor::main( "--monitor_only", @ARGV );

if ( $dead_master->{hostname} ) {
  print "Master $dead_master->{hostname} is dead!\n";
  print "IP Address: $dead_master->{ip} ";
  print "Port: $dead_master->{port}\n";
}

if ( $exit_code && $exit_code eq "0" ) {
  if ($ssh_reachable) {
    print "SSH: reachable\n";
  }
  else {
    print "SSH: NOT reachable\n";
  }
  exit 0;
}
exit 1 if ( !defined($exit_code) );
exit $exit_code;

# ############################################################################
# Documentation
# ############################################################################

=pod

=head1 NAME

masterha_master_monitor - Monitoring MySQL master server availability

=head1 SYNOPSIS

masterha_master_monitor --global_conf=/etc/masterha_default.cnf --conf=/usr/local/masterha/app1.cnf 

=head1 DESCRIPTION

masterha_master_monitor is intended to be invoked from masterha_manager.


