From 751be27ac7d2c2e029107d25d2865900587c5f8a Mon Sep 17 00:00:00 2001 From: Barthelemy Date: Fri, 24 Jan 2025 14:29:16 +0100 Subject: [PATCH] Add option to print extra details about the Versions during deletion --- .../script/RepoCleaner/qcrepocleaner/Ccdb.py | 29 ++++++++++++------- .../qcrepocleaner/o2-qc-repo-cleaner | 4 ++- .../o2-qc-repo-delete-objects-in-runs | 4 ++- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/Framework/script/RepoCleaner/qcrepocleaner/Ccdb.py b/Framework/script/RepoCleaner/qcrepocleaner/Ccdb.py index 75b593e771..d0dec6f464 100644 --- a/Framework/script/RepoCleaner/qcrepocleaner/Ccdb.py +++ b/Framework/script/RepoCleaner/qcrepocleaner/Ccdb.py @@ -13,12 +13,14 @@ class ObjectVersion: ''' - A version of an object in the CCDB. - - In the CCDB an object can have many versions with different validity intervals. - This class represents a single version. + A version of an object in the CCDB. + + In the CCDB an object can have many versions with different validity intervals. + This class represents a single version. ''' + print_details = False + def __init__(self, path: str, validFrom, validTo, createdAt, uuid=None, metadata=None): ''' Construct an ObjectVersion. @@ -27,6 +29,8 @@ def __init__(self, path: str, validFrom, validTo, createdAt, uuid=None, metadata :param validFrom: validity range smaller limit (in ms) :param validTo: validity range bigger limit (in ms) :param createdAt: creation timestamp of the object + :param uuid: unique id of the object + :param metadata: metadata of the object ''' self.path = path self.uuid = uuid @@ -42,10 +46,14 @@ def __init__(self, path: str, validFrom, validTo, createdAt, uuid=None, metadata def __repr__(self): if "Run" in self.metadata or "RunNumber" in self.metadata: run_number = self.metadata["Run"] if "Run" in self.metadata else self.metadata["RunNumber"] - return f"Version of object {self.path} created at {self.createdAtDt.strftime('%Y-%m-%d %H:%M:%S')}, valid from {self.validFromAsDt.strftime('%Y-%m-%d %H:%M:%S')}, run {run_number} (uuid {self.uuid})" else: - return f"Version of object {self.path} created at {self.createdAtDt.strftime('%Y-%m-%d %H:%M:%S')}, valid from {self.validFromAsDt.strftime('%Y-%m-%d %H:%M:%S')} (uuid {self.uuid}, " \ - f"ts {self.validFrom})" + run_number = "None" + + representation = f"Version of object {self.path} created at {self.createdAtDt.strftime('%Y-%m-%d %H:%M:%S')}, valid from" \ + f"{self.validFromAsDt.strftime('%Y-%m-%d %H:%M:%S')}, uuid {self.uuid}, run {run_number}" + if ObjectVersion.print_details: + representation += f", metadata: {self.metadata}" + return representation class Ccdb: @@ -58,9 +66,10 @@ class Ccdb: counter_preserved: int = 0 set_adjustable_eov: bool = False # if True, set the metadata adjustableEOV before change validity - def __init__(self, url): + def __init__(self, url, print_details=False): logger.info(f"Instantiate CCDB at {url}") self.url = url + ObjectVersion.print_details = print_details def getObjectsList(self, added_since: int = 0, path: str = "", no_wildcard: bool = False) -> List[str]: ''' @@ -150,7 +159,7 @@ def getVersionsList(self, object_path: str, from_ts: str = "", to_ts: str = "", @dryable.Dryable() def deleteVersion(self, version: ObjectVersion): ''' - Delete the specified version of an object. + Delete the specified version of an object. :param version: The version of the object to delete, as an instance of ObjectVersion. ''' url_delete = self.url + '/' + version.path + '/' + str(version.validFrom) + '/' + version.uuid @@ -203,7 +212,7 @@ def updateValidity(self, version: ObjectVersion, valid_from: int, valid_to: int, r = requests.put(full_path, headers=headers) r.raise_for_status() self.counter_validity_updated += 1 - except requests.exceptions.RequestException as e: + except requests.exceptions.RequestException as e: logging.error(f"Exception in updateValidity: {traceback.format_exc()}") @dryable.Dryable() diff --git a/Framework/script/RepoCleaner/qcrepocleaner/o2-qc-repo-cleaner b/Framework/script/RepoCleaner/qcrepocleaner/o2-qc-repo-cleaner index 6923caf114..a2bb121f26 100755 --- a/Framework/script/RepoCleaner/qcrepocleaner/o2-qc-repo-cleaner +++ b/Framework/script/RepoCleaner/qcrepocleaner/o2-qc-repo-cleaner @@ -103,6 +103,8 @@ def parseArgs(): 'only-path points to an object rather than a folder or if subdirectories must be ignored.') parser.add_argument('--ignore-last-execution', dest='ignore_last_execution', action='store_true', default=False, help='Do not check when was the last execution, run from timestamp 0.') + parser.add_argument('--print-versions-details', dest='print_versions_details', action='store_true', default=False, + help='Print extra details about the versions if enabled..') args = parser.parse_args() dryable.set(args.dry_run) logging.info(args) @@ -373,7 +375,7 @@ def process_object(object_path, rules, ccdb, args): def run(args, ccdb_url, rules): # Get list of objects from CCDB - ccdb = Ccdb(ccdb_url) + ccdb = Ccdb(ccdb_url, args.print_versions_details) ccdb.logger = logging.getLogger ccdb.set_adjustable_eov = args.set_adjustableEOV logging.info(f"ccdb.set_adjustable_eov: {ccdb.set_adjustable_eov}") diff --git a/Framework/script/RepoCleaner/qcrepocleaner/o2-qc-repo-delete-objects-in-runs b/Framework/script/RepoCleaner/qcrepocleaner/o2-qc-repo-delete-objects-in-runs index 60b9592359..50267622b3 100755 --- a/Framework/script/RepoCleaner/qcrepocleaner/o2-qc-repo-delete-objects-in-runs +++ b/Framework/script/RepoCleaner/qcrepocleaner/o2-qc-repo-delete-objects-in-runs @@ -30,6 +30,8 @@ def parseArgs(): parser.add_argument('--yes', action='store_true', help='Answers yes to all. You should really not use that.') parser.add_argument('--metadata', dest='metadata', action='store', default="", help='Delete only versions matching these metadata. Format: "[/key=value]*"') + parser.add_argument('--print-versions-details', dest='print_versions_details', action='store_true', default=False, + help='Print extra details about the versions if enabled..') args = parser.parse_args() dryable.set(args.dry_run) logging.info(args) @@ -37,7 +39,7 @@ def parseArgs(): def run(args): - ccdb = Ccdb(args.url) + ccdb = Ccdb(args.url, args.print_versions_details) total_deleted = 0 total_planned = 0