From fa61dcbbb2b915b83b714d64290ff7196e7bcffc Mon Sep 17 00:00:00 2001 From: deajan Date: Fri, 28 Mar 2025 09:06:54 +0100 Subject: [PATCH] Make NTP offset configurable, allow fix potential bad log line --- npbackup/__env__.py | 3 +++ npbackup/core/runner.py | 14 ++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/npbackup/__env__.py b/npbackup/__env__.py index 2c93a9e..5e1dae7 100644 --- a/npbackup/__env__.py +++ b/npbackup/__env__.py @@ -34,6 +34,9 @@ FAST_COMMANDS_TIMEOUT = 180 # # Wait x seconds before we actually do the upgrade so current program could quit before being erased UPGRADE_DEFER_TIME = 60 +# Maximum allowed time offset in seconds to allow policy operations to run +MAX_ALLOWED_NTP_OFFSET = 600.0 + if not "BUILD_TYPE" in globals(): BUILD_TYPE = "UnknownBuildType" diff --git a/npbackup/core/runner.py b/npbackup/core/runner.py index fb2550c..187d51a 100644 --- a/npbackup/core/runner.py +++ b/npbackup/core/runner.py @@ -37,6 +37,7 @@ from npbackup.core import jobs from npbackup.path_helper import CURRENT_DIR, BASEDIR from npbackup.__version__ import __intname__ as NAME, version_dict from npbackup.__debug__ import _DEBUG, exception_to_string +from npbackup.__env__ import MAX_ALLOWED_NTP_OFFSET logger = logging.getLogger() @@ -238,8 +239,10 @@ def get_ntp_offset(ntp_server: str) -> Optional[float]: return response.offset except ntplib.NTPException as exc: logger.error(f"Cannot get NTP offset from {ntp_server}: {exc}") + logger.debug("Trace:", exc_info=True) except Exception as exc: logger.error(f"Cannot reach NTP server {ntp_server}: {exc}") + logger.debug("Trace:", exc_info=True) return None @@ -1623,10 +1626,13 @@ class NPBackupRunner: f"Checking time against ntp server {ntp_server}", level="info" ) offset = get_ntp_offset(ntp_server) - if not offset or offset >= 600: - msg = f"Offset from NTP server {ntp_server} is too high: {int(offset)} seconds. Won't apply policy" - self.write_logs(msg, level="critical") - return self.convert_to_json_output(False, msg) + if not offset or offset > float(MAX_ALLOWED_NTP_OFFSET): + if not offset: + msg = f"Offset cannot be obtained from NTP server {ntp_server}" + elif offset > float(MAX_ALLOWED_NTP_OFFSET): + msg = f"Offset from NTP server {ntp_server} is too high: {offset} seconds. Won't apply policy" + self.write_logs(msg, level="critical") + return self.convert_to_json_output(False, msg) # Build policy from config policy = {}