ok

Mini Shell

Direktori : /opt/cloudlinux/venv/lib/python3.11/site-packages/clconfigure/
Upload File :
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)

Zerion Mini Shell 1.0