diff options
| -rwxr-xr-x | bin/icli | 52 | 
1 files changed, 33 insertions, 19 deletions
| @@ -7,13 +7,14 @@ use 5.010;  use Getopt::Long qw/:config bundling/;  use Term::ANSIColor; -my ($data, $cache, $extra); +my ($cache, $config, $data, $extra); +my $config_file = '/var/cache/icinga/objects.cache';  my $status_file = '/var/lib/icinga/status.dat';  my $context;  my $colours = 1;  my $short = 0;  my $list_type = 's'; -my ($for_host); +my (@for_hosts);  sub have_host {  	my ($host) = @_; @@ -35,8 +36,8 @@ sub with_colour {  	}  } -sub read_status_line { -	my ($line) = @_; +sub read_objects_line { +	my ($line, $ref) = @_;  	if ($line =~ / ^ (?<context> \w+) \s+ { /x) {  		$context = $+{context}; @@ -47,16 +48,22 @@ sub read_status_line {  	elsif ($line =~ / ^ \t* } \s* $ /x) {  		given($context) {  			when(['info', 'programstatus']) { -				$data->{$context} = $cache; +				${$ref}->{$context} = $cache;  			}  			when('hoststatus') { -				$data->{hosts}->{$cache->{host_name}} = $cache; +				${$ref}->{hosts}->{$cache->{host_name}} = $cache;  			}  			when('servicestatus') { -				push(@{$data->{services}->{$cache->{host_name}}}, $cache); +				push(@{${$ref}->{services}->{$cache->{host_name}}}, $cache);  			}  			when('contactstatus') { -				push(@{$data->{contacts}}, $cache); +				push(@{${$ref}->{contacts}}, $cache); +			} +			when('hostgroup') { +				${$ref}->{hostgroups}->{$cache->{hostgroup_name}} = $cache; +			} +			when([qw[timeperiod command contactgroup contact host service]]) { +				# skipped for now  			}  			default {  				warn("Unknown field in $status_file: $context\n"); @@ -66,11 +73,13 @@ sub read_status_line {  	}  } -sub read_status { -	open(my $fh, '<', $status_file); +sub read_objects { +	my ($file, $ref) = @_; + +	open(my $fh, '<', $file);  	while (my $line = <$fh>) {  		chomp($line); -		read_status_line($line); +		read_objects_line($line, $ref);  	}  	close($fh);  } @@ -168,20 +177,25 @@ sub display_host {  GetOptions(  	'C|no-colours'    => sub { $colours = 0 },  	'f|status-file=s' => \$status_file, -	'h|host=s'        => \$for_host, +	'h|host=s'        => sub { push(@for_hosts, split(/,/, $_[1])) },  	'l|list=s'        => sub { $list_type = substr($_[1], 0, 1) },  	's|short'         => \$short,  ); -read_status(); +read_objects($status_file, \$data);  enhance_status(); -if ($for_host) { -	if (have_host($for_host)) { -		display_host($for_host, 0); -	} -	else { -		die("Unknown host: $for_host (You need to use the Alias name)\n"); +if (@for_hosts) { +	foreach my $host (@for_hosts) { +		if (have_host($host)) { +			display_host( +				$host, +				( @for_hosts > 1), +			); +		} +		else { +			die("Unknown host: $host\n"); +		}  	}  }  elsif ($list_type eq 's') { | 
