HEX
Server: Apache
System: Linux insrv.serversdaddy.com 5.14.0-362.24.2.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Sat Mar 30 14:11:54 EDT 2024 x86_64
User: jsaha (1066)
PHP: 8.3.6
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/alt/python37/lib/python3.7/site-packages/clconfig/__pycache__/db_governor_lib.cpython-37.pyc
B

���}�w��@sddlmZddlZddlZddlmZddlmZddlm	Z	m
Z
mZmZddl
mZddlmZGd	d
�d
e�Zddddd
dddd�dd
dd�d
dd�d
dd�d�
ZdZdd�Zd.dd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd/d&d'�Zd(d)�Zd*d+�Zd,d-�ZdS)0�)�absolute_importN)�etree)�Optional�)�str_to_boolean�time_convertor_to_dict�boolean_to_on_off�time_unit_to_letter)�FormattedException)�
MySQLGovernorc@seZdZdS)�DBGovernorExceptionN)�__name__�
__module__�__qualname__�rr�py/clconfig/db_governor_lib.pyrsrZoffZon���limitZ60s)�mode�unlimit)�kill�logPath�timeoutZLONG)r�formatZERROR)
�modeOfOperation�gatherDataForDetailedStatsZsave_uid�logRestrictedUsersQueries�
scriptPath�userMaxConnections�restrictType�slowQueries�restrictLog�errorLogz!/etc/container/mysql-governor.xmlcCst|�S)N)�open)�	file_namerrr�_open9sr&c	CsHy*dt|�dt|�}|�|�d}Wnttfk
rB|SX|S)a
    Gets data from specified node and attribute
    :param x: Parent node object
    :param node: Node name to extract data
    :param attrib: Attribute name to extract data
    :param default: Default value to return if specified node/attribute not found
    :return: Value
    z//z/@r)�str�xpath�AttributeError�
IndexError)�x�nodeZattrib�default�path�datarrr�get_data_from_xml=s	r0cCs�t|���}|�d�r,t|dd��d}np|�d�rPt|dd��dd}nL|�d�rxt|dd��ddd}n$|�d�r�t|dd��}nt|�}|S)	z~
    Convert value in minutes, hours, days to seconds
    :param value: value of slow limit
    :return: value in seconds
    �mN����<�h�d��s)r'�lower�endswith�int)�value�resultrrr�convert_time_value_to_secondsNs



r=c
Cs>y|�d�d}t|�}t|�Stttfk
r8|SXdS)z�
    Gets slow queries timeout
    :param x: Root node
    :param default: Default value to return if timeout not found
    :return: Timeout
    z$default/limit[@name='slow']/@currentrN)r(r=r:r)r*�
ValueError)r+r-r/rrr�get_slow_queries_timeoutcsr?cCs�d}|�|�}t|�dkrt|�d�}t|�dkrDt�d�}|�|�|�d�d}t�d�}|�|�|�dd�n|d}|�dt|��dS)	z{
    Sets slow queries timeout
    :param node: Root node
    :param slow_timeout: new timeout value
    :return: None
    zdefault/limit[@name='slow']rr-r�nameZslowZcurrentN)r(�lenr�Element�append�setr')r,Zslow_timeoutr.�tag_listZ	node_list�new_nodeZdefault_nodeZ
tag_to_setrrr�set_slow_queries_timeoutrs





rGcCsXdt|�}|�|�}t|�dkr@t�|�}|�|�|�|�}|d}|�||�dS)z�
    Sets value to specified node/attribute
    :param x: Parent node
    :param node_name: Node name
    :param attribute_name: Attribute name
    :param value: Value to set
    :return: None
    z//rN)r'r(rArrBrCrD)r+Z	node_nameZattribute_namer;r.rErF�tagrrr�set_data_to_xml�s	



rIcCs:t|||�}yt|�Sttd||f��YnXdS)z�
    Get time from specified tag/attribute as seconds
    :param x: XML object
    :param tag_name: XML tag name
    :param attr_name: XML object name
    :return: Number of seconds. Throws DBGovernorException if any error
    z% has invalid value in governer/%s/@%sN)r0rr�DbGovConfig)r+Ztag_nameZ	attr_namer;rrr�_get_timedict_from_xml�srKcCsFtj�t�sdS|dkr0tt�}t�|���}n|}t|ddt	d�S)z�
    Get MySQL Governor mode. We return None if governor config isn't exists
    All exceptions will be catched in top level functions
    :param parsed_xml_tree: parsed governor config
    N�lve�user)
�osr.�existsrJr&r�parse�getrootr0�
DEFAULTS_DICT)�parsed_xml_tree�fr+rrr�get_gov_mode_operation�srUc
Cs �y�tj�t�siStt�}t�|���}t�}t	|d�|d<t
t|ddtd��|d<t
t|ddtd��|d<t|d	d
td�|d<t
t|d	dtd
��|d
<t|d	d�t|d	d�t|d	d�t|d	d�t|d	d�d�|d<t|ddtdd�tt|ddtdd��d�|d<t
t|ddtdd��t|ddtdd�t|tdd�d�|d<t|d	dtd d�t|d	d!td d!�d"�|d <t|dd#td$d�t|ddtd$d!�d%�|d$<|�t��d&|iStttjtjtjtfk
�r}zttd't|���Wd(d(}~XYnXd(S))zL
    Get MySQL Governer config
    :return: Dictionary with config data
    )rSr�	statisticrr�
