mirror of
				https://github.com/blakeblackshear/frigate.git
				synced 2025-10-27 10:52:11 +01:00 
			
		
		
		
	switch to retain config instead of retain_days
This commit is contained in:
		
							parent
							
								
									56a2d4e64d
								
							
						
					
					
						commit
						dcf65febba
					
				@ -65,8 +65,17 @@ class MqttConfig(FrigateBaseModel):
 | 
			
		||||
        return v
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RetainModeEnum(str, Enum):
 | 
			
		||||
    all = "all"
 | 
			
		||||
    motion = "motion"
 | 
			
		||||
    active_objects = "active_objects"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RetainConfig(FrigateBaseModel):
 | 
			
		||||
    default: float = Field(default=10, title="Default retention period.")
 | 
			
		||||
    mode: RetainModeEnum = Field(
 | 
			
		||||
        default=RetainModeEnum.active_objects, title="Retain mode."
 | 
			
		||||
    )
 | 
			
		||||
    objects: Dict[str, float] = Field(
 | 
			
		||||
        default_factory=dict, title="Object retention period."
 | 
			
		||||
    )
 | 
			
		||||
@ -88,9 +97,18 @@ class EventsConfig(FrigateBaseModel):
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RecordRetainConfig(FrigateBaseModel):
 | 
			
		||||
    days: float = Field(default=0, title="Default retention period.")
 | 
			
		||||
    mode: RetainModeEnum = Field(default=RetainModeEnum.all, title="Retain mode.")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RecordConfig(FrigateBaseModel):
 | 
			
		||||
    enabled: bool = Field(default=False, title="Enable record on all cameras.")
 | 
			
		||||
    retain_days: float = Field(default=0, title="Recording retention period in days.")
 | 
			
		||||
    # deprecated - to be removed in a future version
 | 
			
		||||
    retain_days: Optional[float] = Field(title="Recording retention period in days.")
 | 
			
		||||
    retain: RecordRetainConfig = Field(
 | 
			
		||||
        default_factory=RecordRetainConfig, title="Record retention settings."
 | 
			
		||||
    )
 | 
			
		||||
    events: EventsConfig = Field(
 | 
			
		||||
        default_factory=EventsConfig, title="Event specific settings."
 | 
			
		||||
    )
 | 
			
		||||
@ -810,6 +828,14 @@ class FrigateConfig(FrigateBaseModel):
 | 
			
		||||
                    f"Camera {name} has rtmp enabled, but rtmp is not assigned to an input."
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
            # backwards compatibility for retain_days
 | 
			
		||||
            if not camera_config.record.retain_days is None:
 | 
			
		||||
                logger.warning(
 | 
			
		||||
                    "The 'retain_days' config option has been DEPRECATED and will be removed in a future version. Please use the 'days' setting under 'retain'"
 | 
			
		||||
                )
 | 
			
		||||
                if camera_config.record.retain.days == 0:
 | 
			
		||||
                    camera_config.record.retain.days = camera_config.record.retain_days
 | 
			
		||||
 | 
			
		||||
            config.cameras[name] = camera_config
 | 
			
		||||
 | 
			
		||||
        return config
 | 
			
		||||
 | 
			
		||||
@ -165,12 +165,12 @@ class RecordingMaintainer(threading.Thread):
 | 
			
		||||
                        Path(cache_path).unlink(missing_ok=True)
 | 
			
		||||
                        continue
 | 
			
		||||
 | 
			
		||||
                # if cached file's start_time is earlier than the retain_days for the camera
 | 
			
		||||
                # if cached file's start_time is earlier than the retain days for the camera
 | 
			
		||||
                if start_time <= (
 | 
			
		||||
                    (
 | 
			
		||||
                        datetime.datetime.now()
 | 
			
		||||
                        - datetime.timedelta(
 | 
			
		||||
                            days=self.config.cameras[camera].record.retain_days
 | 
			
		||||
                            days=self.config.cameras[camera].record.retain.days
 | 
			
		||||
                        )
 | 
			
		||||
                    )
 | 
			
		||||
                ):
 | 
			
		||||
@ -203,7 +203,7 @@ class RecordingMaintainer(threading.Thread):
 | 
			
		||||
                            duration,
 | 
			
		||||
                            cache_path,
 | 
			
		||||
                        )
 | 
			
		||||
                # else retain_days includes this segment
 | 
			
		||||
                # else retain days includes this segment
 | 
			
		||||
                else:
 | 
			
		||||
                    self.store_segment(
 | 
			
		||||
                        camera, start_time, end_time, duration, cache_path
 | 
			
		||||
@ -314,7 +314,7 @@ class RecordingCleanup(threading.Thread):
 | 
			
		||||
 | 
			
		||||
        logger.debug("Start deleted cameras.")
 | 
			
		||||
        # Handle deleted cameras
 | 
			
		||||
        expire_days = self.config.record.retain_days
 | 
			
		||||
        expire_days = self.config.record.retain.days
 | 
			
		||||
        expire_before = (
 | 
			
		||||
            datetime.datetime.now() - datetime.timedelta(days=expire_days)
 | 
			
		||||
        ).timestamp()
 | 
			
		||||
@ -340,7 +340,7 @@ class RecordingCleanup(threading.Thread):
 | 
			
		||||
                datetime.datetime.now()
 | 
			
		||||
                - datetime.timedelta(seconds=config.record.events.max_seconds)
 | 
			
		||||
            ).timestamp()
 | 
			
		||||
            expire_days = config.record.retain_days
 | 
			
		||||
            expire_days = config.record.retain.days
 | 
			
		||||
            expire_before = (
 | 
			
		||||
                datetime.datetime.now() - datetime.timedelta(days=expire_days)
 | 
			
		||||
            ).timestamp()
 | 
			
		||||
@ -416,14 +416,14 @@ class RecordingCleanup(threading.Thread):
 | 
			
		||||
 | 
			
		||||
        default_expire = (
 | 
			
		||||
            datetime.datetime.now().timestamp()
 | 
			
		||||
            - SECONDS_IN_DAY * self.config.record.retain_days
 | 
			
		||||
            - SECONDS_IN_DAY * self.config.record.retain.days
 | 
			
		||||
        )
 | 
			
		||||
        delete_before = {}
 | 
			
		||||
 | 
			
		||||
        for name, camera in self.config.cameras.items():
 | 
			
		||||
            delete_before[name] = (
 | 
			
		||||
                datetime.datetime.now().timestamp()
 | 
			
		||||
                - SECONDS_IN_DAY * camera.record.retain_days
 | 
			
		||||
                - SECONDS_IN_DAY * camera.record.retain.days
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        # find all the recordings older than the oldest recording in the db
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user