§ Rl¾jÁ<ã óø—ddlZddlZddlmZddlmZddlmZddlm Z ddl m Z m Z m Z mZGd„d e¦«Zd d d d d d dddœd d d dœd ddœd ddœdœ ZdZd„Zd"d„Zd„Zd„Zd„Zd„Zd„Zd"d„Zd„Zd „Zd!„ZdS)#éN)ÚOptional)Úetree)ÚFormattedException)Ú MySQLGovernoré)Úboolean_to_on_offÚstr_to_booleanÚtime_convertor_to_dictÚtime_unit_to_lettercó—eZdZdS)ÚDBGovernorExceptionN)Ú__name__Ú __module__Ú __qualname__©óúO/opt/cloudlinux/venv/lib64/python3.11/site-packages/clconfig/db_governor_lib.pyr r s€€€€€Ø€Drr ÚoffÚonÚéÚlimitÚ60s©ÚmodeÚunlimit©ÚkillÚlogPathÚtimeoutÚLONG©rÚformatÚERROR) ÚmodeOfOperationÚgatherDataForDetailedStatsÚsave_uidÚlogRestrictedUsersQueriesÚ scriptPathÚuserMaxConnectionsÚ restrictTypeÚ slowQueriesÚ restrictLogÚerrorLogz!/etc/container/mysql-governor.xmlcó$—t|d¬¦«S)Nzutf-8)Úencoding)Úopen)Ú file_names rÚ_openr3>s€Ý �  GÐ ,Ñ ,Ô ,Ð,rcó¼— dt|¦«zdzt|¦«z}| |¦«d}n#ttf$r|cYSwxYw|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 ú//ú/@r)ÚstrÚxpathÚAttributeErrorÚ IndexError)ÚxÚnodeÚattribÚdefaultÚpathÚdatas rÚget_data_from_xmlrABsk€ðØ•c˜$‘i”iÑ $Ñ&­¨V©¬Ñ4ˆØ�wŠw�t‰}Œ}˜QÔˆˆøÝ �JÐ 'ðððØˆˆˆðøøøà €Ks‚AAÁAÁAcóò—t|¦« ¦«}| d¦«rt|dd…¦«dz}n¥| d¦«rt|dd…¦«dzdz}nr| d¦«r!t|dd…¦«dzdzdz}n<| d¦«rt|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)r7ÚlowerÚendswithÚint)ÚvalueÚresults rÚconvert_time_value_to_secondsrOSsí€õ �‰JŒJ× Ò Ñ Ô €EØ ‡~‚~�cÑÔð Ý�U˜3˜B˜3”Z‘” 2Ñ%ˆˆØ �Š˜Ñ Ô ðÝ�U˜3˜B˜3”Z‘” 2Ñ%¨Ñ*ˆˆØ �Š˜Ñ Ô ðÝ�U˜3˜B˜3”Z‘” 2Ñ%¨Ñ*¨RÑ/ˆˆØ �Š˜Ñ Ô ðÝ�U˜3˜B˜3”Z‘”ˆˆå�U‘”ˆà €Mrcó´— | d¦«d}t|¦«}t|¦«S#ttt f$r|cYSwxYw)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']/@currentr)r8rOrLr9r:Ú ValueError)r;r>r@s rÚget_slow_queries_timeoutrRhsb€ðØ�wŠwÐ=Ñ>Ô>¸qÔAˆÝ,¨TÑ2Ô2ˆÝ�4‰yŒyÐøÝ �J­ Ð 3ðððØˆˆˆðøøøs‚8;»AÁAcó—d}| |¦«}t|¦«dkr¬| d¦«}t|¦«dkr)tjd¦«}| |¦«| d¦«d}tjd¦«}| |¦«| 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ÚnameÚslowÚcurrentN)r8ÚlenrÚElementÚappendÚsetr7)r<Ú slow_timeoutr?Útag_listÚ node_listÚnew_nodeÚ default_nodeÚ tag_to_sets rÚset_slow_queries_timeoutrawsé€ð )€DØ�zŠz˜$ÑÔ€HÝ ˆ8�}„}˜ÒÐà—J’J˜yÑ)Ô)ˆ Ý ˆy‰>Œ>˜QÒ Ð Ý”} YÑ/Ô/ˆHØ �KŠK˜Ñ !Ô !Ð !à—z’z )Ñ,Ô,¨QÔ/ˆ å”] 7Ñ+Ô+ˆ Ø×Ò˜JÑ'Ô'Ð'à�Š�v˜vÑ&Ô&Ð&Ð&à˜a”[ˆ à‡N‚N�9�c ,Ñ/Ô/Ñ0Ô0Ð0Ð0Ð0rcó2—dt|¦«z}| |¦«}t|¦«dkr>tj|¦«}| |¦«| |¦«}|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 r5rN)r7r8rWrrXrYrZ)r;Ú node_nameÚattribute_namerMr?r\r^Útags rÚset_data_to_xmlrf“s‡€ð •#�i‘.”.Ñ €DØ�wŠw�t‰}Œ}€HÝ ˆ8�}„}˜ÒÐå”= Ñ+Ô+ˆØ �Š�ÑÔÐØ—7’7˜4‘=”=ˆØ �1Œ+€Cà‡G‚GˆN˜EÑ"Ô"Ð"Ð"Ð"rcó¢—t|||¦«} t|¦«S#t$r"}tt›d|›d|›�¦«|‚d}~wwxYw)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/r6N)rAr Ú Exceptionr Ú DbGovConfig)r;Útag_nameÚ attr_namerMÚes rÚ_get_timedict_from_xmlrm¨su€õ ˜a ¨9Ñ 5Ô 5€EðÝ% eÑ,Ô,Ð,øÝ ðððÝ!ÝÐ RÐ R¸8Ð RÐ RÀyÐ RÐ Rñ ô àð øøøøðøøøs“"¢ A¬A Á Acó—tj t¦«sdS|€;t t¦«}t j|¦« ¦«}n|}t|ddtd¦«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?Úexistsrir3rÚparseÚgetrootrAÚ DEFAULTS_DICT)Úparsed_xml_treeÚfr;s rÚget_gov_mode_operationrx¹sl€õ Œ7�>Š>�+Ñ &Ô &ð؈tØÐÝ •+Ñ Ô ˆÝ ŒK˜‰NŒN× "Ò "Ñ $Ô $ˆˆà ˆÝ ˜Q  u­mÐuô>uñ/vô/vå1BÀ1ÀnÐV[ÝCPÐQ^ÔC_Ð`iÔCjñ2lô2lå1IÈ!Í]Ð[hÔMiÐjsÔMtÑ1uÔ1uð &(ð&(ˆ �MÑ"õ)¨¨J¸½}È]Ô?[Ð\eÔ?fÑgÔgÝ'¨¨:°xÅÈ}ÔA]Ð^fÔAgÑhÔhð& ð& ˆ �MÑ"õ/@ÀÀ5È&ÕR_Ð`jÔRkÐluÔRvÑ.wÔ.wÝ,=¸aÀÈÕP]Ð^hÔPiÐjrÔPsÑ,tÔ,tð#%ð#%ˆ �JÑð ×ÒÕ/Ñ1Ô1Ñ2Ô2Ð2Ø" KÐ0Ð0øÝ •W�eÔ2µEÔ4MÝ Ô Õ"5ð 7ðQðQðQå!¥[Ð"HÐ"HÀQÐ"HÐ"HÑIÔIÈqÐPøøøøðQøøøs‚%K;¨KK;Ë;8MÌ3M Í McóT— tj t¦«sdSt t¦«}t j|¦« ¦«}| ¦«dddtfdddtfdd d tfd dd tfd ddtfdddtfdddtfdddtfddd tfdddtfdddtfdddtfg }|D]G} |\}}}}td|›�¦«} t||||| ¦«¦«Œ8#t$rYŒDwxYwgd¢} | D]a}|\} } }} td| ›�¦«} ttd| ›�¦«¦«}t|||| ›|›�¦«ŒR#t$rYŒ^wxYw |dd}t||¦«n#t$rYnwxYwt j|¦«}t#td ¦«5}| d!|z¦«ddd¦«n #1swxYwYnd#t&t(t jt jt jf$r/}t1d"t|¦«zd#tid$œ¦«|‚d}~wwxYwt3jd%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']rorpz['scriptPath']r|r}z['gatherDataForDetailedStats']rzrz['userMaxConnections']r~z['logRestrictedUsersQueries']r{z['restrictLog']['logPath']r‡z['restrictLog']['format']r#z['errorLog']['logPath']rˆz['errorLog']['level']z['slowQueries']['logPath']r…z['slowQueries']['kill']r†z['restrictType']['mode']r„Úparameters_dict))z%['restrictType']['unlimit']['period']z)['restrictType']['unlimit']['unitOfTime']r„r)z-['restrictedTimePeriods']['level1']['period']z1['restrictedTimePeriods']['level1']['unitOfTime']r|r)z-['restrictedTimePeriods']['level2']['period']z1['restrictedTimePeriods']['level2']['unitOfTime']r|r€)z-['restrictedTimePeriods']['level3']['period']z1['restrictedTimePeriods']['level3']['unitOfTime']r|r�)z-['restrictedTimePeriods']['level4']['period']z1['restrictedTimePeriods']['level4']['unitOfTime']r|r‚)z.['restrictedTimePeriods']['timeout']['period']z2['restrictedTimePeriods']['timeout']['unitOfTime']r|r r,r Úwbs %s z%(dbgov_cfg)s error: Ú dbgov_cfg)ÚmessageÚcontextz//sbin/service db_governor restart &>/dev/null &Tz /bin/bashF)ÚshellÚ executableÚcheck)rqr?rrrir3rrsrtÚcloser7rÚevalrfÚKeyErrorr raÚtostringr1Úwriter�rŽr�r�r‘r Ú subprocessr†)r•rwr;Úcontrol_data_listÚcontrol_data_itemÚinput_dict_keysÚ xml_tag_nameÚxml_attribute_nameÚfunc_converterÚvalÚcontrol_data_pairs_listÚperiod_indexesÚperiod_unit_of_time_indexesÚ period_valÚperiod_unit_of_timeÚslow_queries_timeoutÚs_xmlrls rÚset_db_gov_configr±s¤€ð.LRåŒw�~Š~�kÑ*Ô*ð Ø ˆFå •+Ñ Ô ˆÝ ŒK˜‰NŒN× "Ò "Ñ $Ô $ˆØ �Љ Œ ˆ ð # E¨5µ#Ð 6Ø ˜z¨8µSÐ 9Ø -¨{¸FÕDUÐ VØ % zÐ3IÍ3Ð OØ ,¨l¸EÕCTÐ UØ )¨:°u½cÐ BØ (¨*°hÅÐ DØ &¨¨vµsÐ ;Ø $ e¨VµSÐ 9Ø )¨>¸5Å#Ð FØ &¨¸Õ?PÐ QØ '¨¸%ÅÐ Eð  Ðð"3ð ð Ð ð ØTeÑQ� Ð/AÀ>åÐ>¨_Ð>Ð>Ñ?Ô?�Ý  <Ð1CÀ^À^ÐTWÑEXÔEXÑYÔYÐYÐYøÝð ð ð Ø�ð øøøð # ð # ð # Ðð"9ð ð Ð Ø\mÑ YˆNÐ7¸ÐGYð õ"Ð"D°NÐ"DÐ"DÑEÔE� Ý&9½$Ð?nÐQlÐ?nÐ?nÑ:oÔ:oÑ&pÔ&pÐ#Ý  <Ð1CÈ ÐEiÐTgÐEiÐEiÑjÔjÐjÐjøÝð ð ð Ø�ð øøøð  Ø#2°=Ô#AÀ)Ô#LÐ Ý $ QÐ(<Ñ =Ô =Ð =Ð =øÝð ð ð Ø ˆDð øøøõ”˜qÑ!Ô!ˆÝ •+˜tÑ $Ô $ð =¨Ø �GŠGÐ3°eÑ;Ñ <Ô <Ð <ð =ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =øøå •W�eÔ2µEÔ4MÍuÔOcÐ dðRðRðRÝ!Ð.EÍÈAÉÌÑ.NØ/:½KÐ.Hð#Jð#JñKôKØPQð RøøøøðRøøøõ„NÐDب+¸UðDñDôDðDðDðDs®‚$H,¨C H,Ã54D*Ä)H,Ä* D7Ä4H,Ä6D7Ä7H,Å AFÆH,Æ FÆH,ÆFÆH,Æ#GÇH,Ç GÇ H,ÇGÇ,H,Ç;H È H,È H$È$H,È'H$È(H,È,2J É*JÊJ có–—t¦«}| ¦«\}}| ¦«|t|¦«dœS)zà Get db_governor status and version info :return: dict( 'dbGovVersion': , 'dbGovStatus': enabled|error|disabled, 'dbGovError': error details ) )Ú dbGovVersionÚ dbGovStatusÚ dbGovError)rÚget_governor_statusÚget_governor_versionr7)Údb_govÚstatusÚerrors rrŒrŒlsL€õ‰_Œ_€FØ×.Ò.Ñ0Ô0�M€FˆEà×3Ò3Ñ5Ô5ØÝ˜%‘j”jð ð ðr)N)rqr¢ÚtypingrÚlxmlrÚclcommon.clexceptionrÚclcommon.lib.mysql_governor_librÚclconfig_utilsrr r r r rurir3rArOrRrarfrmrxr“r±rŒrrrúrÀsðð € € € ØÐÐÐØÐÐÐÐÐàÐÐÐÐÐà3Ð3Ð3Ð3Ð3Ð3Ø9Ð9Ð9Ð9Ð9Ð9ððððððððððððð ð ð ð ð Ð,ñ ô ð ð Ø"&ØØ!&ØØàØððð ØØððð Øððð Øððð)ð€ ð42€ ð-ð-ð-ððððð"ððð* ð ð ð1ð1ð1ð8#ð#ð#ð*ððð"PðPðPðPð"3Qð3Qð3QðliDðiDðiDðXððððr