From ea0df0de3d42022ec04764f162509e51710e8ff9 Mon Sep 17 00:00:00 2001 From: Kamil Mankowski Date: Tue, 16 Apr 2024 13:28:46 +0200 Subject: [PATCH] FIX: handle init failure on incorrect current event If event hold in current event wasn't saved correctly, the bot is unable to start and handle any event. --- CHANGELOG.md | 1 + intelmq/bots/outputs/misp/output_feed.py | 32 +++++++++++++----------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 810ad8deb..033722eab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ #### Experts #### Outputs +- `intelmq.bots.outputs.misp.output_feed`: handle failures if saved current event wasn't saved or is incorrect (PR by Kamil Mankowski). ### Documentation diff --git a/intelmq/bots/outputs/misp/output_feed.py b/intelmq/bots/outputs/misp/output_feed.py index 7c730f976..cbeeec09e 100644 --- a/intelmq/bots/outputs/misp/output_feed.py +++ b/intelmq/bots/outputs/misp/output_feed.py @@ -68,21 +68,25 @@ def init(self): self.timedelta = datetime.timedelta(minutes=parse_relative(self.interval_event)) if (self.output_dir / '.current').exists(): - with (self.output_dir / '.current').open() as f: - self.current_file = Path(f.read()) - self.current_event = MISPEvent() - self.current_event.load_file(self.current_file) - - last_min_time, last_max_time = re.findall('IntelMQ event (.*) - (.*)', self.current_event.info)[0] - last_min_time = datetime.datetime.strptime(last_min_time, '%Y-%m-%dT%H:%M:%S.%f') - last_max_time = datetime.datetime.strptime(last_max_time, '%Y-%m-%dT%H:%M:%S.%f') - if last_max_time < datetime.datetime.now(): - self.min_time_current = datetime.datetime.now() - self.max_time_current = self.min_time_current + self.timedelta + try: + with (self.output_dir / '.current').open() as f: + self.current_file = Path(f.read()) + self.current_event = MISPEvent() + self.current_event.load_file(self.current_file) + + last_min_time, last_max_time = re.findall('IntelMQ event (.*) - (.*)', self.current_event.info)[0] + last_min_time = datetime.datetime.strptime(last_min_time, '%Y-%m-%dT%H:%M:%S.%f') + last_max_time = datetime.datetime.strptime(last_max_time, '%Y-%m-%dT%H:%M:%S.%f') + if last_max_time < datetime.datetime.now(): + self.min_time_current = datetime.datetime.now() + self.max_time_current = self.min_time_current + self.timedelta + self.current_event = None + else: + self.min_time_current = last_min_time + self.max_time_current = last_max_time + except: + self.logger.exception("Loading current event %s failed. Skipping it.", self.current_event) self.current_event = None - else: - self.min_time_current = last_min_time - self.max_time_current = last_max_time else: self.min_time_current = datetime.datetime.now() self.max_time_current = self.min_time_current + self.timedelta