;5!ddlZddlmZmZmZddlmZddlmZm Z m Z ddl m Z ej dZGddeZd Zd Zd ZGd d eZdS)N)DictListOptional) mysql_lib)cpusers db_accessdblogin_cplogin_pairs) run_commandustateceZdZdS)MySQLOperationalErrorN)__name__ __module__ __qualname__lvestats/lib/ustate.pyr r sDrr c  |d}|d}|}ddd fd|D}i}d}t|D]\\}}|s |dt|dz }t|t|ko|d} | s<|dt|d z }|dd t|t|kr@t d |d d |td|dz |dziinWtt||} | ret| d} | d=n#t$rYnwxYw| ||<i||d<||dd| dd| dd| dd| dd | ||dt| d<#ttf$r3} t dt| Yd} ~ Vd} ~ wwxYw|S)a5 parse /usr/sbin/lveps -c 1 -p -d -n -x 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 = _parse_lveps_output() >>> 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]  rCPUCMD)SPEEDCOMc<g|]}||Sr)get).0col_name replace_cols r z'_parse_lveps_output..<s'UUUHKOOHh77UUUrNzlveps output was incorrect: %sdata lveps_lines)extraIDTIDPIDEPPNOTNOzCan't parse lveps output: %s)splitpop enumeratelenisdigitinsertlogerrormaxdictzipintKeyError ValueErrorstr) lveps_outputr$ header_line columns_name lveps_datauser_idlveps_line_index lveps_linelveps_line_splitedhas_idlveps_dict_lineers @r_parse_lveps_outputrHs%@$$T**K//!$$K$$&&L!%00KUUUU UUULJG(1+(>(>$B$B$*  '--dC 4E4E4IJJ())S->->>cDVWXDYDaDaDcDc -!+!1!1$L8I8IA8M!N!N   % %a , , , ! " "c,&7&7 7 7 II0 {3qBRUVBV;W;WXhkmXm;m/nop     Es<1CDDEE  B/--d3344G #E**    "1Jw )+Jw  & w  # #E4 0 0 0 0   d + + +   t , , ,   t , , ,   d + + + BN] 7#E*3/B/B5/I/I+J+JKK) B B B 8#a&&AAAAAAAA B s*/F33 G?G 1I==K(J<<Kc<t}t|SN)_get_lveps_outputrHr=s r get_lvepsrMhs$&&L | , ,,rcTtgdd}|ddS)N) z/usr/sbin/lvepsz-c1z-pz-dz-nz-oz-xz;id:10,ep:10,pno:10,pid:15,tno:5,tid:15,cpu:7,mem:15,com:256F)convert_to_strzutf-8replace)r decoderLs rrKrKmsB    L   w 2 22rcFeZdZdZdZdZdZdZdZdZ dZ d d Z d S) SQLSnapshotcHd|_i|_t|_dSrJ) _mysql_conn_dblogin_cplogin_mapset _db_usersselfs r__init__zSQLSnapshot.__init__s!$&!rc.||SrJ)connectrZs r __enter__zSQLSnapshot.__enter__s  rc.|dSrJ)close)r[exc_typeexc_valexc_tbs r__exit__zSQLSnapshot.__exit__s rc<t}|d}|d}|dd}tj|||dd} ||_dS#tj$r"}tt||d}~wwxYw) zB Obtain access data and connect to mysql database loginpasshost localhostTutf8mb4)riuserpasswd use_unicodecharsetN) rrrMySQLConnectorr^rV MySQLErrorr r<)r[access mysql_login mysql_pass mysql_host connectorrGs rr^zSQLSnapshot.connectsWo F^ ZZ 44 ,     7(0022D   # 7 7 7'A//Q 6 7sA**B9BBcFtt|_dS)z; Refresh : map N)r7r rWrZs r _refresh_mapzSQLSnapshot._refresh_maps!%))>)@)@$A$A!!!rc8|jdS)z( Close Mysql connection N)rVrarZs rrazSQLSnapshot.closes      rc(t} |j}|d|}n?#t t jf$r&}t d|Yd}~nd}~wwxYw|S)NzSHOW FULL PROCESSLISTzCError occurred during executing the `SHOW FULL PROCESSLIST` command)exc_info) tuplerVcursorexecutefetchallUnicodeDecodeErrorrrqr4warning)r[resultr}rGs r_raw_processlistzSQLSnapshot._raw_processlists k%,,..F NN2 3 3 3__&&FF"I$89 k k k KK]hiK j j j j j j j j k sAAB)B  Bci}|D]`}|d}|d}|d}|dpd}|dkr+|||g}||g}|||||<a|S)zN Group processlist by database user name :rtype: dict r r%r"Sleep)rrappend) r[process_snapshot sql_tuple db_usernamesql_cmdsql_time sql_query snapshot_linegrouped_by_users r_get_sql_process_listz!SQLSnapshot._get_sql_process_lists ..00 < New database user(s) %s detected; database users map refreshedr )rrXkeysrYrxr4debugr<listaddritemsrWrextend) r[ cplogin_lstr new_db_users new_db_user sql_snapshot cplogin_lst_rsql_snap cp_username sql_snap_s rrzSQLSnapshot.getsU 5577+002233dnD  0       IIPD&&''"-    , 0 0 "";//// "5gii52 %)*:*@*@*B*B%C%C 6 6 !K377 DDK&;,+F+F(,,["==   ***,5 [)rrJ) rrrr\r_rer^rxrarrrrrrrTrTs 777(BBB !!!    (rrT)loggingtypingrrrclcommonrclcommon.cpapirrr clcommon.utilsr getLoggerr4 Exceptionr rHrMrKobjectrTrrrrs''''''''''DDDDDDDDDD&&&&&&g!!     I   OOOd--- 333(jjjjj&jjjjjr