@@ -427,20 +427,48 @@ 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 (f"No update required as file '{ file_path } ' ({ trigger_ref } ) already in watch list." )
453+ return
454+
455+ if not trigger_ref :
456+ raise Exception (f"Trigger { trigger_ref } did not contain a ref." )
457+
458+ for old_file_path , ref in self .file_ref .items ():
459+ if ref == trigger_ref :
460+ self .tail_manager .stop_tailing_file (old_file_path , self ._handle_line )
461+ self .file_ref .pop (old_file_path )
462+
463+ self .tail_manager .tail_file (file_path , self ._handle_line )
464+ self .file_ref [file_path ] = trigger
465+
466+ self .log .info (f"Updated to add file '{ file_path } ' instead of '{ old_file_path } ' ({ trigger_ref } ) in watch list." )
467+ break
468+
469+ if file_path not in self .file_ref :
470+ # Maybe the add_trigger message was missed.
471+ self .add_trigger (trigger )
444472
445473 def remove_trigger (self , trigger ):
446474 file_path = trigger ["parameters" ].get ("file_path" , None )
0 commit comments