Add more config checks for record args and add test

This commit is contained in:
Nick Mowen 2022-12-08 07:27:09 -07:00
parent 3a4ce01cf1
commit 92300ef5ba
2 changed files with 40 additions and 0 deletions

View File

@ -843,6 +843,18 @@ def verify_recording_retention(camera_config: CameraConfig) -> None:
) )
def verify_recording_segments_setup_with_reasonable_time(camera_config: CameraConfig) -> None:
"""Verify that recording segments are setup and segment time is not greater than 60."""
record_args: list[str] = get_ffmpeg_arg_list(camera_config.ffmpeg.output_args.record)
seg_arg_index = record_args.index('-segment_time')
if seg_arg_index < 0:
raise ValueError(f"Camera {camera_config.name} has no segment_time arg, segment args are required for record.")
if int(record_args[seg_arg_index + 1]) > 60:
raise ValueError(f"Camera {camera_config.name} has invalid segment_time, segment_time must be 60 or less.")
def verify_zone_objects_are_tracked(camera_config: CameraConfig) -> None: def verify_zone_objects_are_tracked(camera_config: CameraConfig) -> None:
"""Verify that user has not entered zone objects that are not in the tracking config.""" """Verify that user has not entered zone objects that are not in the tracking config."""
for zone_name, zone in camera_config.zones.items(): for zone_name, zone in camera_config.zones.items():
@ -997,6 +1009,7 @@ class FrigateConfig(FrigateBaseModel):
verify_config_roles(camera_config) verify_config_roles(camera_config)
verify_old_retain_config(camera_config) verify_old_retain_config(camera_config)
verify_recording_retention(camera_config) verify_recording_retention(camera_config)
verify_recording_segments_setup_with_reasonable_time(camera_config)
verify_zone_objects_are_tracked(camera_config) verify_zone_objects_are_tracked(camera_config)
if camera_config.rtmp.enabled: if camera_config.rtmp.enabled:

View File

@ -1426,6 +1426,33 @@ class TestConfig(unittest.TestCase):
ValidationError, lambda: frigate_config.runtime_config.cameras ValidationError, lambda: frigate_config.runtime_config.cameras
) )
def test_fails_on_bad_segment_time(self):
config = {
"mqtt": {"host": "mqtt"},
"record": {"enabled": True},
"cameras": {
"back": {
"ffmpeg": {
"output_args": {
"record": "-f segment -segment_time 70 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy -an"
},
"inputs": [
{
"path": "rtsp://10.0.0.1:554/video",
"roles": ["detect"],
},
],
},
}
},
}
frigate_config = FrigateConfig(**config)
self.assertRaises(
ValueError, lambda: frigate_config.runtime_config.ffmpeg.output_args.record
)
def test_fails_zone_defines_untracked_object(self): def test_fails_zone_defines_untracked_object(self):
config = { config = {
"mqtt": {"host": "mqtt"}, "mqtt": {"host": "mqtt"},