Add the use of time-aware datetime objects everywhere

This commit is contained in:
Théophile Diot 2024-08-27 19:31:38 +01:00
parent b32171aae9
commit efe8835d3c
No known key found for this signature in database
GPG key ID: FA995104A0BA376A
11 changed files with 40 additions and 40 deletions

View file

@ -82,9 +82,9 @@ class Config:
)
def wait_applying(self, startup: bool = False):
current_time = datetime.now()
current_time = datetime.now().astimezone()
ready = False
while not ready and (datetime.now() - current_time).seconds < 240:
while not ready and (datetime.now().astimezone() - current_time).seconds < 240:
db_metadata = self._db.get_metadata()
if isinstance(db_metadata, str):
if not startup:

View file

@ -48,7 +48,7 @@ try:
sys_exit(1)
LOGGER.info("Backing up the current database before restoring the backup ...")
current_time = datetime.now()
current_time = datetime.now().astimezone()
tmp_backup_dir = Path(sep, "tmp", "bunkerweb", "backups")
tmp_backup_dir.mkdir(parents=True, exist_ok=True)
db = backup_database(current_time, backup_dir=tmp_backup_dir)

View file

@ -44,7 +44,7 @@ try:
LOGGER.info(f"Creating directory {directory} as it does not exist")
directory.mkdir(parents=True, exist_ok=True)
db = backup_database(datetime.now(), backup_dir=directory)
db = backup_database(datetime.now().astimezone(), backup_dir=directory)
if directory == BACKUP_DIR:
update_cache_file(db, directory)

View file

