%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /opt/alt/python37/lib/python3.7/site-packages/lvestats/lib/__pycache__/
Upload File :
Create Path :
Current File : //opt/alt/python37/lib/python3.7/site-packages/lvestats/lib/__pycache__/ustate.cpython-37.pyc

B

��1b�"�
@sddlmZddlmZddlmZmZmZddlZe�	d�Z
yddlZddlmZ
WnHek
r�Zz*dZe
�dee��Gdd	�d	e�Z
WddZ[XYnXy0dd
lmZmZmZddlmZddlmZWnek
r�ed
kr�YnXdd�Zdd�Zdd�ZGdd�de�Z dS)�)�absolute_import)�zip)�List�Dict�OptionalNZustate)�OperationalErrorzCan't import MySQLdb; %sc@seZdZdS)�MySQLOperationalErrorN)�__name__�
__module__�__qualname__�rr�D/opt/alt/python37/lib/python3.7/site-packages/lvestats/lib/ustate.pyrsr)�	db_access�dblogin_cplogin_pairs�cpusers)�	NoPackage)�run_command�__main__cs�|�d�}|�d�}|��}ddd���fdd�|D�}i}d}�x�t|�D�]�\}}|s\qL|�dt|�d	�}t|�t|�ko�|d��}	|	s�|�dt|�d
�}|�dd�t|�t|�kr�tjd|d
d|td|d�|d�iid�Pt	t
||��}
|	�r\t|
�d��}y
|
d=Wntk
�r2YnX|
||<t	�||d<||�dd�qL|
�dd�|
�dd�|
�dd�|
�dd�y|
||dt|
�d��<WqLt
tfk
�r�}zt�dt|��Wdd}~XYqLXqLW|S)a)
    pars /usr/sbin/lveps -c 1 -p -d -n result
    example returned data:
    {504:
        {'CPU': '26%', 'IO': '0', 'MEM': '1', 'EP': '0', 'IOPS': 'N/A', 'PNO': '3', 'TNO': '3', 'TID':
            {4400:
                {'CPU': '26%', 'IO': 'N/A', 'MEM': '1', 'CMD': 'md5sum', 'IOPS': 'N/A'},
            4381:
                {'CPU': '0%', 'IO': 'N/A', 'MEM': '1', 'CMD': 'su', 'IOPS': 'N/A'},
            4382:
                {'CPU': '0%', 'IO': 'N/A', 'MEM': '1', 'CMD': 'bash', 'IOPS': 'N/A'}}},
    500:
        {'CPU': '13%', 'IO': '0', 'MEM': '1', 'EP': '0', 'IOPS': 'N/A', 'PNO': '3', 'TNO': '3', 'TID':
            {4266:
                {'CPU': '0%', 'IO': 'N/A', 'MEM': '1', 'CMD': 'su', 'IOPS': 'N/A'},
            4299:
                {'CPU': '13%', 'IO': 'N/A', 'MEM': '1', 'CMD': 'cat', 'IOPS': 'N/A'},
            4267:
                {'CPU': '0%', 'IO': 'N/A', 'MEM': '1', 'CMD': 'bash', 'IOPS': 'N/A'}}}}

    example of data manipulation:
    getting a list of user id
    >>> lveps_data = _pars_lveps()
    >>> user_id_list = lveps_data.keys()
    a list of processes tid particular user id 504
    >>> user_tid_list = lveps_data[504]['TID'].keys()
    getting CPU load user
    >>> user_cpu = lveps_data[504]['CPU']
    getting CPU load specific process
    >>> lveps_data[504]['TID'][4400]
    �
rZCPUZCMD)ZSPEEDZCOMcsg|]}��||��qSr)�get)�.0Zcol_name)�replace_colrr
�
<listcomp>Fsz_pars_lveps.<locals>.<listcomp>N���zlveps output was incorrect: %s�data�lveps_lines��)�extraZIDZTIDZPIDZEPZPNOZTNOzCan't parse lveps output: %s)�split�pop�	enumerate�len�isdigit�insert�log�error�max�dictr�int�KeyError�
ValueError�str)�lveps_outputrZheader_lineZcolumns_nameZ
lveps_dataZuser_idZlveps_line_indexZ
lveps_lineZlveps_line_splitedZhas_idZlveps_dict_line�er)rr
�_pars_lveps sL 


