#!/usr/bin/perl -w
use strict;
use warnings;
use File::Basename qw(dirname);
use Cwd qw(abs_path);
use JSON;
use Data::Dumper;

our %opts = (
    'name' => {
        type => "=s",
        help => "Object's name",
        required => 1
    },
    'managedobject' => {
        type => "=s",
        help => "Managed object type: ClusterComputeResource, Datacenter, HostSystem or VirtualMachine",
        required => 1
    }
);

sub warm_up_libs {
	use lib sprintf(
	    "%s/../../lib",
	    dirname(abs_path($0))
	);
	use OpMon::VMwareConnection;
}

sub main {
	my $counters;
	my $counter_info;
	my @json;
	my $opt;
	my $view;
	my $conn;
	my $ret;
	my $already_seen;
	my $counter_id;
	my $counter_name;

	warm_up_libs();
	Opts::add_options(%opts);
	Opts::parse();
	Opts::validate();

	eval {
		$conn = VMwareConnection->new();
		$conn->connect();

		$view = $conn->get_view(
		    Opts::get_option('name'),
		    Opts::get_option('managedobject')
		);

		$counters = $conn->get_available_counters(
		    $view
		);

		foreach(@$counters) {

			$counter_id = $_->{counterId};
			next if (defined $already_seen->{$counter_id});

			$counter_info = $conn->get_counter_info(
			    $counter_id
			);

			$counter_name = sprintf("%s %s",
			    $counter_info->{groupInfo}->{label},
			    $counter_info->{nameInfo}->{label}
			);

			$opt = {};
			$opt->{key} = $counter_name;
			$opt->{value} = $counter_id;
			push(@json, $opt);

			$already_seen->{$counter_id} = 1;
		}

	};
	if ($@) {
		$@ =~ s/[\n\r-]//g;

		$ret->{success} = 0;
		$ret->{message} = $@;
		$conn->disconnect();
		print encode_json($ret);
		exit 1;
	}

	$ret->{success} = 1;
	$ret->{data} = \@json;
	print encode_json($ret);
	exit 0;
}

main();

# usage example:
#
# ./get_managed_objects_counters.pl                                 \
#                                   --server 127.0.0.1              \
#                                   --portnumber 2000               \
#                                   --username opuser               \
#                                   --password 'pass'               \
#                                   --managedobject VirtualMachine  \
#                                   --name "HO3PARSR001SCZ"  
