File: //opt/cloudlinux/venv/lib/python3.11/site-packages/ssa/__pycache__/manager.cpython-311.pyc
�
�T9i�N � �� � d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl m
Z
ddlmZ ddl
mZ ddlmZmZ dd lmZ dd
lmZ ddlmZ ddlmZ dd
lmZ G d� d� � Zdd�ZdS )zA
This module contains classes implementing SSA Manager behaviour
� N)�contextmanager)�iglob)�
disable_quota)�Tuple� )�load_validated_parser�load_configuration)� flag_file)�SSAManagerError)�ssa_version)�
AutoTracer)�
DecisionMakerc � � e Zd ZdZd� Zedefd�� � Zede fd�� � Z
edefd�� � Zedefd�� � Z
dedefd �Z d+dedej fd�Zd
edefd�Zdefd�Zdefd�Zdefd�Zdefd�Zdefd�Zdedefd�Zdededefd�Zdedefd�Zdeeeef ef fd�Ze d� � � Z!dedededdfd �Z"d,d!�Z#deeeef ef fd"�Z$d,d#�Z%d,d$�Z&d,d%�Z'defd&�Z(d,d'�Z)d,d(�Z*defd)�Z+d,d*�Z,dS )-�Managerz
SSA Manager class.
c � � t j d� � | _ d| _ ddg| _ ddg| _ d| _ d| _ d | _ t d
d� �� � f| _
t t t j f| _ d S )
N�managerzclos_ssa.iniz!usr/lib64/php/modules/clos_ssa.soz0usr/lib/x86_64-linux-gnu/php/modules/clos_ssa.sozlib64/php/modules/clos_ssa.soz,lib/x86_64-linux-gnu/php/modules/clos_ssa.soz lib/php/extensions/*/clos_ssa.so)�php44�php51�php52�php53zphp\d+-imunifyzphp-internal)z /opt/alt/php[0-9][0-9]/link/confz+/opt/cpanel/ea-php[0-9][0-9]/root/etc/php.dz$/opt/plesk/php/[0-9].[0-9]/etc/php.dz'/usr/local/php[0-9][0-9]/lib/php.conf.dzM/usr/share/cagefs/.cpanel.multiphp/opt/cpanel/ea-php[0-9][0-9]/root/etc/php.dzA/usr/share/cagefs-skeleton/usr/local/php[0-9][0-9]/lib/php.conf.dz./var/cagefs/*/*/etc/cl.php.d/alt-php[0-9][0-9]c �\ � t j | � d� � d � � S )N�/� )�pwd�getpwnam�split)�paths �B/opt/cloudlinux/venv/lib64/python3.11/site-packages/ssa/manager.py�<lambda>z"Manager.__init__.<locals>.<lambda>@ s � �3�<��
�
�3����0B�#C�#C� � )r �user)�logging� getLogger�logger�
ini_file_name�module_patterns_with_usr�module_patterns_no_usr�module_glob_pattern_directadmin�substrings_to_exclude_dir_paths�wildcard_ini_locations�dict�wildcard_ini_user_locations�OSError�
ValueError�
subprocess�SubprocessError�subprocess_errors��selfs r �__init__zManager.__init__$ s� � ��'� �2�2���+���
0�>�)
��%�
,�:�'
��#� 0R��,�0
��,�'
��#�
�F�C�C�
E�
E�
E�,
��(�
�Z��!;�"
����r �returnc � � ddi}|� d� |� � � D � � � � t j |� � S )z@
Form a success json response with given kwargs
�result�successc � � i | ]\ }}||�� S � r: )�.0�k�vs r �
<dictcomp>z$Manager.response.<locals>.<dictcomp>L s � �=�=�=�d�a��Q��=�=�=r )�update�items�json�dumps)�args�kwargs�raw_responses r �responsezManager.responseF sI � �
!�)�,�����=�=�f�l�l�n�n�=�=�=�>�>�>��z�,�'�'�'r c �J � t j � t � � S )z
Is SSA enabled
)�osr �isfiler
r2 s r �_enabledzManager._enabledO s � �
�w�~�~�i�(�(�(r c �
� ddhS )zK
Configuration settings required Request Processor restart
�requests_duration�ignore_listr: r2 s r �_restart_required_settingsz"Manager._restart_required_settingsV s � �
$�]�3�3r c �
� h d�S )N> �time�correlation�domains_number�request_number�correlation_coefficientr: r2 s r �solo_filtered_settingszManager.solo_filtered_settings] s � �*� *� *� *r �settingsc �6 � | j � |� � S )z�
SSA Agent requires restart in case of changing these configuration:
- requests_duration
- ignore_list
)rN �intersection)r3 rV s r �_restart_requiredzManager._restart_requiredb s � � �.�;�;�H�E�E�Er F�commandc � � t j dd|gdd|�� � }| j � d|� d�� � �n# t j $ r�}| j � dt
|j � � t
|j � � t
|j � � |j |j |j |j
d�� � � t d
|j � d|j � d|j p|j
� �� � �d
}~w| j $ rS}| j � dt
|� � dt
|� � i� � � t d|� d|� �� � �d
}~ww xY w|S )z�
Run /sbin/service utility to make given operation with SSA Agent service
:command: command to invoke
:check_retcode: whether to run with check or not
:return: subprocess info about completed process
z
/sbin/servicez ssa-agentT)�capture_output�text�checkz
ssa-agent z
succeededz$SSA Agent %s failed with code %s: %s)�cmd�retcode�stdout�stderr��extraz
SSA Agent z failed with code z: Nz&Failed to run %s command for SSA Agent�errzFailed to run z for SSA Agent: )
r/ �runr$ �info�CalledProcessError�error�strr_ �
returncodera rb r r1 )r3 rZ �
check_retcoder7 �es r �run_service_utilityzManager.run_service_utilityj s� � � ?��^�_�%0�%,�%.� 48�d�*7� 9� 9� 9�F�
�K���=�'�=�=�=�>�>�>�>���,� ^� ^� ^��K���6��A�E�
�
��A�L�!�!��A�H�
�
��e���!"��Q�X�?� ?�
�
@�
@�
@� "�\�Q�U�\�\�a�l�\�\�a�h�FZ�RS�RZ�\�\�^� ^�
^������%� ?� ?� ?��K���F��G���%*�C��F�F�O�
�
5�
5�
5�!�=��=�=�!�=�=�?� ?�
?����� ?����
�
s# �9= �E�BC(�(
E�5AE�ErC c � � t � � }|� |� � |� � � nO# t $ rB}| j � ddt
|� � i�� � t d|� �� � �d}~ww xY w| � |� � r| � dd�� � | �
� � S ) z�
Change SSA config and restart it.
:args: dict to override current option values
:return: JSON encoded result of the action
z Failed to update SSA config filere rc z"Failed to update SSA config file: N�restartT�rl )r �override�write_ssa_confr- r$ ri rj r rY rn rF )r3 rC �configrm s r �
set_configzManager.set_config� s� � � '�(�(��������� L��!�!�#�#�#�#��� L� L� L��K���@�%*�C��F�F�O�
�
5�
5�
5�!�"J�q�"J�"J�K�K�K����� L����
�!�!�$�'�'� D��$�$�Y�d�$�C�C�C��}�}���s �: �
B�=B�Bc �J � t � � }| � |�� � S )zV
Get current SSA config.
:return: JSON encoded current config
)rt )r rF )r3 �full_configs r �
get_configzManager.get_config� s# � �
)�*�*���}�}�K�}�0�0�0r c �D � | j rdnd}| � |�� � S )zY
Get current status of SSA.
:return: JSON encoded current status
�enabled�disabled)�
ssa_status)rJ rF )r3 �statuss r �get_ssa_statuszManager.get_ssa_status� s( � �
#�m�;������}�}��}�/�/�/r c � � | j s<| � � � | � � � | � � � | � � � S )a�
Enable SSA:
- add clos_ssa extension for each PHP version on server
- add clos_ssa extension into cagefs for each user and each ver
- start SSA Agent (if it is not already started)
- restart Apache (etc.) and FPM, reset CRIU images
- create flag_file indicating that SSA is enabled successfully
:return: JSON encoded current status
)rJ �
generate_inis�start_ssa_agent�create_flagr~ r2 s r �
enable_ssazManager.enable_ssa� sV � � �}� ���� � � �� � �"�"�"��������"�"�$�$�$r c � � | j r<| � � � | � � � | � � � | � � � S )a{
Disable SSA:
- remove clos_ssa extension for each PHP version on server
- remove clos_ssa extension from cagefs for each user and each ver
- stop SSA Agent
- restart Apache (etc.) and FPM, reset CRIU images
- remove flag_file indicating that SSA is enabled
:return: JSON encoded current status
)rJ �remove_clos_inis�stop_ssa_agent�remove_flagr~ r2 s r �disable_ssazManager.disable_ssa� sV � � �=� ��!�!�#�#�#����!�!�!��������"�"�$�$�$r c � � d� t � � � � � D � � }| � |t � � | j rdnd| � � � t
� � � � � �� � S )z�
Get SSA statistics.
Includes:
- config values
- version
- SSA status (enabled|disabled)
- SSA Agent status (active|inactive)
:return: JSON encoded current statistics
c �X � i | ]'\ }}|t |� � � � � ��(S r: )rj �lower)r; �key�values r r>