From 6e4b5b3d0c8dee5fbf91f799556707b7b8b3ec25 Mon Sep 17 00:00:00 2001 From: Shini31 Date: Mon, 14 Sep 2015 11:32:51 +0200 Subject: [PATCH] fix #152 - Add disco-show and disco-format options --- .../cloud/docker/mode/listcontainers.pm | 49 ++++++++++++++++--- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/centreon-plugins/cloud/docker/mode/listcontainers.pm b/centreon-plugins/cloud/docker/mode/listcontainers.pm index 2505a976f..0c2935e7e 100644 --- a/centreon-plugins/cloud/docker/mode/listcontainers.pm +++ b/centreon-plugins/cloud/docker/mode/listcontainers.pm @@ -32,7 +32,7 @@ sub new { my $self = $class->SUPER::new(package => __PACKAGE__, %options); bless $self, $class; - $self->{version} = '1.0'; + $self->{version} = '1.1'; $options{options}->add_options(arguments => { "hostname:s" => { name => 'hostname' }, @@ -50,6 +50,7 @@ sub new { }); $self->{http} = centreon::plugins::http->new(output => $self->{output}); + $self->{container_infos} = (); return $self; } @@ -64,7 +65,7 @@ sub check_options { $self->{http}->set_options(%{$self->{option_results}}) } -sub run { +sub api_request { my ($self, %options) = @_; my $jsoncontent = $self->{http}->request(); @@ -85,8 +86,8 @@ sub run { foreach my $val (@$webcontent) { my $containername = $val->{Names}->[0]; $containername =~ s/^\///; - my $containerid = $val->{Id}; - my $containerimage = $val->{Image}; + $self->{container_infos}->{$containername}->{id} = $val->{Id}; + $self->{container_infos}->{$containername}->{image} = $val->{Image}; my $containerstate; if (($val->{Status} =~ m/^Up/) && ($val->{Status} =~ m/^(?:(?!Paused).)*$/)) { $containerstate = 'Running'; @@ -95,9 +96,45 @@ sub run { } elsif ($val->{Status} =~ m/\(Paused\)$/) { $containerstate = 'Paused'; } - $self->{output}->output_add(long_msg => sprintf("%s [id = %s , image = %s, state = %s]", - $containername, $containerid, $containerimage, $containerstate)); + $self->{container_infos}->{$containername}->{state} = $containerstate; + } +} + +sub disco_format { + my ($self, %options) = @_; + + my $names = ['name', 'id', 'image', 'state']; + $self->{output}->add_disco_format(elements => $names); +} + +sub disco_show { + my ($self, %options) = @_; + + $self->api_request(); + + foreach my $containername (keys %{$self->{container_infos}}) { + $self->{output}->add_disco_entry(name => $containername, + id => $self->{container_infos}->{$containername}->{id}, + image => $self->{container_infos}->{$containername}->{image}, + state => $self->{container_infos}->{$containername}->{state}, + ); + } +} + +sub run { + my ($self, %options) = @_; + + $self->api_request(); + + foreach my $containername (keys %{$self->{container_infos}}) { + $self->{output}->output_add(long_msg => sprintf("%s [id = %s , image = %s, state = %s]", + $containername, + $self->{container_infos}->{$containername}->{id}, + $self->{container_infos}->{$containername}->{image}, + $self->{container_infos}->{$containername}->{state})); + } + $self->{output}->output_add(severity => 'OK', short_msg => 'List containers:');