Merge "Add list_next for pagination"

This commit is contained in:
Jenkins 2016-12-09 06:26:12 +00:00 committed by Gerrit Code Review
commit de70f047dd
6 changed files with 44 additions and 112 deletions

View File

@ -15,12 +15,39 @@
from monascaclient.apiclient import base
from six.moves.urllib import parse
from six.moves.urllib_parse import unquote
class MonascaManager(base.BaseManager):
def __init__(self, client, **kwargs):
super(MonascaManager, self).__init__(client)
def _parse_body(self, body):
if type(body) is dict:
self.next = None
for link in body['links']:
if link['rel'] == 'next':
self.next = link['href']
return body['elements']
else:
return body
def _list(self, path, dim_key=None, **kwargs):
"""Get a list of metrics."""
url_str = self.base_url + path
newheaders = self.get_headers()
if dim_key and dim_key in kwargs:
dimstr = self.get_dimensions_url_string(kwargs[dim_key])
kwargs[dim_key] = dimstr
if kwargs:
url_str += '?%s' % parse.urlencode(kwargs, True)
resp, body = self.client.json_request(
'GET', url_str, headers=newheaders)
return self._parse_body(body)
def get_headers(self):
headers = self.client.credentials_headers()
return headers
@ -37,3 +64,10 @@ class MonascaManager(base.BaseManager):
dim_str = k
dim_list.append(dim_str)
return ','.join(dim_list)
def list_next(self):
if hasattr(self, 'next') and self.next:
self.next = unquote(self.next)
path = self.next.split(self.base_url, 1)[-1]
return self._list(path)
return None

View File

@ -13,8 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from six.moves.urllib import parse
from monascaclient.apiclient import base
from monascaclient.common import monasca_manager
@ -47,18 +45,7 @@ class AlarmDefinitionsManager(monasca_manager.MonascaManager):
def list(self, **kwargs):
"""Get a list of alarm definitions."""
url_str = self.base_url
newheaders = self.get_headers()
if 'dimensions' in kwargs:
dimstr = self.get_dimensions_url_string(kwargs['dimensions'])
kwargs['dimensions'] = dimstr
if kwargs:
url_str = url_str + '?%s' % parse.urlencode(kwargs, True)
# print url_str
resp, body = self.client.json_request(
'GET', url_str, headers=newheaders)
return body['elements'] if type(body) is dict else body
return self._list('', 'dimensions', **kwargs)
def delete(self, **kwargs):
"""Delete a specific alarm definition."""

View File

@ -39,18 +39,7 @@ class AlarmsManager(monasca_manager.MonascaManager):
def list(self, **kwargs):
"""Get a list of alarms."""
url_str = self.base_url
newheaders = self.get_headers()
if 'metric_dimensions' in kwargs:
dimstr = self.get_dimensions_url_string(kwargs['metric_dimensions'])
kwargs['metric_dimensions'] = dimstr
if kwargs:
url_str = url_str + '?%s' % parse.urlencode(kwargs, True)
# print url_str
resp, body = self.client.json_request(
'GET', url_str, headers=newheaders)
return body['elements'] if type(body) is dict else body
return self._list('', 'metric_dimensions', **kwargs)
def delete(self, **kwargs):
"""Delete a specific alarm."""

View File

