From 7bc3e8a828909a5075f910bf2b63c953293419eb Mon Sep 17 00:00:00 2001 From: Jongmin Kim Date: Wed, 24 Jul 2024 02:25:41 +0900 Subject: [PATCH] refactor: add duplicate event time settings Signed-off-by: Jongmin Kim --- src/spaceone/monitoring/conf/global_conf.py | 2 +- .../monitoring/manager/event_manager.py | 19 +++++++++++++++---- .../monitoring/service/event_service.py | 6 ++++++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/spaceone/monitoring/conf/global_conf.py b/src/spaceone/monitoring/conf/global_conf.py index a6aac91..965a344 100644 --- a/src/spaceone/monitoring/conf/global_conf.py +++ b/src/spaceone/monitoring/conf/global_conf.py @@ -78,7 +78,7 @@ JOB_TIMEOUT = 600 # Event Settings -SAME_EVENT_TIME = 600 +DUPLICATE_EVENT_TIME = 600 INSTALLED_DATA_SOURCE_PLUGINS = [ # { diff --git a/src/spaceone/monitoring/manager/event_manager.py b/src/spaceone/monitoring/manager/event_manager.py index 670a4e4..2e6cbdd 100644 --- a/src/spaceone/monitoring/manager/event_manager.py +++ b/src/spaceone/monitoring/manager/event_manager.py @@ -55,9 +55,20 @@ def list_events(self, query: dict) -> dict: def stat_events(self, query: dict) -> dict: return self.event_model.stat(**query) - def get_event_by_key(self, event_key, domain_id, project_id, workspace_id): - same_event_time = config.get_global("SAME_EVENT_TIME", 600) - same_event_datetime = datetime.utcnow() - timedelta(seconds=same_event_time) + def get_event_by_key( + self, + event_key, + domain_id, + project_id, + workspace_id, + duplicate_event_time, + ): + if not isinstance(duplicate_event_time, int): + duplicate_event_time = config.get_global("DUPLICATE_EVENT_TIME", 600) + + duplicate_event_datetime = datetime.utcnow() - timedelta( + seconds=duplicate_event_time + ) query = { "filter": [ @@ -66,7 +77,7 @@ def get_event_by_key(self, event_key, domain_id, project_id, workspace_id): {"k": "workspace_id", "v": workspace_id, "o": "eq"}, {"k": "project_id", "v": project_id, "o": "eq"}, {"k": "event_type", "v": "RECOVERY", "o": "not"}, - {"k": "created_at", "v": same_event_datetime, "o": "gte"}, + {"k": "created_at", "v": duplicate_event_datetime, "o": "gte"}, ], "sort": [{"key": "created_at", "desc": True}], } diff --git a/src/spaceone/monitoring/service/event_service.py b/src/spaceone/monitoring/service/event_service.py index 574ade6..a345e1d 100644 --- a/src/spaceone/monitoring/service/event_service.py +++ b/src/spaceone/monitoring/service/event_service.py @@ -68,6 +68,7 @@ def create(self, params: dict) -> None: webhook_id = webhook_data["webhook_id"] domain_id = webhook_data["domain_id"] workspace_id = webhook_data["workspace_id"] + plugin_metadata = webhook_data["plugin_metadata"] webhook_vo = self.webhook_mgr.get_webhook(webhook_id, domain_id, workspace_id) webhook_vo.increment("requests.total") @@ -101,6 +102,7 @@ def create(self, params: dict) -> None: ) plugin_info["version"] = updated_version plugin_info["metadata"] = plugin_metadata + webhook_data["metadata"] = plugin_metadata self.webhook_mgr.update_webhook_by_vo( {"plugin_info": plugin_info}, webhook_vo ) @@ -238,6 +240,7 @@ def _get_webhook_data(self, webhook_id): "plugin_version": webhook_vo.plugin_info.version, "plugin_upgrade_mode": webhook_vo.plugin_info.upgrade_mode, "plugin_options": webhook_vo.plugin_info.options, + "plugin_metadata": webhook_vo.plugin_info.metadata, } @staticmethod @@ -251,6 +254,8 @@ def _check_webhook_state(webhook_data): raise ERROR_WEBHOOK_STATE_DISABLED(webhook_id=webhook_data["webhook_id"]) def _create_event(self, event_data, raw_data, webhook_data): + plugin_metadata = webhook_data.get("plugin_metadata", {}) + event_data["raw_data"] = copy.deepcopy(raw_data) event_data["occurred_at"] = utils.iso8601_to_datetime( event_data.get("occurred_at") @@ -287,6 +292,7 @@ def _create_event(self, event_data, raw_data, webhook_data): event_data["domain_id"], event_data["project_id"], event_data["workspace_id"], + plugin_metadata.get("duplicate_event_time"), ) if event_vo and event_vo.alert.state != "RESOLVED":