From a91a2ce4ca0ca129b33cc645002f0438a6a93301 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Mon, 21 Apr 2025 12:09:01 -0500 Subject: [PATCH] Don't limit review summary query (#17835) * Don't limit review summary query The /review/summary endpoint was being restricted to the last 30 days, so unreviewed alerts and detections weren't showing in the calendar before that point. This change removes the WHERE clause so that the endpoint returns all results. * fix * remove unneeded test we are now returning all results so we don't need to test for > month_ago * fix --- frigate/api/review.py | 5 +- frigate/test/http_api/test_http_review.py | 76 ----------------------- 2 files changed, 2 insertions(+), 79 deletions(-) diff --git a/frigate/api/review.py b/frigate/api/review.py index b04c8353a..977a0aa94 100644 --- a/frigate/api/review.py +++ b/frigate/api/review.py @@ -176,7 +176,6 @@ async def review_summary( hour_modifier, minute_modifier, seconds_offset = get_tz_modifiers(params.timezone) day_ago = (datetime.datetime.now() - datetime.timedelta(hours=24)).timestamp() - month_ago = (datetime.datetime.now() - datetime.timedelta(days=30)).timestamp() cameras = params.cameras labels = params.labels @@ -277,7 +276,7 @@ async def review_summary( .get() ) - clauses = [(ReviewSegment.start_time > month_ago)] + clauses = [] if cameras != "all": camera_list = cameras.split(",") @@ -365,7 +364,7 @@ async def review_summary( & (UserReviewStatus.user_id == user_id) ), ) - .where(reduce(operator.and_, clauses)) + .where(reduce(operator.and_, clauses) if clauses else True) .group_by( (ReviewSegment.start_time + seconds_offset).cast("int") / day_in_seconds ) diff --git a/frigate/test/http_api/test_http_review.py b/frigate/test/http_api/test_http_review.py index 19c589a67..9fd0d1ea7 100644 --- a/frigate/test/http_api/test_http_review.py +++ b/frigate/test/http_api/test_http_review.py @@ -280,82 +280,6 @@ class TestHttpReview(BaseTestHttp): } self.assertEqual(response_json, expected_response) - def test_get_review_summary_multiple_days_edge_cases(self): - now = datetime.now() - five_days_ago = datetime.today() - timedelta(days=5) - twenty_days_ago = datetime.today() - timedelta(days=20) - one_month_ago = datetime.today() - timedelta(days=30) - one_month_ago_ts = one_month_ago.timestamp() - - with TestClient(self.app) as client: - super().insert_mock_review_segment("123456.random", now.timestamp()) - super().insert_mock_review_segment( - "123457.random", five_days_ago.timestamp() - ) - super().insert_mock_review_segment( - "123458.random", - twenty_days_ago.timestamp(), - None, - SeverityEnum.detection, - ) - # One month ago plus 5 seconds fits within the condition (review.start_time > month_ago). Assuming that the endpoint does not take more than 5 seconds to be invoked - super().insert_mock_review_segment( - "123459.random", - one_month_ago_ts + 5, - None, - SeverityEnum.detection, - ) - # This won't appear in the output since it's not within last month start_time clause (review.start_time > month_ago) - super().insert_mock_review_segment("123450.random", one_month_ago_ts) - response = client.get("/review/summary") - assert response.status_code == 200 - response_json = response.json() - # e.g. '2024-11-24' - today_formatted = now.strftime("%Y-%m-%d") - # e.g. '2024-11-19' - five_days_ago_formatted = five_days_ago.strftime("%Y-%m-%d") - # e.g. '2024-11-04' - twenty_days_ago_formatted = twenty_days_ago.strftime("%Y-%m-%d") - # e.g. '2024-10-24' - one_month_ago_formatted = one_month_ago.strftime("%Y-%m-%d") - expected_response = { - "last24Hours": { - "reviewed_alert": 0, - "reviewed_detection": 0, - "total_alert": 1, - "total_detection": 0, - }, - today_formatted: { - "day": today_formatted, - "reviewed_alert": 0, - "reviewed_detection": 0, - "total_alert": 1, - "total_detection": 0, - }, - five_days_ago_formatted: { - "day": five_days_ago_formatted, - "reviewed_alert": 0, - "reviewed_detection": 0, - "total_alert": 1, - "total_detection": 0, - }, - twenty_days_ago_formatted: { - "day": twenty_days_ago_formatted, - "reviewed_alert": 0, - "reviewed_detection": 0, - "total_alert": 0, - "total_detection": 1, - }, - one_month_ago_formatted: { - "day": one_month_ago_formatted, - "reviewed_alert": 0, - "reviewed_detection": 0, - "total_alert": 0, - "total_detection": 1, - }, - } - self.assertEqual(response_json, expected_response) - def test_get_review_summary_multiple_in_same_day(self): now = datetime.now() five_days_ago = datetime.today() - timedelta(days=5)