]> git.proxmox.com Git - pve-manager.git/commitdiff
ceph: display pool usage information
authorDietmar Maurer <dietmar@proxmox.com>
Thu, 23 Jan 2014 07:28:26 +0000 (08:28 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Thu, 23 Jan 2014 07:28:26 +0000 (08:28 +0100)
PVE/API2/Ceph.pm
bin/pveceph
www/manager/node/Ceph.js

index 2db0c9f0e1b62b2695c3763cb5a6d7c6f68de751..33abf7c2d978937e4204284572e1741a009fc509 100644 (file)
@@ -1094,7 +1094,18 @@ __PACKAGE__->register_method ({
        PVE::CephTools::check_ceph_inited();
 
        my $rados = PVE::RADOS->new();
-       my $res = $rados->mon_command({ prefix => 'osd dump' });
+
+       my $stats = {};
+       my $res = $rados->mon_command({ prefix => 'df' });
+       my $total = $res->{stats}->{total_space} || 0;
+       $total = $total * 1024;
+       foreach my $d (@{$res->{pools}}) {
+           next if !$d->{stats};
+           next if !defined($d->{id});
+           $stats->{$d->{id}} = $d->{stats};
+       }
+
+       $res = $rados->mon_command({ prefix => 'osd dump' });
 
        my $data = [];
        foreach my $e (@{$res->{pools}}) {
@@ -1102,9 +1113,14 @@ __PACKAGE__->register_method ({
            foreach my $attr (qw(pool pool_name size min_size pg_num crush_ruleset)) {
                $d->{$attr} = $e->{$attr} if defined($e->{$attr});
            }
+           if (my $s = $stats->{$d->{pool}}) {
+               $d->{bytes_used} = $s->{bytes_used};
+               $d->{percent_used} = ($d->{bytes_used}*100)/$total if $total;
+           }
            push @$data, $d;
        }
 
+
        return $data;
     }});
 
index 12261082b32ce2e6e10a706f9e64cb1b4a8f04fb..d83c0c0756bf2a000d1c026a62885e9d8702be60 100755 (executable)
@@ -117,9 +117,9 @@ my $cmddef = {
     lspools => [ 'PVE::API2::Ceph', 'lspools', [], { node => $nodename }, sub {
        my $res = shift;
 
-       printf("%-20s %10s %10s\n", "Name", "size", "pg_num");
+       printf("%-20s %10s %10s %20s\n", "Name", "size", "pg_num", "used");
        foreach my $p (sort {$a->{pool_name} cmp $b->{pool_name}} @$res) {
-           printf("%-20s %10d %10d\n", $p->{pool_name}, $p->{size}, $p->{pg_num});
+           printf("%-20s %10d %10d %20d\n", $p->{pool_name}, $p->{size}, $p->{pg_num}, $p->{bytes_used});
        }
     }],
     createpool => [ 'PVE::API2::Ceph', 'createpool', ['name'], { node => $nodename }],
index 7bd9b8cb5dca811b9f48bc1a0191b86b58f5109b..596be9d24b402015afa6553f93156884840fc0bf 100644 (file)
@@ -165,6 +165,28 @@ Ext.define('PVE.node.CephPoolList', {
                    width: 50,
                    sortable: false,
                    dataIndex: 'crush_ruleset'
+               },
+               {
+                   header: gettext('Used'),
+                   columns: [
+                       {
+                           xtype: 'numbercolumn',
+                           header: '%',
+                           width: 80,
+                           sortable: true,
+                           align: 'right',
+                           format: '0.00',
+                           dataIndex: 'percent_used'
+                       },
+                       {
+                           header: gettext('Total'),
+                           width: 100,
+                           sortable: true,
+                           renderer: PVE.Utils.render_size,
+                           align: 'right',
+                           dataIndex: 'bytes_used'
+                       }
+                   ]
                }
            ],
            listeners: {
@@ -185,6 +207,8 @@ Ext.define('PVE.node.CephPoolList', {
                  { name: 'size', type: 'integer'}, 
                  { name: 'min_size', type: 'integer'}, 
                  { name: 'pg_num', type: 'integer'}, 
+                 { name: 'bytes_used', type: 'integer'}, 
+                 { name: 'percent_used', type: 'number'}, 
                  { name: 'crush_ruleset', type: 'integer'}
                ],
        idProperty: 'pool_name'