| Server IP : 51.79.230.26 / Your IP : 216.73.217.128 Web Server : LiteSpeed System : Linux sg2.exonhost.com 5.14.0-611.55.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May 19 15:19:29 EDT 2026 x86_64 User : mukutpub ( 1151) PHP Version : 8.2.33 Disable Function : eval, show_source, system, shell_exec, passthru, exec, popen, proc_open, allow_url_fopen, symlink, mail MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /opt/cloudlinux/venv/lib/python3.11/site-packages/ssa/internal/ |
Upload File : |
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2021 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT
import logging
import signal
import sys
from collections.abc import Callable, Iterable
from .utils import no_xray_active_tasks, switch_schedstats
logger = logging.getLogger("tools")
def log_on_receive(signum: int, frame) -> None:
"""
Signal handler to log received signal
"""
logger.info("Received sig: %i (%s)", signum, signum)
def sigterm_received(signum: int, frame) -> None:
"""
Handle SIGTERM received before RequestProcessor finishes initializing.
RequestProcessor installs its own shutdown handler once it is ready. The
agent has not accepted requests before then, so there is no data to flush,
and constructing the processor here would re-enter singleton initialization.
"""
logger.info("Received sig: %i", signum)
# disable throttling detection kernel mechanism
# if there is no X-Ray tracing tasks active
if no_xray_active_tasks():
logger.info("No X-Ray tasks running, switching schedstats off")
switch_schedstats(enabled=False)
logger.info("Request processor not initialized yet, exiting")
sys.exit(0)
def register_a_signal(signum: int, sighandler: Callable) -> None:
"""
Register given sighandler for given signum
"""
try:
signal.signal(signum, sighandler)
logger.info("Registered %s", signum)
except (OSError, ValueError) as e:
logger.info("Skipped %s because of %s", signum, e)
def register_sigterm():
"""
Register a dump handler for SIGTERM signal
"""
register_a_signal(signal.SIGTERM, sigterm_received)
def register_signals(signals: int | Iterable | None = None, handler: Callable = log_on_receive) -> None:
"""
Register given handler for given signal or range of signals
If no signals given, add given handler for all available signals
"""
if signals is None:
# register all available signals
for sig in signal.Signals:
register_a_signal(sig, handler)
else:
if isinstance(signals, int):
# register single signal
register_a_signal(signals, handler)
else:
# register range of signals
for sig in signals:
register_a_signal(sig, handler)