From 90c4a0a24f3d63c1551c6a9de0b509df0718b650 Mon Sep 17 00:00:00 2001
From: lin-hua-cheng <os.lcheng@gmail.com>
Date: Thu, 19 Feb 2015 18:08:17 -0800
Subject: [PATCH] Add ability for diplaying hypervisor statistics

Added new command 'hypervisor stats show' for displaying
the hypervisor stats over all compute nodes.

Change-Id: I4f98c69135b04d4f6cea67cd6350d5d99fb79dba
Partial-Bug: #1423748
---
 .../command-objects/hypervisor-stats.rst      | 16 +++++++++
 doc/source/commands.rst                       |  1 +
 .../compute/v2/hypervisor_stats.py            | 33 +++++++++++++++++++
 setup.cfg                                     |  2 ++
 4 files changed, 52 insertions(+)
 create mode 100644 doc/source/command-objects/hypervisor-stats.rst
 create mode 100644 openstackclient/compute/v2/hypervisor_stats.py

diff --git a/doc/source/command-objects/hypervisor-stats.rst b/doc/source/command-objects/hypervisor-stats.rst
new file mode 100644
index 0000000000..06edf7a1e9
--- /dev/null
+++ b/doc/source/command-objects/hypervisor-stats.rst
@@ -0,0 +1,16 @@
+================
+hypervisor stats
+================
+
+Compute v2
+
+hypervisor stats show
+---------------------
+
+Display hypervisor stats details
+
+.. program:: hypervisor stats show
+.. code:: bash
+
+    os hypervisor stats show
+
diff --git a/doc/source/commands.rst b/doc/source/commands.rst
index b621f8c846..42d041afbd 100644
--- a/doc/source/commands.rst
+++ b/doc/source/commands.rst
@@ -88,6 +88,7 @@ referring to both Compute and Volume quotas.
 * ``group``: (**Identity**) a grouping of users
 * ``host``: Compute - the physical computer running a hypervisor
 * ``hypervisor``: (**Compute**) the virtual machine manager
+* ``hypervisor stats``: (**Compute**) hypervisor statistics over all compute nodes
 * ``identity provider``: (**Identity**) a source of users and authentication
 * ``image``: (**Image**) a disk image
 * ``ip fixed``: Compute, Network - an internal IP address assigned to a server
diff --git a/openstackclient/compute/v2/hypervisor_stats.py b/openstackclient/compute/v2/hypervisor_stats.py
new file mode 100644
index 0000000000..43ba9fc8ed
--- /dev/null
+++ b/openstackclient/compute/v2/hypervisor_stats.py
@@ -0,0 +1,33 @@
+#   Licensed under the Apache License, Version 2.0 (the "License"); you may
+#   not use this file except in compliance with the License. You may obtain
+#   a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#   License for the specific language governing permissions and limitations
+#   under the License.
+#
+
+
+"""Hypervisor Stats action implementations"""
+
+import logging
+import six
+
+from cliff import show
+
+
+class ShowHypervisorStats(show.ShowOne):
+    """Display hypervisor stats details"""
+
+    log = logging.getLogger(__name__ + ".ShowHypervisorStats")
+
+    def take_action(self, parsed_args):
+        self.log.debug("take_action(%s)", parsed_args)
+        compute_client = self.app.client_manager.compute
+        hypervisor_stats = compute_client.hypervisors.statistics().to_dict()
+
+        return zip(*sorted(six.iteritems(hypervisor_stats)))
diff --git a/setup.cfg b/setup.cfg
index 4da2bfa0e6..49a3193228 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -82,6 +82,8 @@ openstack.compute.v2 =
     hypervisor_list = openstackclient.compute.v2.hypervisor:ListHypervisor
     hypervisor_show = openstackclient.compute.v2.hypervisor:ShowHypervisor
 
+    hypervisor_stats_show = openstackclient.compute.v2.hypervisor_stats:ShowHypervisorStats
+
     ip_fixed_add = openstackclient.compute.v2.fixedip:AddFixedIP
     ip_fixed_remove = openstackclient.compute.v2.fixedip:RemoveFixedIP