&
&r1cCst�}t|�S)N)�_get_lveps_outputr1)r/rrr
�	get_lvepsosr3c	Cs(tddddddddgd	d
�}|�dd�S)
Nz/usr/sbin/lvepsz-c�1z-pz-dz-nz-oz;id:10,ep:10,pno:10,pid:15,tno:5,tid:15,cpu:7,mem:15,com:256F)Zconvert_to_strzutf-8�replace)r�decode)r/rrr
r2ts
r2c@sVeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
ddd�ZdS)�SQLSnapshotcCsd|_t�|_t�|_dS)N)�_mysql_connr*�_dblogin_cplogin_map�set�	_db_users)�selfrrr
�__init__szSQLSnapshot.__init__cCs|��|S)N)�connect)r<rrr
�	__enter__�szSQLSnapshot.__enter__cCs|��dS)N)�close)r<�exc_typeZexc_val�exc_tbrrr
�__exit__�szSQLSnapshot.__exit__c
Cs~tstd��t�}|d}|d}|�dd�}ytj|||ddd�|_Wn0tjk
rx}ztt|���Wd	d	}~XYnXd	S)
zB
        Obtain access data and connect to mysql database
        z/need install mysql server for binding _mysql.soZlogin�pass�hostZ	localhostTZutf8mb4)rE�userZpasswdZuse_unicode�charsetN)	�MySQLdbrrrr>r8rrr.)r<�accessZmysql_loginZ
mysql_passZ
mysql_hostr0rrr
r>�szSQLSnapshot.connectcCstt��|_dS)z;
        Refresh <database user>:<system user> map
        N)r*rr9)r<rrr
�_refresh_map�szSQLSnapshot._refresh_mapcCs|j��dS)z(
        Close Mysql connection
        N)r8r@)r<rrr
r@�szSQLSnapshot.closec
Cs^t�}y |j��}|�d�|��}Wn2tjk
rX}zt�t	|��Wdd}~XYnX|S)NzSHOW FULL PROCESSLIST)
�tupler8�cursor�executeZfetchallrHrr'Zwarningr.)r<�resultrLr0rrr
�_raw_processlist�s

 zSQLSnapshot._raw_processlistc	Cstt�}xh|��D]\}|d}|d}|d}|dp6d}|dkrBq|||g}|�|t��}|�|�|||<qW|S)zN
        Group processlist by database user name
        :rtype: dict
        r�r�rZSleep)r*rOr�list�append)	r<�process_snapshotZ	sql_tuple�db_usernameZsql_cmdZsql_timeZ	sql_queryZ
snapshot_lineZgrouped_by_userrrr
�_get_sql_process_list�s

z!SQLSnapshot._get_sql_process_listNcCs�|��}t|���|j}|r\|��t�dtt|��dd��x|D]}|j�	|�qHWt
�}|ppt�ppt�}xTt|���D]D\}}|j
�|�}	|	dk	r�|	|kr�|�|	t��}
|
�|�|
||	<q�W|S)z�
        :param cplogin_lst: a list of users to retrieve data;
            None if the data is returned for all users registered in the control panel
        :return: sql queries for each user
        z>New database user(s) %s detected; database users map refreshedr���N)rVr:�keysr;rJr'�debugr.rR�addr*r�itemsr9r�extend)r<Zcplogin_lstrTZnew_db_usersZnew_db_userZsql_snapshotZcplogin_lst_rUZsql_snapZcp_usernameZ	sql_snap_rrr
r�s"

zSQLSnapshot.get)N)r	r
rr=r?rCr>rJr@rOrVrrrrr
r7~s
r7)!Z
__future__r�builtinsr�typingrrrZloggingZ	getLoggerr'rHrr�ImportErrorr0rYr.�	ExceptionZclcommon.cpapirrrZclcommon.cpapi.cpapiexceptionsrZclcommon.utilsrr	r1r3r2�objectr7rrrr
�<module>s,
"O

Zerion Mini Shell 1.0