diff --git a/sdk/python/feast/metrics.py b/sdk/python/feast/metrics.py index 7786af6f2f5..ea32837e494 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 = feature_views + 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)