diff --git a/mgmtsystem/hawkular.py b/mgmtsystem/hawkular.py index 72f6bf2e..34f7163c 100644 --- a/mgmtsystem/hawkular.py +++ b/mgmtsystem/hawkular.py @@ -28,6 +28,7 @@ ResourceType = namedtuple('ResourceType', ['id', 'name', 'path']) Server = namedtuple('Server', ['id', 'name', 'path']) Deployment = namedtuple('Deployment', ['id', 'name', 'path']) +Datasource = namedtuple('Datasource', ['id', 'name', 'path']) ServerStatus = namedtuple('ServerStatus', ['address', 'version', 'state', 'product', 'host']) Event = namedtuple('event', ['id', 'eventType', 'ctime', 'dataSource', 'dataId', 'category', 'text']) @@ -53,6 +54,8 @@ class Hawkular(MgmtSystemAPIBase): 'num_server': lambda self: sum(len(self.list_server(f.id)) for f in self.list_feed()), 'num_deployment': lambda self: sum(len(self.list_server_deployment(f.id)) for f in self.list_feed()), + 'num_datasource': lambda self: sum(len(self.list_server_datasource(f.id)) + for f in self.list_feed()), } def __init__(self, @@ -209,3 +212,14 @@ def list_event(self, start_time=0, end_time=sys.maxsize): entity_j['category'], entity_j['text']) entities.append(entity) return entities + + def list_server_datasource(self, feed_id, type_id='Datasource'): + """Returns list of datasources on servers by provided feed ID and resource type ID""" + entities = [] + entities_j = self.api.get_json('feeds/{}/resourceTypes/{}/resources' + .format(feed_id, type_id)) + if entities_j: + for entity_j in entities_j: + entity = Datasource(entity_j['id'], entity_j['name'], entity_j['path']) + entities.append(entity) + return entities diff --git a/tests/test_hawkular.py b/tests/test_hawkular.py index 4457244d..bb01a60d 100644 --- a/tests/test_hawkular.py +++ b/tests/test_hawkular.py @@ -63,7 +63,24 @@ def test_list_server_deployment(provider): assert deployment.id assert deployment.name assert deployment.path - assert found, "No any deployment is listed for any of feeds" + assert (found | provider._stats_available['num_deployment'](provider) > 0, + "No any deployment is listed for any of feeds, but they exists") + + +def test_list_server_datasource(provider): + """ Checks whether any datasource is listed and has attributes """ + found = False + feeds = provider.list_feed() + for feed in feeds: + datasources = provider.list_server_datasource(feed.id) + if len(datasources) > 0: + found = True + for datasource in datasources: + assert datasource.id + assert datasource.name + assert datasource.path + assert (found | provider._stats_available['num_datasource'](provider) > 0, + "No any datasource is listed for any of feeds, but they exists") def test_get_server_status(provider): @@ -102,6 +119,16 @@ def test_num_deployment(provider): assert num_deployment == deployments_count, "Number of deployments is wrong" +def test_num_datasource(provider): + """ Checks whether number of datasources is returned correct """ + datasources_count = 0 + feeds = provider.list_feed() + for feed in feeds: + datasources_count += len(provider.list_server_datasource(feed.id)) + num_datasource = provider._stats_available['num_datasource'](provider) + assert num_datasource == datasources_count, "Number of datasources is wrong" + + def test_list_event_empty(provider): """ Checks that events are filtered and empty list is returned """ assert len(provider.list_event(0, 0)) == 0, "Unexpected events are returned"