mirror of
https://github.com/bunkerity/bunkerweb
synced 2026-05-24 09:28:37 +00:00
Add the use of time-aware datetime objects everywhere
This commit is contained in:
parent
b32171aae9
commit
efe8835d3c
11 changed files with 40 additions and 40 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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...")
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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) ...")
|
||||
|
|
|
|||
Loading…
Reference in a new issue