Skip to content

Commit 36bacae

Browse files
committed
linux pack: add LinuxFileWatchSensor.update_trigger
1 parent 465a8f4 commit 36bacae

File tree

1 file changed

+37
-5
lines changed

1 file changed

+37
-5
lines changed

contrib/linux/sensors/file_watch_sensor.py

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -427,20 +427,52 @@ def add_trigger(self, trigger):
427427
self.log.error('Received trigger type without "file_path" field.')
428428
return
429429

430-
trigger = trigger.get("ref", None)
430+
trigger_ref = trigger.get("ref", None)
431431

432-
if not trigger:
433-
raise Exception(f"Trigger {trigger} did not contain a ref.")
432+
if not trigger_ref:
433+
raise Exception(f"Trigger {trigger_ref} did not contain a ref.")
434434

435435
self.tail_manager.tail_file(file_path, self._handle_line)
436436
self.file_ref[file_path] = trigger
437437

438-
self.log.info(f"Added file '{file_path}' ({trigger}) to watch list.")
438+
self.log.info(f"Added file '{file_path}' ({trigger_ref}) to watch list.")
439439

440440
self.tail_manager.start()
441441

442442
def update_trigger(self, trigger):
443-
pass
443+
file_path = trigger["parameters"].get("file_path", None)
444+
445+
if not file_path:
446+
self.log.error('Received trigger type without "file_path" field.')
447+
return
448+
449+
trigger_ref = trigger.get("ref", None)
450+
451+
if file_path in self.file_ref:
452+
self.log.debug(
453+
f"No update required as file '{file_path}' ({trigger_ref}) already in watch list."
454+
)
455+
return
456+
457+
if not trigger_ref:
458+
raise Exception(f"Trigger {trigger_ref} did not contain a ref.")
459+
460+
for old_file_path, ref in self.file_ref.items():
461+
if ref == trigger_ref:
462+
self.tail_manager.stop_tailing_file(old_file_path, self._handle_line)
463+
self.file_ref.pop(old_file_path)
464+
465+
self.tail_manager.tail_file(file_path, self._handle_line)
466+
self.file_ref[file_path] = trigger
467+
468+
self.log.info(
469+
f"Updated to add file '{file_path}' instead of '{old_file_path}' ({trigger_ref}) in watch list."
470+
)
471+
break
472+
473+
if file_path not in self.file_ref:
474+
# Maybe the add_trigger message was missed.
475+
self.add_trigger(trigger)
444476

445477
def remove_trigger(self, trigger):
446478
file_path = trigger["parameters"].get("file_path", None)

0 commit comments

Comments
 (0)