#!/usr/bin/env perl
use JSON qw(decode_json);
use Sys::Hostname;
use Getopt::Long;
use strict;
use warnings;

my @services;
my $verbose;
my $version;
my $releasetype;

GetOptions (
 "service=s{1}"     => \@services,
 "verbose"          => \$verbose,
 "version=s"        => \$version,
 "releasetype=s"    => \$releasetype,
);

sub help {
  print "Usage: $0 --service=\$SERVICE.\$ID --service=\$SERVICE.\$ID --verbose --version=X.X.X --releasetype=NAME\n";
  exit 1;
}

if ( (!@services) or (not defined $version) or (not defined $releasetype) ) {
  help();
}

my $service;
my @alarms;
my @checked;
foreach $service (@services) {
  if($verbose) { print "running loop service $service\n"; }

    push @checked, "$service";

    if($verbose) { print "running command: /usr/bin/ceph daemon $service version 2>&1\n"; }
    my $json = `/usr/bin/ceph daemon $service version 2>&1`;
    my $json_out = eval { decode_json($json) };

    # If not valid JSON, then set alarm
    if ($@) {
      push @alarms, "NOT-RUNNING: $service";
      next;
    }

    if ($json_out->{version} ne $version) {
      push @alarms, "INVALID-VERSION: $service";
    }

    if ($json_out->{release_type} ne $releasetype) {
      push @alarms, "INVALID-RELEASETYPE: $service";
    }
}

if (@alarms) {
  my $brokenServices = join(' ', @alarms);
  print "CRITICAL - $brokenServices\n";
  exit 2;
} 

my $checkedServices = join(' ', @checked);
print "OK - Checked: $checkedServices \n";
exit 0;