logqueriesrMr�restrict�scriptr�user_max_connectionsr�level1�level2�level3�level4r)r[r\r]r^rZrestrictedTimePeriods�
restrict_moder r)rr�slow_queries�runr!r�logr)rrrr"r)rr�filer#)r�levelZmySQLGovSettingsz read/parse error: N)rNr.rOrJr&rrPrQ�dictrUrr0rRr:rKrr?�update�get_db_gov_stat_info�OSError�IOError�XMLSyntaxError�XMLSchemaParseError�XMLSchemaErrorrr')rTr+Zresult_dict�errr�get_db_gov_config�sH



 
rncCs@�y�tj�t�sdStt�}t�|���}|��dddt	fdddt	fdd	d
t
fdddt	fd
ddt
fdddt	fdddt	fdddt	fddd
t	fdddt	fdddt
fdddt	fg}xP|D]H}y.|\}}}}td|�}	t|||||	��Wq�t
k
r�Yq�Xq�Wdddd d!d"g}
xh|
D]`}|\}}}}y6td|�}
ttd|��}t|||d#|
|f�Wnt
k
�rrYnX�qWy|d$d%}t||�Wnt
k
�r�YnXt�|�}ttd&��}|�d'|�WdQRXWnNtttjtjtjfk
�r*}ztd(t	|�d)tid*���Wdd}~XYnXtjd+d,d-d.�dS)/a%
    Set MySQL governer config
    :param parameters_dict: Parameters to set dictionary. For example:
        {
         u'modeOfOperation': u'abusers',
         u'scriptPath': u'',
         u'gatherDataForDetailedStats': True,
         u'userMaxConnections': 30,
         u'logRestrictedUsersQueries': False,
         u'restrictLog': {u'logPath': u'/var/log/dbgovernor-restrict.log', u'format': u'LONG'},
         u'restrictedTimePeriods': {u'level1': {u'unitOfTime': u'seconds', u'period': 60},
                                    u'level2': {u'unitOfTime': u'minutes', u'period': 15},
                                    u'level3': {u'unitOfTime': u'hours', u'period': 1},
                                    u'level4': {u'unitOfTime': u'days', u'period': 1},
                                    u'timeout': {u'unitOfTime': u'hours', u'period': 1}},
         u'errorLog': {u'logPath': u'/var/log/dbgovernor-error-my.log', u'level': u'DEBUG'},
         u'slowQueries': {u'logPath': u'/var/log/dbgovernor-kill.log', u'kill': True, u'timeout': 30},
         u'restrictType': {u'mode': u'limit', u'unlimit': {u'unitOfTime': u'seconds', u'period': 60}}
         }
        Any key in dictionary can absent, appropriate MySQL Governor parameter will not changed
    :return: None. Throws DBGovernorException if error
    Nz['modeOfOperation']rLrMz['scriptPath']rXrYz['gatherDataForDetailedStats']rVrz['userMaxConnections']rZz['logRestrictedUsersQueries']rWz['restrictLog']['logPath']rbz['restrictLog']['format']rz['errorLog']['logPath']rcz['errorLog']['level']z['slowQueries']['logPath']r`z['slowQueries']['kill']raz['restrictType']['mode']r_zparameters_dict%s)z%['restrictType']['unlimit']['period']z)['restrictType']['unlimit']['unitOfTime']r_r)z-['restrictedTimePeriods']['level1']['period']z1['restrictedTimePeriods']['level1']['unitOfTime']rXr[)z-['restrictedTimePeriods']['level2']['period']z1['restrictedTimePeriods']['level2']['unitOfTime']rXr\)z-['restrictedTimePeriods']['level3']['period']z1['restrictedTimePeriods']['level3']['unitOfTime']rXr])z-['restrictedTimePeriods']['level4']['period']z1['restrictedTimePeriods']['level4']['unitOfTime']rXr^)z.['restrictedTimePeriods']['timeout']['period']z2['restrictedTimePeriods']['timeout']['unitOfTime']rXrz%s%sr!r�wbs<?xml version="1.0" ?>
%s
z%(dbgov_cfg)s error: Z	dbgov_cfg)�message�contextz//sbin/service db_governor restart &>/dev/null &Tz	/bin/bash)�shell�
executable)rNr.rOrJr&rrPrQ�closer'r�evalrI�KeyErrorr	rGZtostringr$�writerhrirjrkrlr�
subprocessra)Zparameters_dictrTr+Zcontrol_data_listZcontrol_data_itemZinput_dict_keysZxml_tag_nameZxml_attribute_nameZfunc_converter�valZcontrol_data_pairs_listZperiod_indexesZperiod_unit_of_time_indexesZ
period_valZperiod_unit_of_timeZslow_queries_timeoutZs_xmlrmrrr�set_db_gov_config�sf














" rzcCs&t�}|��\}}|��|t|�d�S)z�
    Get db_governor status and version info
    :return: dict(
                'dbGovVersion': <version>,
                'dbGovStatus': enabled|error|disabled,
                'dbGovError': error details
            )
    )ZdbGovVersionZdbGovStatusZ
dbGovError)rZget_governor_statusZget_governor_versionr')Zdb_govZstatus�errorrrrrges
	rg)N)N)Z
__future__rrNrxZlxmlr�typingrZclconfig_utilsrrrr	Zclcommon.clexceptionr
Zclcommon.lib.mysql_governor_librrrRrJr&r0r=r?rGrIrKrUrnrzrgrrrr�<module>sF

6k