File indexing completed on 2026-04-20 07:58:58
0001 import os
0002 from datetime import datetime, timedelta
0003
0004 from pandaharvester.harvestercore import core_utils
0005
0006 from .base_cred_manager import BaseCredManager
0007
0008
0009 _logger = core_utils.setup_logger("superfacility_cred_manager")
0010
0011
0012 class SuperfacilityCredManager(BaseCredManager):
0013
0014 def __init__(self, **kwarg):
0015 BaseCredManager.__init__(self, **kwarg)
0016
0017 main_log = self.make_logger(_logger, method_name="__init__")
0018
0019 self.setupMap = dict(vars(self))
0020
0021 self.cred_dir = self.setupMap.get("cred_dir")
0022 self.lifetime_days = int(self.setupMap.get("lifetime_days", 30))
0023 self.date_format = "%Y-%m-%d-%H%M"
0024
0025
0026 def check_credential_lifetime(self):
0027 main_log = self.make_logger(_logger, method_name="check_credential_lifetime")
0028 lifetime = None
0029 try:
0030 real_dir = os.path.realpath(self.cred_dir)
0031 basename = os.path.basename(real_dir)
0032 created_dt = datetime.strptime(basename, self.date_format)
0033 age = datetime.now() - created_dt
0034 lifetime_all = timedelta(days=self.lifetime_days)
0035 main_log.debug(f"age={age}, lifetime_all={lifetime_all}")
0036 timediff = lifetime_all - age
0037 lifetime = timediff.days * 24 + timediff.seconds / 3600
0038 except Exception:
0039 core_utils.dump_error_message(main_log)
0040 if isinstance(lifetime, float):
0041 main_log.debug(f"returning lifetime (in hour) {lifetime:.3f}")
0042 else:
0043 main_log.debug(f"returning lifetime (in hour) {lifetime}")
0044 return lifetime
0045
0046 def check_credential(self):
0047
0048 main_log = self.make_logger(_logger, method_name="check_credential")
0049 try:
0050 real_dir = os.path.realpath(self.cred_dir)
0051 basename = os.path.basename(real_dir)
0052 created_dt = datetime.strptime(basename, self.date_format)
0053 age = datetime.now() - created_dt
0054 lifetime_all = timedelta(days=self.lifetime_days)
0055 main_log.debug(f"age={age}, lifetime_all={lifetime_all}")
0056 return age <= lifetime_all
0057 except Exception as e:
0058 main_log.debug(f"[SuperfacilityCredManager] check_credential func call with error: {e}")
0059 core_utils.dump_error_message(main_log)
0060 return False
0061
0062 def renew_credential(self):
0063
0064
0065 real_dir = os.path.realpath(self.cred_dir)
0066 msg = f"SuperfacilityClient credentials expired or invalid: symlink {self.cred_dir} points to {real_dir} which is older than {self.lifetime_days} days. "
0067 return False, msg