From 65cb0c140a2a0bba6ea82e3076231758d4aa8d70 Mon Sep 17 00:00:00 2001 From: Vanshika Vanshika Date: Mon, 13 Apr 2026 18:57:34 +0530 Subject: [PATCH 1/2] added stream_fv Signed-off-by: Vanshika Vanshika Signed-off-by: Vanshika Vanshika rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED --- sdk/python/feast/metrics.py | 4 +++- sdk/python/tests/unit/test_metrics.py | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/sdk/python/feast/metrics.py b/sdk/python/feast/metrics.py index 7786af6f2f5..92eac824149 100644 --- a/sdk/python/feast/metrics.py +++ b/sdk/python/feast/metrics.py @@ -378,8 +378,10 @@ def update_feature_freshness( """ try: feature_views = store.list_feature_views(allow_cache=True) + stream_feature_views = store.list_stream_feature_views(allow_cache=True) + all_views = list(feature_views) + list(stream_feature_views) now = datetime.now(tz=timezone.utc) - for fv in feature_views: + for fv in all_views: end_time = fv.most_recent_end_time if end_time is not None: if end_time.tzinfo is None: diff --git a/sdk/python/tests/unit/test_metrics.py b/sdk/python/tests/unit/test_metrics.py index 17aaa5d1337..906edcc5077 100644 --- a/sdk/python/tests/unit/test_metrics.py +++ b/sdk/python/tests/unit/test_metrics.py @@ -493,9 +493,16 @@ def test_sets_freshness_for_materialized_views(self): minutes=5 ) + mock_sfv = MagicMock() + mock_sfv.name = "test_sfv" + mock_sfv.most_recent_end_time = datetime.now(tz=timezone.utc) - timedelta( + minutes=5 + ) + mock_store = MagicMock() mock_store.project = "test_project" mock_store.list_feature_views.return_value = [mock_fv] + mock_store.list_stream_feature_views.return_value = [mock_sfv] update_feature_freshness(mock_store) @@ -504,6 +511,11 @@ def test_sets_freshness_for_materialized_views(self): )._value.get() assert 280 < staleness < 320 + sfv_staleness = feature_freshness_seconds.labels( + feature_view="test_sfv", project="test_project" + )._value.get() + assert 280 < sfv_staleness < 320 + def test_skips_unmaterialized_views(self): mock_fv = MagicMock() mock_fv.name = "unmaterialized_fv" @@ -512,6 +524,7 @@ def test_skips_unmaterialized_views(self): mock_store = MagicMock() mock_store.project = "test_project" mock_store.list_feature_views.return_value = [mock_fv] + mock_store.list_stream_feature_views.return_value = [] update_feature_freshness(mock_store) @@ -525,6 +538,7 @@ def test_handles_naive_datetime(self): mock_store = MagicMock() mock_store.project = "test_project" mock_store.list_feature_views.return_value = [mock_fv] + mock_store.list_stream_feature_views.return_value = [] update_feature_freshness(mock_store) From 9eff63477689c34156ecea0a69bc84568fc65b73 Mon Sep 17 00:00:00 2001 From: Vanshika Vanshika Date: Mon, 13 Apr 2026 19:55:07 +0530 Subject: [PATCH 2/2] nit Signed-off-by: Vanshika Vanshika rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED --- sdk/python/feast/metrics.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/python/feast/metrics.py b/sdk/python/feast/metrics.py index 92eac824149..ea32837e494 100644 --- a/sdk/python/feast/metrics.py +++ b/sdk/python/feast/metrics.py @@ -379,7 +379,7 @@ def update_feature_freshness( try: feature_views = store.list_feature_views(allow_cache=True) stream_feature_views = store.list_stream_feature_views(allow_cache=True) - all_views = list(feature_views) + list(stream_feature_views) + all_views = feature_views + stream_feature_views now = datetime.now(tz=timezone.utc) for fv in all_views: end_time = fv.most_recent_end_time