@ -35,7 +35,7 @@ try:
if last_backup_date:
last_backup_date = datetime.fromisoformat(last_backup_date).astimezone()
current_time = datetime.now()
current_time = datetime.now().astimezone()
backup_period = getenv("BACKUP_SCHEDULE", "daily")
PERIOD_STAMPS = {
"daily": timedelta(days=1).total_seconds(),

View file

@ -30,7 +30,7 @@ DB_LOCK_FILE = Path(sep, "var", "lib", "bunkerweb", "db.lock")
def acquire_db_lock():
"""Acquire the database lock to prevent concurrent access to the database."""
current_time = datetime.now()
current_time = datetime.now().astimezone()
while DB_LOCK_FILE.is_file() and DB_LOCK_FILE.stat().st_ctime + 30 > current_time.timestamp():
LOGGER.warning("Database is locked, waiting for it to be unlocked (timeout: 30s) ...")
sleep(1)
@ -61,9 +61,9 @@ def backup_database(current_time: datetime, db: Database = None, backup_dir: Pat
backup_file = backup_dir.joinpath(f"backup-{database}-{current_time.strftime('%Y-%m-%d_%H-%M-%S')}.zip")
LOGGER.debug(f"Backup file path: {backup_file}")
stderr = "Table 'db.test_"
current_time = datetime.now()
current_time = datetime.now().astimezone()
while "Table 'db.test_" in stderr and (datetime.now() - current_time).total_seconds() < 10:
while "Table 'db.test_" in stderr and (datetime.now().astimezone() - current_time).total_seconds() < 10:
if database == "sqlite":
match = DB_STRING_RX.search(db.database_uri)
if not match:
@ -109,7 +109,7 @@ def backup_database(current_time: datetime, db: Database = None, backup_dir: Pat
LOGGER.error(f"Failed to dump the database: {stderr}")
sys_exit(1)
if (datetime.now() - current_time).total_seconds() >= 10:
if (datetime.now().astimezone() - current_time).total_seconds() >= 10:
LOGGER.error("Failed to dump the database: Timeout reached")
sys_exit(1)

View file

@ -62,7 +62,7 @@ try:
if response and response.status_code == 200:
skip_dl = response.content.find(bytes_hash(job_cache["data"], algorithm="sha1").encode()) != -1
elif job_cache["last_update"] < (datetime.now() - timedelta(weeks=1)).timestamp():
elif job_cache["last_update"] < (datetime.now().astimezone() - timedelta(weeks=1)).timestamp():
LOGGER.warning("Unable to check if the cache file is the latest version from db-ip.com and file is older than 1 week, checking anyway...")
skip_dl = False

View file

@ -62,7 +62,7 @@ try:
if response and response.status_code == 200:
skip_dl = response.content.find(bytes_hash(job_cache["data"], algorithm="sha1").encode()) != -1
elif job_cache["last_update"] < (datetime.now() - timedelta(weeks=1)).timestamp():
elif job_cache["last_update"] < (datetime.now().astimezone() - timedelta(weeks=1)).timestamp():
LOGGER.warning("Unable to check if the cache file is the latest version from db-ip.com and file is older than 1 week, checking anyway...")
skip_dl = False

View file

@ -95,7 +95,7 @@ def install_plugin(plugin_path: Path, db, preview: bool = True) -> bool:
try:
db = Database(LOGGER, sqlalchemy_string=getenv("DATABASE_URI"))
db_metadata = db.get_metadata()
current_date = datetime.now()
current_date = datetime.now().astimezone()
pro_license_key = getenv("PRO_LICENSE_KEY", "").strip()
LOGGER.info("Checking BunkerWeb Pro status...")

View file

@ -168,7 +168,7 @@ class Database:
DATABASE_RETRY_TIMEOUT = int(DATABASE_RETRY_TIMEOUT)
current_time = datetime.now()
current_time = datetime.now().astimezone()
not_connected = True
fallback = False
@ -185,7 +185,7 @@ class Database:
not_connected = False
except (OperationalError, DatabaseError) as e:
if (datetime.now() - current_time).total_seconds() > DATABASE_RETRY_TIMEOUT:
if (datetime.now().astimezone() - current_time).total_seconds() > DATABASE_RETRY_TIMEOUT:
if not fallback and self.database_uri_readonly:
self.logger.error(f"Can't connect to database after {DATABASE_RETRY_TIMEOUT} seconds. Falling back to read-only database connection")
self.sql_engine.dispose(close=True)
@ -241,7 +241,7 @@ class Database:
def retry_connection(self, *, readonly: bool = False, fallback: bool = False, log: bool = True, **kwargs) -> None:
"""Retry the connection to the database"""
self.last_connection_retry = datetime.now()
self.last_connection_retry = datetime.now().astimezone()
if log:
self.logger.debug(f"Retrying the connection to the database{' in read-only mode' if readonly else ''}{' with fallback' if fallback else ''} ...")
@ -476,7 +476,7 @@ class Database:
if not metadata:
return "The metadata are not set yet, try again"
current_time = datetime.now()
current_time = datetime.now().astimezone()
if "config" in changes:
if not metadata.first_config_saved:
@ -536,7 +536,7 @@ class Database:
db_ui_version = db_version
self.logger.warning(f"Database version ({db_version}) is different from Bunkerweb version ({bunkerweb_version}), migrating ...")
current_time = datetime.now()
current_time = datetime.now().astimezone()
error = True
# ? Wait for the metadata to be available
while error:
@ -545,7 +545,7 @@ class Database:
metadata.reflect(self.sql_engine)
error = False
except BaseException as e:
if (datetime.now() - current_time).total_seconds() > 10:
if (datetime.now().astimezone() - current_time).total_seconds() > 10:
raise e
sleep(1)
@ -1328,7 +1328,7 @@ class Database:
session.query(Custom_configs).filter(Custom_configs.service_id.in_(missing_ids)).delete()
session.query(Jobs_cache).filter(Jobs_cache.service_id.in_(missing_ids)).delete()
session.query(Metadata).filter_by(id=1).update(
{Metadata.custom_configs_changed: True, Metadata.last_custom_configs_change: datetime.now()}
{Metadata.custom_configs_changed: True, Metadata.last_custom_configs_change: datetime.now().astimezone()}
)
changed_services = True
@ -1672,7 +1672,7 @@ class Database:
metadata = session.query(Metadata).get(1)
if metadata is not None:
metadata.custom_configs_changed = True
metadata.last_custom_configs_change = datetime.now()
metadata.last_custom_configs_change = datetime.now().astimezone()
try:
session.add_all(to_put)
@ -1994,7 +1994,7 @@ class Database:
if self.readonly:
return "The database is read-only, the changes will not be saved"
session.add(Jobs_runs(job_name=job_name, success=success, start_date=start_date, end_date=end_date or datetime.now()))
session.add(Jobs_runs(job_name=job_name, success=success, start_date=start_date, end_date=end_date or datetime.now().astimezone()))
try:
session.commit()
@ -2062,13 +2062,13 @@ class Database:
service_id=service_id,
file_name=file_name,
data=data,
last_update=datetime.now(),
last_update=datetime.now().astimezone(),
checksum=checksum,
)
)
else:
cache.data = data
cache.last_update = datetime.now()
cache.last_update = datetime.now().astimezone()
cache.checksum = checksum
try:
@ -2858,10 +2858,10 @@ class Database:
if metadata is not None:
if _type in ("external", "ui"):
metadata.external_plugins_changed = True
metadata.last_external_plugins_change = datetime.now()
metadata.last_external_plugins_change = datetime.now().astimezone()
elif _type == "pro":
metadata.pro_plugins_changed = True
metadata.last_pro_plugins_change = datetime.now()
metadata.last_pro_plugins_change = datetime.now().astimezone()
try:
session.add_all(to_put)
@ -2902,10 +2902,10 @@ class Database:
if metadata is not None:
if method in ("external", "ui"):
metadata.external_plugins_changed = True
metadata.last_external_plugins_change = datetime.now()
metadata.last_external_plugins_change = datetime.now().astimezone()
elif method == "pro":
metadata.pro_plugins_changed = True
metadata.last_pro_plugins_change = datetime.now()
metadata.last_pro_plugins_change = datetime.now().astimezone()
try:
session.commit()
@ -3127,7 +3127,7 @@ class Database:
if db_instance is not None:
return f"Instance {hostname} already exists, will not be added."
current_time = datetime.now()
current_time = datetime.now().astimezone()
session.add(
Instances(
hostname=hostname,
@ -3145,7 +3145,7 @@ class Database:
metadata = session.query(Metadata).get(1)
if metadata is not None:
metadata.instances_changed = True
metadata.last_instances_change = datetime.now()
metadata.last_instances_change = datetime.now().astimezone()
try:
session.commit()
@ -3172,7 +3172,7 @@ class Database:
metadata = session.query(Metadata).get(1)
if metadata is not None:
metadata.instances_changed = True
metadata.last_instances_change = datetime.now()
metadata.last_instances_change = datetime.now().astimezone()
try:
session.commit()
@ -3194,7 +3194,7 @@ class Database:
if instance.get("hostname") is None:
continue
current_time = datetime.now()
current_time = datetime.now().astimezone()
to_put.append(
Instances(
hostname=instance["hostname"],
@ -3214,7 +3214,7 @@ class Database:
metadata = session.query(Metadata).get(1)
if metadata is not None:
metadata.instances_changed = True
metadata.last_instances_change = datetime.now()
metadata.last_instances_change = datetime.now().astimezone()
try:
session.add_all(to_put)
@ -3236,7 +3236,7 @@ class Database:
return f"Instance {hostname} does not exist, will not be updated."
db_instance.status = status
db_instance.last_seen = datetime.now()
db_instance.last_seen = datetime.now().astimezone()
try:
session.commit()

View file

@ -162,7 +162,7 @@ class JobScheduler(ApiCaller):
self.__logger.info(f"Executing job {name} from plugin {plugin} ...")
success = True
ret = -1
start_date = datetime.now()
start_date = datetime.now().astimezone()
try:
proc = run(join(path, "jobs", file), stdin=DEVNULL, stderr=STDOUT, env=self.__env, check=False)
ret = proc.returncode
@ -171,7 +171,7 @@ class JobScheduler(ApiCaller):
self.__logger.error(f"Exception while executing job {name} from plugin {plugin} :\n{format_exc()}")
with self.__thread_lock:
self.__job_success = False
end_date = datetime.now()
end_date = datetime.now().astimezone()
if ret == 1:
with self.__thread_lock:
@ -351,7 +351,7 @@ class JobScheduler(ApiCaller):
except BaseException:
self.db.readonly = True
return True
elif not force and self.db.last_connection_retry and (datetime.now() - self.db.last_connection_retry).total_seconds() > 30:
elif not force and self.db.last_connection_retry and (datetime.now().astimezone() - self.db.last_connection_retry).total_seconds() > 30:
return True
if self.db.database_uri and self.db.readonly:

View file

@ -97,8 +97,8 @@ MASTER_MODE = getenv("MASTER_MODE", "no") == "yes"
def handle_stop(signum, frame):
current_time = datetime.now()
while APPLYING_CHANGES.is_set() and (datetime.now() - current_time).seconds < 30:
current_time = datetime.now().astimezone()
while APPLYING_CHANGES.is_set() and (datetime.now().astimezone() - current_time).seconds < 30:
LOGGER.warning("Waiting for the changes to be applied before stopping ...")
sleep(1)
@ -908,7 +908,7 @@ if __name__ == "__main__":
scheduler_first_start = False
if not HEALTHY_PATH.is_file():
HEALTHY_PATH.write_text(datetime.now().isoformat(), encoding="utf-8")
HEALTHY_PATH.write_text(datetime.now().astimezone().isoformat(), encoding="utf-8")
APPLYING_CHANGES.clear()
schedule_every(HEALTHCHECK_INTERVAL).seconds.do(healthcheck_job)
@ -921,7 +921,7 @@ if __name__ == "__main__":
sleep(3 if SCHEDULER.db.readonly else 1)
run_pending()
SCHEDULER.run_pending()
current_time = datetime.now()
current_time = datetime.now().astimezone()
while DB_LOCK_FILE.is_file() and DB_LOCK_FILE.stat().st_ctime + 30 > current_time.timestamp():
LOGGER.debug("Database is locked, waiting for it to be unlocked (timeout: 30s) ...")