Xׯd;jddlmZddlmZddlmZmZmZmZdZ GddeZ GddeZ Gd d eZ Gd d eZ Gd deeZGddeZGddeeZGddeZGddeZGddeZGddeZGddeZGddeZGdd eZGd!d"eZGd#d$eZGd%d&eZd'S)() log_error) QueryError) ChangeTracker ChangeCounterChangeNotifierListChangeNotifierDictizceZdZdZddZdS) PSInstrumentzx Will hold the configuration of a single Performance Schema instrument keeping track of the changes to them FcJtj|||_||_dSN)r__init__enabledtimed)selfrrs 4..\modules\wb_admin_perfschema_instrumentation_be.pyr zPSInstrument.__init__"s%t$$$  N)FF__name__ __module__ __qualname____doc__r rrr r s2rr cDeZdZdZdZdZdZdZdZdZ dZ d Z d S) PSInstrumentGroupczd|_tj|||_d|_d|_ddd|_dS)Nrrr)-_PSInstrumentGroup__value_set_notification_cbrr parentrrchanges)rrargss rr zPSInstrumentGroup.__init__(sC+/(#D)))   "#Q// rcjtj|||||rdnd}|j|xx|z cc<dS)N)r count_changer)rchangeattrvalue increments rr$zPSInstrumentGroup.count_change3sK'fdEBBB'AAR  Ti'rct|D]I}|dkr|||_n|dkr |||_d|vr||||JdS)zs Set the attribute's state to a specific value on a complete branch of the hierarchy tree rr_data_N)listkeysrrset_children_state)rr&r'keys rr-z$PSInstrumentGroup.set_children_state;s  $$ : :Cy  $)S !!"'S t##S ,,T5999 : :rcX|j}|r |||j}|dSdS)zs Updates the parent's states based on the children status on a line of the hierarchy tree. N)rset_state_from_children)rr&rs rupdate_parents_statez&PSInstrumentGroup.update_parents_stateKsL  #  * *4 0 0 0]F # # # # #rc|dkr||_n |dkr||_|||||dS)z Updates the status of an attribute in an element of the hierarchy tree, including all the branch below it and its parents rrN)rrr-r1)rr&r's r set_statezPSInstrumentGroup.set_stateVsZ 9   DLL W__DJ e,,, !!$'''''rc:d}t|D]8}|dkr||j}n|dkr ||j}|dkrd}n||z }9d}|dkrd}n|t |krd}|dkr ||_dS|dkr ||_dSdS)zw Sets the status of an element of the hierarchy based on the status of its immediate childrens rrrr#r"N)r+r,rrlen)rr&counterchild new_valuer's rr0z)PSInstrumentGroup.set_state_from_childrenes $))++&& % %Ey   K/  K- 1}}9$ a<<EE D ! !E 9   DLLL W__DJJJ_rcd|vr>t|D]}|||d|ddS)z Deep first method to set the initial states of the hierarchy groups based on the status of the leaf elements r*rrN)r+r,set_initial_statesr0rr.s rr:z$PSInstrumentGroup.set_initial_statessu 4  DIIKK(( / /S ,,.... $$Y/// $$W-----rcptj||||jr|||dSdSr )r __setattr__r)rnamer's rr=zPSInstrumentGroup.__setattr__sJ&tT5999  + :  , ,T5 9 9 9 9 9 : :rc||_dSr )r)rcallbacks rset_value_set_notificationz,PSInstrumentGroup.set_value_set_notifications+3(((rN) rrrr r$r-r1r3r0r:r=rArrrrr's 0 0 0(((::: # # # ( ( (B . . .:::44444rrcBeZdZdZdZdZdZdZdZdZ dZ d Z d S) PSInstrumentszo Database manager for PS Instruments its functions are loading/committing changes to the database. ctj|||_td|_||jdSr )rr ctrl_ber instrumentscount_changes_onrrEs rr zPSInstruments.__init__sGt$$$ ,T22 d./////rcR |jd}||r|dd}|j}|D] }||vrt |||<||}!|ddkrdnd}|ddkrdnd}t|||d <||jdS#t$r}|j tkrYd}~dSd}~wwxYw) Nz2SELECT * FROM performance_schema.setup_instrumentsNAME/ENABLEDYESr"rTIMEDr*) rE exec_querynextRow stringByNamesplitrFrr r:rerrorMYSQL_ERR_TABLE_DOESNT_EXIST)rresulttokenscur_dicttokenrrerrs rloadzPSInstruments.loads_ \,,-abbF!nn&&F$0088>>sCCF#/H!'33 00.?.I.IHUO#+E?$*#6#6y#A#AU#J#JaaPQG!'!4!4W!=!=!F!FAAAE)5gu)E)EHX&nn&&F"   / / 1 1 1 1 1   y888  sC>>> ? 9 d # [ NNrvyv~v~@GHQ@RSW@XwYwYZ [ [ [ 9 e $ [ NNquxu}u}FGPQRWXvYvYZ [ [ [ 7 D ! W NNptwt|t|~EFM~NOS~TuUuUV W W W 7 E " W NNosvs{s{}DEL}MNS}TtUtUV W W Wrci}|jjr:|g|j|d|g|j|d|S)Nrr)rF change_count_get_changes_recursive)rrs rr_zPSInstruments.get_changessU   ( P  ' 'D,rrYs rrZzPSConsumers.load9s \,,-_``F!nn&&5"..v66D$11)<<EG!+G!4!4DJ nn&&555"!55   y888  sBB B2B-,B--B2cg}g}g}t|D]Z}||r>||jr|d|zB|d|z[|r+|dd|z|r+|dd|z|S)Nz"%s"zPUPDATE performance_schema.setup_consumers SET enabled = 'YES' WHERE NAME IN (%s),zOUPDATE performance_schema.setup_consumers SET enabled = 'NO' WHERE NAME IN (%s))r+r, has_changedrrarb)rrdrdisabledconsumers rrjz!PSConsumers.get_commit_statementsLs TYY[[)) 7 7HH~))++ 7>)7NN6H#45555OOFX$5666  C NNmpspxpxzAqBqBB C C C  C NNlorowowyApBpBB C C Crci}t|D]9}||r||||<:|Sr )r+r,rr_)rrr.s rr_zPSConsumers.get_changes_s] $$ 7 7CCy$$&& 7#Cy4466 rct|D]}||dSr )r+r,rrr;s rrrzPSConsumers.revert_changesgsD $$ ' 'C I $ $ & & & & ' 'rct|D]}||dSr )r+r,ror;s rrozPSConsumers.reset_changesksD $$ & &C I # # % % % % & &rN) rrrr rrZrjr_rrrorrrrr$s}   ###&&'''&&&&&rrceZdZdZdZdS) PSVariablerc<tj|||_dSr )rr r')rr's rr zPSVariable.__init__st$$$ rNrrrrrrps-rrc eZdZdZdZdZdS) PSVariablesct|tj||d|_i|_dSrrrs rr zPSVariables.__init__yrrcht|||||dSrrrs rrzPSVariables.__setitem__rrcb |jd}|f|rT|d}|d}t |||<|PdSdSdS#t $r}|jtkrYd}~dSd}~wwxYw)Nz)SHOW variables LIKE 'performance_schema%'r")rErOrP stringByIndexrrrSrT)rrUr>r'rYs rrZzPSVariables.loads \,,-XYYF!nn&&3"//22D"0033E!+E!2!2DJ nn&&333"!33   y888  sBB B.B)(B))B.N)rrrr rrZrrrrrxsA   ###rrceZdZdZdZdS)PSActorcJtj|||_||_dSr )rr userhost)rrrs rr zPSActor.__init__s%t$$$  rcpt|tr |j|jko|j|jkSdSr ) isinstancerrrrothers r__eq__zPSActor.__eq__s> eW % % G:*FuzTY/F F G GrNrrrr rrrrrrs7 GGGGGrrc eZdZdZdZdZdS)PSActorsc<tj|||_dSr )rr rErHs rr zPSActors.__init__#D))) rc |jd}||ra|d}|d}|t |||a|dSdS#t$r}|jtkrYd}~dSd}~wwxYw)Nz6SELECT user, host FROM performance_schema.setup_actorsr"r) rErOrPrrarrorrSrT)rrUrrrYs rrZz PSActors.loads \,,-effF!nn&&5"//22D!//22DKKd 3 3444 nn&&5""$$$$$"!   y888  sB%B++ C5C  C  Cc|}g}|dD](}|d|jd|jd)|dD](}|d|jd|jd)|S) Naddsz5INSERT INTO performance_schema.setup_actors VALUES ('', 'z', '%')deletesz:DELETE FROM performance_schema.setup_actors WHERE user = 'z' AND host = '')r_rarr)rrrdactors rrjzPSActors.get_commit_statementss""$$V_  E NNNfkfpfpfprwr|r|r|} ~ ~ ~ ~Y' G GE NNNnsnxnxnxz{E{E{EF G G G GrNrrrr rZrjrrrrrsA ,     rrceZdZdZdZdS)PSObjectcttj|||_||_||_||_||_dSr )rr typeschemar>rr)rrrr>rrs rr zPSObject.__init__s:t$$$     rct|tr0|j|jko|j|jko|j|jkSdSr )rrrrr>rs rrzPSObject.__eq__sQ eX & & +:*+<4;.+:* + + +rNrrrrrrs2+++++rrc eZdZdZdZdZdS) PSObjectscJtj|||_||_dSr )rr rE config_enable)rrErs rr zPSObjects.__init__s(#D))) *rc ^ |jd}||r|d}|d}|d}d}|jr|ddk}|dz}nd}||dk}|t |||||||dSdS#t$r}|j tkrYd}~dSd}~wwxYw)Nz.SELECT * FROM performance_schema.setup_objectsr"rrMT) rErOrPrrrarrorrSrT) rrUrrr>indexrrrYs rrZzPSObjects.loads[ \,,-]^^F!nn&&N"//22D#11!44F!//22DE)'"("6"6q"9"9U"B % "&"00775@EKKvtWe L LMMM#nn&&N(""$$$$$+"!.   y888  sDD D,D'&D''D,ct|}g}|dD]}|}g}|D])}|\}}} | rdnd} ||d| d*dd|d|jd |jd |jd } || |d D]L}|jrdnd} |jrdnd} |d |jd |jd |jd | d | d M|dD]0}|d|jd |jd |jd1|S)NupdatesrMNOz = 'rz,UPDATE performance_schema.setup_objects SET z, z WHERE object_type = 'z' AND object_schema = 'z' AND object_name ='rz6INSERT INTO performance_schema.setup_objects VALUES ('rz')rzBDELETE FROM performance_schema.setup_objects WHERE object_type = ')r_rarbrrr>rr) rrrdobjectrf change_colsr%rhrir8queryrrs rrjzPSObjects.get_commit_statements s""$$i( " "F++--JK$ C C.4+i%.8EED ""###yyy#ABBBB C QUQZQZ[fQgQgQgQgioitititv|vCvCvCEKEPEPEPQE NN5 ! ! ! !fo m mF%~7ee4G#\3EEtE NNNsys~s~s~AGANANANPVP[P[P[]d]d]dfkfkfkl m m m mi(  F NNNV\VaVaVacicpcpcprxr}r}r}~    rNrrrrrrsB+++ BrrceZdZdZdZdS) PSTimerTypec>||_||_||_||_dSr )r> frequency resolutionoverhead)rr>rrrs rr zPSTimerType.__init__(s" "$  rcPt|tr|j|jkSdSr )rrr>rs rrzPSTimerType.__eq__.s- e[ ) ) +:* * + +rNrrrrrr's2!!! +++++rrceZdZdZdS)PSTimerc<tj|||_dSr )rr timer)rrs rr zPSTimer.__init__4rrNrrrr rrrrr3s#rrc eZdZdZdZdZdS)PSTimersc<tj|||_dSr rr rErrEr s rr zPSTimers.__init__:rrc |jd}|z|rP|d}|d}t |||<|P|dSdS#t $r}|jtkrYd}~dSd}~wwxYw)Nz