diff --git a/frigate/test/test_go2rtc_pid_stats.py b/frigate/test/test_go2rtc_pid_stats.py index 9f0c5b763b..1cbf17116b 100644 --- a/frigate/test/test_go2rtc_pid_stats.py +++ b/frigate/test/test_go2rtc_pid_stats.py @@ -1,8 +1,10 @@ """Tests for resolving the go2rtc pid from cpu usages.""" import unittest +from types import SimpleNamespace +from unittest.mock import Mock, patch -from frigate.stats.util import get_go2rtc_pid +from frigate.stats.util import get_go2rtc_pid, stats_snapshot class TestGo2rtcPid(unittest.TestCase): @@ -24,3 +26,45 @@ class TestGo2rtcPid(unittest.TestCase): def test_returns_none_when_go2rtc_is_not_running(self): self.assertIsNone(get_go2rtc_pid({"100": {"cmdline": "ffmpeg -i x"}})) self.assertIsNone(get_go2rtc_pid({})) + + +class TestGo2rtcPidInSnapshot(unittest.TestCase): + def snapshot(self, tracking: dict, go2rtc_pid: int) -> dict: + def update_stats(stats: dict) -> None: + stats["cpu_usages"] = { + str(go2rtc_pid): { + "cmdline": "/usr/local/go2rtc/bin/go2rtc -config=x", + "cpu": str(go2rtc_pid / 100), + "mem": str(go2rtc_pid / 10), + } + } + + config = SimpleNamespace( + cameras={}, + telemetry=SimpleNamespace(stats=SimpleNamespace(network_bandwidth=False)), + ) + hardware_stats = Mock() + hardware_stats.update_stats.side_effect = update_stats + + with ( + patch("frigate.stats.util.get_detector_stats", return_value={}), + patch("frigate.stats.util.embeddings_stats", return_value={}), + patch("frigate.stats.util.calculate_shm_requirements", return_value={}), + ): + return stats_snapshot(config, tracking, hardware_stats) + + def test_snapshot_follows_go2rtc_restart(self): + tracking = { + "camera_metrics": {}, + "detectors": {}, + "started": 0, + "latest_frigate_version": "", + "processes": {"go2rtc": 200, "recording": 50}, + "storage_maintainer": None, + } + + first = self.snapshot(tracking, 200)["processes"]["go2rtc"] + self.assertEqual(first, {"pid": 200, "cpu": "2.0", "mem": "20.0"}) + + restarted = self.snapshot(tracking, 300)["processes"]["go2rtc"] + self.assertEqual(restarted, {"pid": 300, "cpu": "3.0", "mem": "30.0"})