From 5f3a12455b63740fb1d664498c5242502fa690bf Mon Sep 17 00:00:00 2001 From: Estrada Matthieu Date: Fri, 29 Sep 2017 08:30:46 +0200 Subject: [PATCH] Add history endpoint for Hosts, user endpoint Ref #201 --- alignak_app/core/data_manager.py | 30 +++++++++++++++- alignak_app/threads/backend_thread.py | 52 +++++++++++++++++++++++---- alignak_app/threads/thread_manager.py | 3 ++ 3 files changed, 77 insertions(+), 8 deletions(-) diff --git a/alignak_app/core/data_manager.py b/alignak_app/core/data_manager.py index 91076f6..d1f91f4 100644 --- a/alignak_app/core/data_manager.py +++ b/alignak_app/core/data_manager.py @@ -36,6 +36,7 @@ class DataManager(object): def __init__(self): self.database = self.get_database_model() + self.history_database = self.get_history_database_model() @staticmethod def get_database_model(): @@ -50,7 +51,23 @@ def get_database_model(): 'host': {}, 'service': {}, 'alignakdaemon': {}, - 'livesynthesis': {} + 'livesynthesis': {}, + 'user': {}, + 'history': {} + } + + @staticmethod + def get_history_database_model(): + """ + Return history database model + + :return: history database model + :rtype: dict + """ + + return { + 'history': [], + 'notification': [] } def update_item_type(self, item_type, data): @@ -85,6 +102,17 @@ def get_item(self, item_type, item_id): if item_id in self.database[item_type]: return self.database[item_type][item_id] + def update_history_item(self, history_type, data): + """ + TODO + :param history_type: + :param data: + :return: + """ + + if data != self.history_database[history_type]: + self.history_database[history_type] = data + def get_synthesis_count(self): """ Get on "synthesis" endpoint and return the states of hosts and services diff --git a/alignak_app/threads/backend_thread.py b/alignak_app/threads/backend_thread.py index 8635b9e..ac3b5cc 100644 --- a/alignak_app/threads/backend_thread.py +++ b/alignak_app/threads/backend_thread.py @@ -47,6 +47,7 @@ def __init__(self, parent=None): super(BackendQThread, self).__init__(parent) self.requests_models = None self.request_nb = 0 + self.cur_host_id = None def set_requests_models(self): """ @@ -64,6 +65,13 @@ def set_requests_models(self): 'aggregation', 'ls_last_state_changed' ] daemons_projection = ['alive', 'type', 'name'] + user_projection = { + '_realm', 'is_admin', 'back_role_super_admin', 'alias', 'name', 'notes', 'email', + 'can_submit_commands', 'token', 'host_notifications_enabled', + 'service_notifications_enabled', 'host_notification_period', + 'service_notification_period', 'host_notification_options', + 'service_notification_options', + } self.requests_models = { 'host': { @@ -81,6 +89,17 @@ def set_requests_models(self): 'livesynthesis': { 'params': None, 'projection': None + }, + 'user': { + 'params': {'where': json.dumps({'token': app_backend.backend.token})}, + 'projection': user_projection + }, + 'history': { + 'params': { + # 'where': json.dumps({'host': self.cur_host_id}), + 'sort': '-_id', + }, + 'projection': {'service_name': 1, 'message': 1, 'type': 1} } } @@ -104,19 +123,38 @@ def run(self): # Requests on each endpoint defined in model for endpoint in self.requests_models: - request = app_backend.get( - endpoint, - params=self.requests_models[endpoint]['params'], - projection=self.requests_models[endpoint]['projection'], - all_items=True - ) - backend_database[endpoint] = request['_items'] + all_items = True + if 'user' in endpoint: + all_items = False + if 'history' not in endpoint: + request = app_backend.get( + endpoint, + params=self.requests_models[endpoint]['params'], + projection=self.requests_models[endpoint]['projection'], + all_items=all_items + ) + backend_database[endpoint] = request['_items'] # Update DataManager for item_type in backend_database: + print(item_type) + print(backend_database[item_type]) data_manager.update_item_type( item_type, backend_database[item_type] ) + for host in backend_database['host']: + self.requests_models['history']['params']['where'] = json.dumps({ + 'host': host['_id']}), + request = app_backend.get( + 'history', + params=self.requests_models['history']['params'], + projection=self.requests_models['history']['projection'], + all_items=False + ) + backend_database['history'][host['_id']] = request['_items'] + + data_manager.update_history_item('history', backend_database['history']) + self.update_data.emit(data_manager) diff --git a/alignak_app/threads/thread_manager.py b/alignak_app/threads/thread_manager.py index 94d13c3..cb8d51f 100644 --- a/alignak_app/threads/thread_manager.py +++ b/alignak_app/threads/thread_manager.py @@ -82,6 +82,9 @@ def update_data_manager(data_manager): print("Daemon: %s" % test_daemon) test_synthesis = data_manager.get_synthesis_count() print("Synthesis: %s" % test_synthesis) + test_user = data_manager.get_item('user', '59c4e3c135d17b8dff6acc5d') + print("User: %s" % test_user) + print("History: %s" % data_manager.history_database['history']) # FOR TESTS