Reduced the code complexity
I extracted some of the functionalities into helper functions to reduce the length and complexity of build_query (in watcher/datasource/ceilometer.py). Additionally it became more readable as well, without changing its functionality. Change-Id: I9e5c524754cf0f9d718a216465ba1b7536add80e
This commit is contained in:
parent
d21198da8f
commit
fd55d28d42
@ -32,6 +32,43 @@ class CeilometerHelper(object):
|
|||||||
self.osc = osc if osc else clients.OpenStackClients()
|
self.osc = osc if osc else clients.OpenStackClients()
|
||||||
self.ceilometer = self.osc.ceilometer()
|
self.ceilometer = self.osc.ceilometer()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def format_query(user_id, tenant_id, resource_id,
|
||||||
|
user_ids, tenant_ids, resource_ids):
|
||||||
|
query = []
|
||||||
|
|
||||||
|
def query_append(query, _id, _ids, field):
|
||||||
|
if _id:
|
||||||
|
_ids = [_id]
|
||||||
|
for x_id in _ids:
|
||||||
|
query.append({"field": field, "op": "eq", "value": x_id})
|
||||||
|
|
||||||
|
query_append(query, user_id, (user_ids or []), "user_id")
|
||||||
|
query_append(query, tenant_id, (tenant_ids or []), "project_id")
|
||||||
|
query_append(query, resource_id, (resource_ids or []), "resource_id")
|
||||||
|
|
||||||
|
return query
|
||||||
|
|
||||||
|
def _timestamps(self, start_time, end_time):
|
||||||
|
|
||||||
|
def _format_timestamp(_time):
|
||||||
|
if _time:
|
||||||
|
if isinstance(_time, datetime.datetime):
|
||||||
|
return _time.isoformat()
|
||||||
|
return _time
|
||||||
|
return None
|
||||||
|
|
||||||
|
start_timestamp = _format_timestamp(start_time)
|
||||||
|
end_timestamp = _format_timestamp(end_time)
|
||||||
|
|
||||||
|
if ((start_timestamp is not None) and (end_timestamp is not None) and
|
||||||
|
(timeutils.parse_isotime(start_timestamp) >
|
||||||
|
timeutils.parse_isotime(end_timestamp))):
|
||||||
|
raise exception.Invalid(
|
||||||
|
_("Invalid query: %(start_time)s > %(end_time)s") % dict(
|
||||||
|
start_time=start_timestamp, end_time=end_timestamp))
|
||||||
|
return start_timestamp, end_timestamp
|
||||||
|
|
||||||
def build_query(self, user_id=None, tenant_id=None, resource_id=None,
|
def build_query(self, user_id=None, tenant_id=None, resource_id=None,
|
||||||
user_ids=None, tenant_ids=None, resource_ids=None,
|
user_ids=None, tenant_ids=None, resource_ids=None,
|
||||||
start_time=None, end_time=None):
|
start_time=None, end_time=None):
|
||||||
@ -49,45 +86,11 @@ class CeilometerHelper(object):
|
|||||||
:param end_time: datetime until which measurements should be collected
|
:param end_time: datetime until which measurements should be collected
|
||||||
"""
|
"""
|
||||||
|
|
||||||
user_ids = user_ids or []
|
query = self.format_query(user_id, tenant_id, resource_id,
|
||||||
tenant_ids = tenant_ids or []
|
user_ids, tenant_ids, resource_ids)
|
||||||
resource_ids = resource_ids or []
|
|
||||||
|
|
||||||
query = []
|
start_timestamp, end_timestamp = self._timestamps(start_time,
|
||||||
if user_id:
|
end_time)
|
||||||
user_ids = [user_id]
|
|
||||||
for u_id in user_ids:
|
|
||||||
query.append({"field": "user_id", "op": "eq", "value": u_id})
|
|
||||||
|
|
||||||
if tenant_id:
|
|
||||||
tenant_ids = [tenant_id]
|
|
||||||
for t_id in tenant_ids:
|
|
||||||
query.append({"field": "project_id", "op": "eq", "value": t_id})
|
|
||||||
|
|
||||||
if resource_id:
|
|
||||||
resource_ids = [resource_id]
|
|
||||||
for r_id in resource_ids:
|
|
||||||
query.append({"field": "resource_id", "op": "eq", "value": r_id})
|
|
||||||
|
|
||||||
start_timestamp = None
|
|
||||||
end_timestamp = None
|
|
||||||
|
|
||||||
if start_time:
|
|
||||||
start_timestamp = start_time
|
|
||||||
if isinstance(start_time, datetime.datetime):
|
|
||||||
start_timestamp = start_time.isoformat()
|
|
||||||
|
|
||||||
if end_time:
|
|
||||||
end_timestamp = end_time
|
|
||||||
if isinstance(end_time, datetime.datetime):
|
|
||||||
end_timestamp = end_time.isoformat()
|
|
||||||
|
|
||||||
if (start_timestamp and end_timestamp and
|
|
||||||
timeutils.parse_isotime(start_timestamp) >
|
|
||||||
timeutils.parse_isotime(end_timestamp)):
|
|
||||||
raise exception.Invalid(
|
|
||||||
_("Invalid query: %(start_time)s > %(end_time)s") % dict(
|
|
||||||
start_time=start_timestamp, end_time=end_timestamp))
|
|
||||||
|
|
||||||
if start_timestamp:
|
if start_timestamp:
|
||||||
query.append({"field": "timestamp", "op": "ge",
|
query.append({"field": "timestamp", "op": "ge",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user