On 5/28/20 4:41 PM, Alwin Antreich wrote: > Luminous, Nautilus and Octopus. In Octopus the mon_status was dropped. > Also the ceph status was cleaned up and doesn't provide the mgrmap and > monmap. > > The rados queries used in the ceph status API endpoints (cluster / node) > were factored out and merged to one place. > > Signed-off-by: Alwin Antreich <a.antre...@proxmox.com> > --- > note: as discussed off-list with Dominik, the status API call could also > be split into multiple API calls. To provide mgrmap, monmap and > status separately. > > PVE/API2/Ceph.pm | 5 +---- > PVE/API2/Ceph/MON.pm | 6 +++--- > PVE/API2/Ceph/OSD.pm | 2 +- > PVE/API2/Cluster/Ceph.pm | 5 +---- > PVE/Ceph/Tools.pm | 13 +++++++++++++ > www/manager6/ceph/StatusDetail.js | 7 ++++--- > 6 files changed, 23 insertions(+), 15 deletions(-) > > diff --git a/PVE/API2/Ceph.pm b/PVE/API2/Ceph.pm > index 85a04101..afc1bdbd 100644 > --- a/PVE/API2/Ceph.pm > +++ b/PVE/API2/Ceph.pm > @@ -580,10 +580,7 @@ __PACKAGE__->register_method ({ > > PVE::Ceph::Tools::check_ceph_inited(); > > - my $rados = PVE::RADOS->new(); > - my $status = $rados->mon_command({ prefix => 'status' }); > - $status->{health} = $rados->mon_command({ prefix => 'health', detail => > 'detail' }); > - return $status; > + return PVE::Ceph::Tools::ceph_cluster_status(); > }}); > > __PACKAGE__->register_method ({ > diff --git a/PVE/API2/Ceph/MON.pm b/PVE/API2/Ceph/MON.pm > index 3baeac52..b33b8700 100644 > --- a/PVE/API2/Ceph/MON.pm > +++ b/PVE/API2/Ceph/MON.pm > @@ -130,7 +130,7 @@ __PACKAGE__->register_method ({ > my $monhash = PVE::Ceph::Services::get_services_info("mon", $cfg, > $rados); > > if ($rados) { > - my $monstat = $rados->mon_command({ prefix => 'mon_status' }); > + my $monstat = $rados->mon_command({ prefix => 'quorum_status' }); > > my $mons = $monstat->{monmap}->{mons}; > foreach my $d (@$mons) { > @@ -338,7 +338,7 @@ __PACKAGE__->register_method ({ > my $monsection = "mon.$monid"; > > my $rados = PVE::RADOS->new(); > - my $monstat = $rados->mon_command({ prefix => 'mon_status' }); > + my $monstat = $rados->mon_command({ prefix => 'quorum_status' }); > my $monlist = $monstat->{monmap}->{mons}; > my $monhash = PVE::Ceph::Services::get_services_info('mon', $cfg, > $rados); > > @@ -356,7 +356,7 @@ __PACKAGE__->register_method ({ > # reopen with longer timeout > $rados = PVE::RADOS->new(timeout => > PVE::Ceph::Tools::get_config('long_rados_timeout')); > $monhash = PVE::Ceph::Services::get_services_info('mon', $cfg, > $rados); > - $monstat = $rados->mon_command({ prefix => 'mon_status' }); > + $monstat = $rados->mon_command({ prefix => 'quorum_status' }); > $monlist = $monstat->{monmap}->{mons}; > > my $addr; > diff --git a/PVE/API2/Ceph/OSD.pm b/PVE/API2/Ceph/OSD.pm > index a514c502..ceaed129 100644 > --- a/PVE/API2/Ceph/OSD.pm > +++ b/PVE/API2/Ceph/OSD.pm > @@ -344,7 +344,7 @@ __PACKAGE__->register_method ({ > > # get necessary ceph infos > my $rados = PVE::RADOS->new(); > - my $monstat = $rados->mon_command({ prefix => 'mon_status' }); > + my $monstat = $rados->mon_command({ prefix => 'quorum_status' }); > > die "unable to get fsid\n" if !$monstat->{monmap} || > !$monstat->{monmap}->{fsid}; > my $fsid = $monstat->{monmap}->{fsid}; > diff --git a/PVE/API2/Cluster/Ceph.pm b/PVE/API2/Cluster/Ceph.pm > index e18d421e..c0277221 100644 > --- a/PVE/API2/Cluster/Ceph.pm > +++ b/PVE/API2/Cluster/Ceph.pm > @@ -142,10 +142,7 @@ __PACKAGE__->register_method ({ > > PVE::Ceph::Tools::check_ceph_inited(); > > - my $rados = PVE::RADOS->new(); > - my $status = $rados->mon_command({ prefix => 'status' }); > - $status->{health} = $rados->mon_command({ prefix => 'health', detail => > 'detail' }); > - return $status; > + return PVE::Ceph::Tools::ceph_cluster_status(); > } > }); > > diff --git a/PVE/Ceph/Tools.pm b/PVE/Ceph/Tools.pm > index 3273c7d1..b4a83f2e 100644 > --- a/PVE/Ceph/Tools.pm > +++ b/PVE/Ceph/Tools.pm > @@ -468,4 +468,17 @@ sub get_real_flag_name { > return $flagmap->{$flag} // $flag; > } > > +sub ceph_cluster_status { > + my ($rados) = @_; > + $rados = PVE::RADOS->new() if !$rados; > + > + my $status = $rados->mon_command({ prefix => 'status' }); > + > + $status->{health} = $rados->mon_command({ prefix => 'health', detail => > 'detail' }); > + $status->{monmap} = $rados->mon_command({ prefix => 'mon dump' });
Guarding this could be one way but at least doing it only if $status->{xy} isn't already defined would avoid (useless?) extra calls in the nautilus case? > + $status->{mgrmap} = $rados->mon_command({ prefix => 'mgr dump' }); > + > + return $status; > +} > + > 1; > diff --git a/www/manager6/ceph/StatusDetail.js > b/www/manager6/ceph/StatusDetail.js > index 8185e3bb..6561eba3 100644 > --- a/www/manager6/ceph/StatusDetail.js > +++ b/www/manager6/ceph/StatusDetail.js > @@ -263,9 +263,10 @@ Ext.define('PVE.ceph.StatusDetail', { > > // update osds counts > > - var total_osds = osdmap.osdmap.num_osds || 0; > - var in_osds = osdmap.osdmap.num_in_osds || 0; > - var up_osds = osdmap.osdmap.num_up_osds || 0; > + // pre-octopus || octopus || 0 > + var total_osds = osdmap.osdmap.num_osds || osdmap.num_osds || 0; > + var in_osds = osdmap.osdmap.num_in_osds || osdmap.num_in_osds || 0; > + var up_osds = osdmap.osdmap.num_up_osds || osdmap.num_up_osds || 0; > var out_osds = total_osds - in_osds; > var down_osds = total_osds - up_osds; > > _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel