]> git.proxmox.com Git - pve-ha-manager.git/commitdiff
improve status API
authorDietmar Maurer <dietmar@proxmox.com>
Fri, 3 Apr 2015 04:47:07 +0000 (06:47 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 3 Apr 2015 04:47:07 +0000 (06:47 +0200)
src/PVE/API2/HA/Status.pm
src/ha-manager

index 7be06644f967ebf6271106f5d88a0451da6d1961..2a690d3a5bf12b29bab1ac7855433fe30a91473a 100644 (file)
@@ -30,9 +30,38 @@ my $timestamp_to_status = sub {
     }
 };
 
+__PACKAGE__->register_method ({
+    name => 'index', 
+    path => '', 
+    method => 'GET',
+    permissions => { user => 'all' },
+    description => "Directory index.",
+    parameters => {
+       additionalProperties => 0,
+       properties => {},
+    },
+    returns => {
+       type => 'array',
+       items => {
+           type => "object",
+           properties => {},
+       },
+       links => [ { rel => 'child', href => "{name}" } ],
+    },
+    code => sub {
+       my ($param) = @_;
+    
+       my $result = [
+           { name => 'current' },
+           { name => 'manager_status' },
+           ];
+
+       return $result;
+    }});
+
 __PACKAGE__->register_method ({
     name => 'status', 
-    path => '',
+    path => 'current',
     method => 'GET',
     description => "Get HA manger status.",
     parameters => {
@@ -92,6 +121,36 @@ __PACKAGE__->register_method ({
        return $res;
     }});
 
+__PACKAGE__->register_method ({
+    name => 'manager_status', 
+    path => 'manager_status',
+    method => 'GET',
+    description => "Get full HA manger status, including LRM status.",
+    parameters => {
+       additionalProperties => 0,
+       properties => {},
+    },
+    returns => { type => 'object' },
+    code => sub {
+       my ($param) = @_;
 
+       my $haenv = PVE::HA::Env::PVE2->new($nodename);
+
+       my $status = $haenv->read_manager_status();
+       
+       my $data = { manager_status => $status };
+
+       $data->{quorum} = {
+           node => $nodename,
+           quorate => PVE::Cluster::check_cfs_quorum(1),
+       };
+       
+       foreach my $node (sort keys %{$status->{node_status}}) {
+           my $lrm_status = $haenv->read_lrm_status($node);
+           $data->{lrm_status}->{$node} = $lrm_status;
+       }
+
+       return $data;
+    }});
 
 1;
index cf9eb7725d6390932cb468475a54ef014070a0b5..0556f73b755ab01f0482a87afdf548f77f379911 100755 (executable)
@@ -14,6 +14,7 @@ use PVE::Cluster;
 use PVE::HA::Tools;
 use PVE::API2::HA::Resources;
 use PVE::API2::HA::Groups;
+use PVE::API2::HA::Status;
 use PVE::HA::Env::PVE2;
 
 use base qw(PVE::CLIHandler);
@@ -99,45 +100,15 @@ __PACKAGE__->register_method ({
     code => sub {
        my ($param) = @_;
 
-       PVE::Cluster::check_cfs_quorum();
-       
-       my $haenv = PVE::HA::Env::PVE2->new($nodename);
-       
-       my $status = $haenv->read_manager_status();
-       my $verbose_data = { manager_status => $status };
-
-       my $ctime = $haenv->get_time();
-
-       if (defined($status->{master_node}) && defined($status->{timestamp})) {
-           my $master = $status->{master_node};
-           my $status_str = &$timestamp_to_status($ctime, $status->{timestamp});
-       
-           my $time_str = localtime($status->{timestamp});
-           print "master_node: $master ($status_str, $time_str)\n";
-       } else {
-           print "master_node: -\n";
+       my $res = PVE::API2::HA::Status->status({});
+       foreach my $e (@$res) {
+           print "$e->{type} $e->{status}\n";
        }
-       
-       foreach my $node (sort keys %{$status->{node_status}}) {
-           my $lrm_status = $haenv->read_lrm_status($node);
-           $verbose_data->{lrm_status}->{$node} = $lrm_status;
-           if (!$lrm_status->{timestamp}) {
-               print "lrm_status: $node (unable to read lrm status)\n";
-           } else {
-               my $status_str = &$timestamp_to_status($ctime, $lrm_status->{timestamp});
-               my $time_str = localtime($lrm_status->{timestamp});
-               print "lrm_status: $node ($status_str, $time_str)\n";
-           }
-       }
-
-       foreach my $sid (sort keys %{$status->{service_status}}) {
-           my $d = $status->{service_status}->{$sid};
-           print "service_state: $sid (node $d->{node}, $d->{state})\n"; 
-       }
-       
+               
        if ($param->{verbose}) {
            print "full cluster state:\n";
-           print to_json($verbose_data, { pretty => 1, canonical => 1} );
+           my $data = PVE::API2::HA::Status->manager_status({});
+           print to_json($data, { pretty => 1, canonical => 1} );
        }
        
        return undef;