ok
Direktori : /opt/cloudlinux/venv/lib/python3.11/site-packages/clconfigure/ |
Current File : //opt/cloudlinux/venv/lib/python3.11/site-packages/clconfigure/watcher.py |
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2018 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # https://cloudlinux.com/docs/LICENCE.TXT # import logging import os import re import subprocess import time from clcommon.lib.cledition import ( CLEditions, CLEditionDetectionError ) from lve_utils import PKG_VERSION PKG_VERSION_TINY = re.sub(r'\.el\w(h?)\.', '.elX.', PKG_VERSION) # https://cl.sentry.cloudlinux.com/settings/cloudlinux_os/projects/userland SENTRY_DSN = 'https://9713d1296f804031b058b8f2d789d7ac:' \ '8ddacae32d8246cf8b25cf826bf3fc0a@cl.sentry.cloudlinux.com/12' LAST_KNOWN_EDITION_CACHE_PATH = '/var/lve/.edition.previous' SYSTEMID_FILE_PATH = '/etc/sysconfig/rhn/systemid' # how much time should past after registration # before we assume that server is "old" _SECONDS_IN_DAY = 24 * 60 * 60 SYSTEMID_NEW_TIME = 3 * _SECONDS_IN_DAY def _reconfigure_server(current_edition): """ Run reconfiguration script """ subprocess.run([ 'cloudlinux-customizer', 'reconfigure', '-t', current_edition], check=True, text=True, stderr=subprocess.STDOUT ) # _on_* handlers below are different for the future additional actions # that will be added with edition switch support def _on_edition_changed(previous_edition, current_edition): """ Called when saved edition does not match current one. """ if current_edition in ('shared_pro', 'admin', 'solo'): _reconfigure_server(current_edition) def _on_server_newly_registered(current_edition): """ Called when saved server id detected as one registered recently """ if current_edition in ('shared_pro', 'admin', 'solo'): _reconfigure_server(current_edition) def _get_registration_time(): """ Assume that last registration time is the date of systemid modification. """ try: return os.path.getmtime(SYSTEMID_FILE_PATH) except FileNotFoundError: return None def _get_last_check_time(): """ Assume that last check time is equal to the date of last cache modification. """ try: return os.path.getmtime(LAST_KNOWN_EDITION_CACHE_PATH) except FileNotFoundError: return None def check(): """ Compares current edition with latest saved in file and """ try: with open(LAST_KNOWN_EDITION_CACHE_PATH) as f: last_edition = f.read() except FileNotFoundError: last_edition = None registration_time = _get_registration_time() is_registration_fresh = \ registration_time is not None \ and registration_time >= (time.time() - SYSTEMID_NEW_TIME) last_check_time = _get_last_check_time() is_last_check_before_registration = \ (last_check_time is None) or ( registration_time is not None and last_check_time < registration_time) current_edition = CLEditions.get_cl_edition() if is_last_check_before_registration and is_registration_fresh: _on_server_newly_registered(current_edition) elif last_edition and last_edition != current_edition: _on_edition_changed(last_edition, current_edition) save_edition() def save_edition(): """ Stores current edition value in cache file """ try: with open(LAST_KNOWN_EDITION_CACHE_PATH, 'w') as f: f.write(CLEditions.get_cl_edition(verify_exp=False)) except CLEditionDetectionError as e: logging.warning('Unable to detect current edition, error=%s', e)