From 4e12f70aec950cb193a08e77a40c9fe3f285c7ee Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Mon, 3 Jun 2024 15:53:42 +0200
Subject: [PATCH] Only run validation workflows on subscriptions that are both
 ACTIVE and in sync

---
 gso/schedules/validate_subscriptions.py | 4 ++--
 gso/services/subscriptions.py           | 9 +++++++++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/gso/schedules/validate_subscriptions.py b/gso/schedules/validate_subscriptions.py
index 9e79ec91..4a68b6f0 100644
--- a/gso/schedules/validate_subscriptions.py
+++ b/gso/schedules/validate_subscriptions.py
@@ -6,7 +6,7 @@ from orchestrator.services.subscriptions import TARGET_DEFAULT_USABLE_MAP, WF_US
 from orchestrator.targets import Target
 
 from gso.schedules.scheduling import CronScheduleConfig, scheduler
-from gso.services.subscriptions import get_insync_subscriptions
+from gso.services.subscriptions import get_active_insync_subscriptions
 from gso.worker import celery
 
 logger = structlog.get_logger(__name__)
@@ -16,7 +16,7 @@ logger = structlog.get_logger(__name__)
 @scheduler(CronScheduleConfig(name="Subscriptions Validator", minute="10", hour="0"))
 def validate_subscriptions() -> None:
     """Validate all subscriptions using their corresponding validation workflow."""
-    subscriptions = get_insync_subscriptions()
+    subscriptions = get_active_insync_subscriptions()
     if not subscriptions:
         logger.info("No subscriptions to validate")
         return
diff --git a/gso/services/subscriptions.py b/gso/services/subscriptions.py
index 03e4f108..0c402963 100644
--- a/gso/services/subscriptions.py
+++ b/gso/services/subscriptions.py
@@ -210,6 +210,15 @@ def get_insync_subscriptions() -> list[SubscriptionTable]:
     return SubscriptionTable.query.join(ProductTable).filter(SubscriptionTable.insync.is_(True)).all()
 
 
+def get_active_insync_subscriptions() -> list[SubscriptionTable]:
+    """Retrieve all subscriptions that are currently active and in sync."""
+    return (
+        SubscriptionTable.query.join(ProductTable)
+        .filter(SubscriptionTable.insync.is_(True), SubscriptionTable.status.is_(SubscriptionLifecycle.ACTIVE))
+        .all()
+    )
+
+
 def get_site_by_name(site_name: str) -> Site:
     """Get a site by its name.
 
-- 
GitLab