diff --git a/swh/scheduler/backend.py b/swh/scheduler/backend.py --- a/swh/scheduler/backend.py +++ b/swh/scheduler/backend.py @@ -131,6 +131,21 @@ cur.execute(query) return cur.fetchall() + @db_transaction() + def get_listers(self, db=None, cur=None) -> List[Lister]: + """Retrieve information about all listers from the database. + """ + + select_cols = ", ".join(Lister.select_columns()) + + query = f""" + select {select_cols} from listers + """ + + cur.execute(query) + + return [Lister(**ret) for ret in cur.fetchall()] + @db_transaction() def get_lister( self, name: str, instance_name: Optional[str] = None, db=None, cur=None diff --git a/swh/scheduler/interface.py b/swh/scheduler/interface.py --- a/swh/scheduler/interface.py +++ b/swh/scheduler/interface.py @@ -323,6 +323,12 @@ """Search task run for a task id""" ... + @remote_api_endpoint("listers/get") + def get_listers(self) -> List[Lister]: + """Retrieve information about all listers from the database. + """ + ... + @remote_api_endpoint("lister/get") def get_lister( self, name: str, instance_name: Optional[str] = None diff --git a/swh/scheduler/tests/test_api_client.py b/swh/scheduler/tests/test_api_client.py --- a/swh/scheduler/tests/test_api_client.py +++ b/swh/scheduler/tests/test_api_client.py @@ -45,6 +45,7 @@ "lister/get", "lister/get_or_create", "lister/update", + "listers/get", "origins/get", "origins/grab_next", "origins/record", diff --git a/swh/scheduler/tests/test_scheduler.py b/swh/scheduler/tests/test_scheduler.py --- a/swh/scheduler/tests/test_scheduler.py +++ b/swh/scheduler/tests/test_scheduler.py @@ -647,6 +647,15 @@ assert lister == lister_get_again + def test_get_listers(self, swh_scheduler): + assert swh_scheduler.get_listers() == [] + + db_listers = [] + for lister_args in LISTERS: + db_listers.append(swh_scheduler.get_or_create_lister(**lister_args)) + + assert swh_scheduler.get_listers() == db_listers + def test_update_lister(self, swh_scheduler, stored_lister): lister = attr.evolve(stored_lister, current_state={"updated": "now"})