Merge "Add method to retrieve loadbalancer stats"
This commit is contained in:
@@ -93,3 +93,38 @@ class DeleteLoadBalancer(neutronV20.DeleteCommand):
|
|||||||
|
|
||||||
resource = 'loadbalancer'
|
resource = 'loadbalancer'
|
||||||
allow_names = True
|
allow_names = True
|
||||||
|
|
||||||
|
|
||||||
|
class RetrieveLoadBalancerStats(neutronV20.ShowCommand):
|
||||||
|
"""Retrieve stats for a given loadbalancer."""
|
||||||
|
|
||||||
|
resource = 'loadbalancer'
|
||||||
|
|
||||||
|
def get_data(self, parsed_args):
|
||||||
|
self.log.debug('run(%s)' % parsed_args)
|
||||||
|
neutron_client = self.get_client()
|
||||||
|
neutron_client.format = parsed_args.request_format
|
||||||
|
loadbalancer_id = neutronV20.find_resourceid_by_name_or_id(
|
||||||
|
self.get_client(), 'loadbalancer', parsed_args.id)
|
||||||
|
params = {}
|
||||||
|
if parsed_args.fields:
|
||||||
|
params = {'fields': parsed_args.fields}
|
||||||
|
|
||||||
|
data = neutron_client.retrieve_loadbalancer_stats(loadbalancer_id,
|
||||||
|
**params)
|
||||||
|
self.format_output_data(data)
|
||||||
|
stats = data['stats']
|
||||||
|
if 'stats' in data:
|
||||||
|
# To render the output table like:
|
||||||
|
# +--------------------+-------+
|
||||||
|
# | Field | Value |
|
||||||
|
# +--------------------+-------+
|
||||||
|
# | field1 | value1|
|
||||||
|
# | field2 | value2|
|
||||||
|
# | field3 | value3|
|
||||||
|
# | ... | ... |
|
||||||
|
# +--------------------+-------+
|
||||||
|
# it has two columns and the Filed column is alphabetical,
|
||||||
|
# here covert the data dict to the 1-1 vector format below:
|
||||||
|
# [(field1, field2, field3, ...), (value1, value2, value3, ...)]
|
||||||
|
return list(zip(*sorted(stats.items())))
|
||||||
|
@@ -203,6 +203,7 @@ COMMAND_V2 = {
|
|||||||
'lbaas-loadbalancer-create': lbaas_loadbalancer.CreateLoadBalancer,
|
'lbaas-loadbalancer-create': lbaas_loadbalancer.CreateLoadBalancer,
|
||||||
'lbaas-loadbalancer-update': lbaas_loadbalancer.UpdateLoadBalancer,
|
'lbaas-loadbalancer-update': lbaas_loadbalancer.UpdateLoadBalancer,
|
||||||
'lbaas-loadbalancer-delete': lbaas_loadbalancer.DeleteLoadBalancer,
|
'lbaas-loadbalancer-delete': lbaas_loadbalancer.DeleteLoadBalancer,
|
||||||
|
'lbaas-loadbalancer-stats': lbaas_loadbalancer.RetrieveLoadBalancerStats,
|
||||||
'lbaas-listener-list': lbaas_listener.ListListener,
|
'lbaas-listener-list': lbaas_listener.ListListener,
|
||||||
'lbaas-listener-show': lbaas_listener.ShowListener,
|
'lbaas-listener-show': lbaas_listener.ShowListener,
|
||||||
'lbaas-listener-create': lbaas_listener.CreateListener,
|
'lbaas-listener-create': lbaas_listener.CreateListener,
|
||||||
|
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from mox3 import mox
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0.lb.v2 import loadbalancer as lb
|
from neutronclient.neutron.v2_0.lb.v2 import loadbalancer as lb
|
||||||
from neutronclient.tests.unit import test_cli20
|
from neutronclient.tests.unit import test_cli20
|
||||||
|
|
||||||
@@ -129,3 +131,38 @@ class CLITestV20LbLoadBalancerJSON(test_cli20.CLITestV20Base):
|
|||||||
args = [my_id]
|
args = [my_id]
|
||||||
self._test_delete_resource(resource, cmd, my_id, args,
|
self._test_delete_resource(resource, cmd, my_id, args,
|
||||||
cmd_resource=cmd_resource)
|
cmd_resource=cmd_resource)
|
||||||
|
|
||||||
|
def test_retrieve_loadbalancer_stats(self):
|
||||||
|
# lbaas-loadbalancer-stats test_id.
|
||||||
|
resource = 'loadbalancer'
|
||||||
|
cmd = lb.RetrieveLoadBalancerStats(test_cli20.MyApp(sys.stdout), None)
|
||||||
|
my_id = self.test_id
|
||||||
|
fields = ['bytes_in', 'bytes_out']
|
||||||
|
args = ['--fields', 'bytes_in', '--fields', 'bytes_out', my_id]
|
||||||
|
|
||||||
|
self.mox.StubOutWithMock(cmd, "get_client")
|
||||||
|
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||||
|
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
||||||
|
query = "&".join(["fields=%s" % field for field in fields])
|
||||||
|
expected_res = {'stats': {'bytes_in': '1234', 'bytes_out': '4321'}}
|
||||||
|
resstr = self.client.serialize(expected_res)
|
||||||
|
path = getattr(self.client, "lbaas_loadbalancer_path_stats")
|
||||||
|
return_tup = (test_cli20.MyResp(200), resstr)
|
||||||
|
self.client.httpclient.request(
|
||||||
|
test_cli20.end_url(path % my_id, query), 'GET',
|
||||||
|
body=None,
|
||||||
|
headers=mox.ContainsKeyValue(
|
||||||
|
'X-Auth-Token', test_cli20.TOKEN)).AndReturn(return_tup)
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
cmd_parser = cmd.get_parser("test_" + resource)
|
||||||
|
parsed_args = cmd_parser.parse_args(args)
|
||||||
|
cmd.run(parsed_args)
|
||||||
|
|
||||||
|
self.mox.VerifyAll()
|
||||||
|
self.mox.UnsetStubs()
|
||||||
|
_str = self.fake_stdout.make_string()
|
||||||
|
self.assertIn('bytes_in', _str)
|
||||||
|
self.assertIn('1234', _str)
|
||||||
|
self.assertIn('bytes_out', _str)
|
||||||
|
self.assertIn('4321', _str)
|
||||||
|
@@ -341,6 +341,7 @@ class Client(ClientBase):
|
|||||||
|
|
||||||
lbaas_loadbalancers_path = "/lbaas/loadbalancers"
|
lbaas_loadbalancers_path = "/lbaas/loadbalancers"
|
||||||
lbaas_loadbalancer_path = "/lbaas/loadbalancers/%s"
|
lbaas_loadbalancer_path = "/lbaas/loadbalancers/%s"
|
||||||
|
lbaas_loadbalancer_path_stats = "/lbaas/loadbalancers/%s/stats"
|
||||||
lbaas_listeners_path = "/lbaas/listeners"
|
lbaas_listeners_path = "/lbaas/listeners"
|
||||||
lbaas_listener_path = "/lbaas/listeners/%s"
|
lbaas_listener_path = "/lbaas/listeners/%s"
|
||||||
lbaas_pools_path = "/lbaas/pools"
|
lbaas_pools_path = "/lbaas/pools"
|
||||||
@@ -937,6 +938,12 @@ class Client(ClientBase):
|
|||||||
return self.delete(self.lbaas_loadbalancer_path %
|
return self.delete(self.lbaas_loadbalancer_path %
|
||||||
(lbaas_loadbalancer))
|
(lbaas_loadbalancer))
|
||||||
|
|
||||||
|
@APIParamsCall
|
||||||
|
def retrieve_loadbalancer_stats(self, loadbalancer, **_params):
|
||||||
|
"""Retrieves stats for a certain load balancer."""
|
||||||
|
return self.get(self.lbaas_loadbalancer_path_stats % (loadbalancer),
|
||||||
|
params=_params)
|
||||||
|
|
||||||
@APIParamsCall
|
@APIParamsCall
|
||||||
def list_listeners(self, retrieve_all=True, **_params):
|
def list_listeners(self, retrieve_all=True, **_params):
|
||||||
"""Fetches a list of all lbaas_listeners for a tenant."""
|
"""Fetches a list of all lbaas_listeners for a tenant."""
|
||||||
|
Reference in New Issue
Block a user