@ -15,8 +15,6 @@
from copy import deepcopy
from six.moves.urllib import parse
from monascaclient.apiclient import base
from monascaclient.common import monasca_manager
@ -51,82 +49,24 @@ class MetricsManager(monasca_manager.MonascaManager):
def list(self, **kwargs):
"""Get a list of metrics."""
url_str = self.base_url
newheaders = self.get_headers()
if 'dimensions' in kwargs:
dimstr = self.get_dimensions_url_string(kwargs['dimensions'])
kwargs['dimensions'] = dimstr
if kwargs:
url_str = url_str + '?%s' % parse.urlencode(kwargs, True)
# print url_str
resp, body = self.client.json_request(
'GET', url_str, headers=newheaders)
return body['elements'] if type(body) is dict else body
return self._list('', 'dimensions', **kwargs)
def list_names(self, **kwargs):
"""Get a list of metric names."""
url_str = self.base_url + '/names'
newheaders = self.get_headers()
if 'dimensions' in kwargs:
dimstr = self.get_dimensions_url_string(kwargs['dimensions'])
kwargs['dimensions'] = dimstr
if kwargs:
url_str = url_str + '?%s' % parse.urlencode(kwargs, True)
# print url_str
resp, body = self.client.json_request(
'GET', url_str, headers=newheaders)
return body['elements'] if type(body) is dict else body
return self._list('/names', 'dimensions', **kwargs)
def list_measurements(self, **kwargs):
"""Get a list of measurements based on metric definition filters."""
url_str = self.base_url + '/measurements'
newheaders = self.get_headers()
if 'dimensions' in kwargs:
dimstr = self.get_dimensions_url_string(kwargs['dimensions'])
kwargs['dimensions'] = dimstr
if kwargs:
url_str = url_str + '?%s' % parse.urlencode(kwargs, True)
# print url_str
resp, body = self.client.json_request(
'GET', url_str, headers=newheaders)
return body['elements'] if type(body) is dict else body
return self._list('/measurements', 'dimensions', **kwargs)
def list_statistics(self, **kwargs):
"""Get a list of measurement statistics based on metric def filters."""
url_str = self.base_url + '/statistics'
newheaders = self.get_headers()
if 'dimensions' in kwargs:
dimstr = self.get_dimensions_url_string(kwargs['dimensions'])
kwargs['dimensions'] = dimstr
if kwargs:
url_str = url_str + '?%s' % parse.urlencode(kwargs, True)
# print url_str
resp, body = self.client.json_request(
'GET', url_str, headers=newheaders)
return body['elements'] if type(body) is dict else body
return self._list('/statistics', 'dimensions', **kwargs)
def list_dimension_names(self, **kwargs):
"""Get a list of metric dimension names."""
url_str = self.base_url + '/dimensions/names'
new_headers = self.get_headers()
if kwargs:
url_str += '?%s' % parse.urlencode(kwargs, True)
# print url_str
resp, body = self.client.json_request(
'GET', url_str, headers=new_headers)
return body['elements'] if type(body) is dict else body
return self._list('/dimensions/names', **kwargs)
def list_dimension_values(self, **kwargs):
"""Get a list of metric dimension values."""
url_str = self.base_url + '/dimensions/names/values'
new_headers = self.get_headers()
if kwargs:
url_str += '?%s' % parse.urlencode(kwargs, True)
# print url_str
resp, body = self.client.json_request(
'GET', url_str, headers=new_headers)
return body['elements'] if type(body) is dict else body
return self._list('/dimensions/names/values', **kwargs)

View File

@ -15,8 +15,6 @@
from copy import deepcopy
from six.moves.urllib import parse
from monascaclient.apiclient import base
from monascaclient.common import monasca_manager
@ -49,14 +47,7 @@ class NotificationsManager(monasca_manager.MonascaManager):
def list(self, **kwargs):
"""Get a list of notifications."""
newheaders = self.get_headers()
url_str = self.base_url
if kwargs:
url_str = url_str + '?%s' % parse.urlencode(kwargs, True)
resp, body = self.client.json_request('GET', url_str,
headers=newheaders)
return body['elements'] if type(body) is dict else body
return self._list('', **kwargs)
def delete(self, **kwargs):
"""Delete a notification."""

View File

@ -13,8 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from six.moves.urllib import parse
from monascaclient.apiclient import base
from monascaclient.common import monasca_manager
@ -31,11 +29,4 @@ class NotificationTypesManager(monasca_manager.MonascaManager):
def list(self, **kwargs):
"""Get a list of notifications."""
newheaders = self.get_headers()
url_str = self.base_url
if kwargs:
url_str = url_str + '?%s' % parse.urlencode(kwargs, True)
resp, body = self.client.json_request('GET', url_str,
headers=newheaders)
return body['elements'] if type(body) is dict else body
return self._list('', **kwargs)