
    ^is                        S SK Jr  S SKJrJrJr  S SKJr  S SKJrJ	r	  S SK
r
S SKrS SKrS SKrS SKrS SKrS SKJrJr  S SKJrJrJrJrJr  S SKJrJrJrJrJrJrJrJ r J!r!  S S	KJ"r"  S S
KJ#r#  S9S jr$\$\RJ                  RL                  l'        S\RP                  S\)S\)4S jr*S\RP                  S\)S\+S\S\+4
S jr, S:S\RP                  S\)S\S\+S\+S\+S\+4S jjr-S r.0 S4S\RP                  S\)S\S\/S\+4
S jjr0SSSS/ 4S\RP                  S\)S\S\+S\+S\+S\+S\\)   4S  jjr1SSSS!/ 4S\RP                  S\)S\S\+S\+S\+S"\2S\\)   4S# jjr3S\)S$\\)   4S% jr4S& r5S' r6S( r7S\RP                  4S) jr8S\)S*\\)\)4   4S+ jr9SSSSS/ / 4S,\\)   S-\\)   4S. jjr:S\RP                  S\)S\S\/S\+4
S/ jr;SS0S1S2/ / 4S,\\)   S-\\)   4S3 jjr<S\S4\)S*\\\)\)4      4S5 jr=S\RP                  S\)S4\)4S6 jr>SS7S2/ / 4S\)S4\)S,\\)   S-\\)   4S8 jjr?g);    )X)ListTupleOptional)globals)mysqlErrorN)collect_ping_statscollect_host_info)make_zipinfoInstanceSessioncollect_diagnosticscollect_diagnostics_onceDiagnosticsSession)	collect_innodb_cluster_accountscollect_cluster_metadatacollect_error_log_sqlcollect_schema_statscollect_slow_queriesget_topology_memberscollect_table_infoexplain_heatwave_queryexplain_query)ShellExecutor)SQLExecutorc                     Uc  SU;   a  SnOU R                   n[        R                  R                  XUS9nU R                  b  X@R
                  U R                  '   U$ )N
|)style)default_styleyamlrepresenter
ScalarNode	alias_keyrepresented_objects)selftagvaluer   nodes        5/usr/lib/mysqlsh/plugins/debug/collect_diagnostics.pyrepr_yaml_textr+   *   sZ    }5=E&&E&&s&?D~~!37  0K    zfpathsource_pathc                    U R                  [        U5      S5       n [        US5       n UR                  S5      nU(       d  OUR                  U5        M,  S S S 5        S S S 5        g ! , (       d  f       N= f!   SS Kn[        SU S35        UR                  SU S3R                  S	5      5        UR                  UR                  5       R                  S	5      5         N= f! , (       d  f       g = f)
Nwrbi   r   zWARNING: Could not copy 'z'
zError copying file r   utf-8)openr   readwrite	tracebackprintencode
format_exc)r-   r.   r/   finfdatar7   s          r*   copy_local_filer>   :   s    	d#S	)Q	<k4(C88I.DGGDM	  ) 
*	)((	<-k]#>?GG)+b9@@IJGGI((*11':; 
*	)s@   C&A:.A)A:)
A7	3A:6C&7A::A'C#!C&&
C4local_targetsessionignore_errorsc                V   U(       a  UR                  S5      R                  5       u  pV[        R                  R	                  U5      (       a  UnO[        R                  R                  XV5      n[        SU S35        [        XU5        g[        XX4S9(       d  [        SU S35        gg)	Nzselect @@datadir, @@log_errorz! - Copying MySQL error log file ()rA   z,MySQL error logs could not be collected for zH, please include error.log files if reporting bugs or seeking assistanceFT)	run_sql	fetch_oneosr.   isabsjoinr8   r>   r   )r-   r.   r?   r@   rA   sys_datadirsys_log_errorlog_paths           r*   collect_error_logrM   J   s    %,__+&--6Y[ 	# 77==''$Hww||K?H1(1=>(+ 	 %RwT>wi  HP  QRr,   Fprefixslow_queries	benchmarkc                 8   U R                  [        U S35      S5       nUR                  UR                   S3R	                  S5      5        S S S 5        UR                  S5      R                  5       u  ppppnnnn UR                  S5      R                  5       S   nS nS	nU(       aT  [        S
5        [        R                  R                  S5      (       a  SnUR                  SU S35      R                  5       nU R                  [        U S35      S5       nUR                  SU SU S3R	                  S5      5        UR                  SU SU S3R	                  S5      5        UR                  SU S3R	                  S5      5        UR                  SU S3R	                  S5      5        UR                  SUR                   S3R	                  S5      5        UR                  SU S3R	                  S5      5        UR                  SU S3R	                  S5      5        UR                  SU	 S3R	                  S5      5        UR                  SU
 S3R	                  S5      5        UR                  SU S3R	                  S5      5        UR                  SU S3R	                  S5      5        UR                  SU S3R	                  S5      5        UR                  SUR                   S3R	                  S5      5        UR                  S UR                   S3R	                  S5      5        UR                  S!UR                   S3R	                  S5      5        UR                  S"UR                   S3R	                  S5      5        U(       a'  UR                  S#U S$U S3R	                  S5      5        S S S 5        [!        X S%3UX$S&9  U(       a  [#        X UUS'9  g g ! , (       d  f       GN= f!   Sn GNh= f! , (       d  f       NM= f)(Nurir1   r   r3   zselect utc_timestamp(), now(), @@time_zone, @@system_time_zone, cast(TIMEDIFF(NOW(), UTC_TIMESTAMP()) as char), @@hostname, @@port, @@report_host, @@report_port, @@server_uuid, @@server_id, concat(@@version_comment, ' ', @@version)z#select sys_version from sys.versionr   zN/AizExecuting BENCHMARK()...
mysqlshrecd   zSELECT BENCHMARK(z,(1234*5678/37485-1298+8596^2))instancez
Hostname: z (report_host=z)
zPort: z (report_port=zServer UUID: zServer ID: zConnection Endpoint: z	Version: z
UTC Time: zLocal Time: zTime Zone: zSystem Time Zone: zTime Zone Offset: zSYS Schema Version: zPFS Enabled: zHas InnoDB Cluster: z	Has NDB: zHas Rapid: z
BENCHMARK(z!,(1234*5678/37485-1298+8596^2)): 	error_log)r?   r@   rA   rD   )r4   r   r6   rR   r9   rE   rF   r8   sys
executableendswithget_execution_timehas_pfshas_innodbclusterhas_ndb	has_rapidrM   r   )r-   rN   r@   rO   rA   rP   r?   r;   utc_time
local_time	time_zonesys_tztz_offshostnameportreport_hostreport_portserver_uuid	server_idversionsys_versionbm_time
loop_counts                          r*   collect_member_inforn   ]   s    
n-s	3q	7;;-r"))'23 
4 CJ  CR  CR 	rCs t}  t}  t @H)WS^`kmvxoo133<9;qB
 GJ()>>""<00J//
|+JKMM_M_Ma 	 
12C	8A	
.SAHHQ	S	&n[M=DDWMN	-}B/66w?@	+i[+227;<	'}B7>>wGH	)G9B'..w78	*XJb)009:	,zl"-44W=>	+i[+227;<	$VHB/66w?@	$WIR077@A	&{m26==gFG	-03::7CD	"7#<#<"=R@GGP	R	)GOO,B/66w?@	+g//03::7CDGGZL(I'RTU\\]deg) 
9. bHI.#/%D R8g+8	: e 
4	3 
9	8s$   .O/>"P J'P/
O>P
Pc                    [        [        U 5      SS 5      nUS:X  a  [        U 5      n OdUS:X  a  [        U 5      n ORUS:X  aL  [        U SS 5      nUS:X  a9  0 n[	        U 5       H&  n[        X   5      (       a  M  [        X   5      X4'   M(     U$ [        U [        5      (       a*  0 nU R                  5        H  u  pE[        U5      X4'   M     U$ [        U [        5      (       a'  / nU  H  nUR                  [        U5      5        M     U$ U $ )N__name__Dictr   Object__mysqlsh_classname__Options)
getattrtypedictlistdircallable	normalize
isinstanceitemsappend)r=   tshclassoutkvs         r*   r{   r{      s    T
J-AF{Dz	
fDz	
h$ 7>iCY((&tw/CF  J$JJLDAq\CF !
	D$		AJJy|$ 
r,   Tinfo
shell_logsc                    [         R                  n[        U5      nUR                  US'   [	        UR
                  5      US'   UR                  US'   [        R                  " 5       US'   U R                  [        U S35      S5       nUR                  [        R                  " U5      R                  S5      5        S S S 5        U(       ao  [        S5        UR
                  S	   (       aO  [         R"                  R%                  UR
                  S	   5      (       a  ['        X S
3UR
                  S	   5        g g g g ! , (       d  f       N= f)Nrj   optionsdestinationrd   zshell_info.yamlr1   r3   zCopying shell log file...logFilezmysqlsh.log)r   shellrw   rj   r{   r   rR   socketgethostnamer4   r   r6   r!   dumpr9   r8   rG   r.   existsr>   )r-   rN   r@   r   r   r   
shell_infor;   s           r*   collect_basic_infor      s   MMEdJ!MMJy%emm4Jy 'J}#//1Jz	893	?1			*%,,W56 
@ )*==#u}}Y7O(P(PB(+ 6!MM)46 )Q#  
@	?s   5D<<
E
innodb_mutex
custom_sqlc           	          / n[        UR                  S5      R                  S 5       H  n	UR                  U	5        M     [	        XX$UUS9  [        XUUUS9  U$ )Nzshow global variables)rO   rA   r?   )r   r   )iterrE   fetch_one_objectr~   rn   r   )
r-   rN   r@   r   rO   rA   r?   r   varsrs
             r*   collect_memberr      sf     D'//"9:KKTRA S 
G#!#
 R*6(24 Kr,   local_instance_idc	                 
   / n	[        U5      n
U
 H  u  pUUS.n[        SU S35         [        U5      nUR                  S5      u  US'   US'   [	        [
        R                  " U5      5      n[!        X U S3UXEUX:H  US9US'   [        5         U	R#                  U5        M     U	$ ! [         a  n[        SU SU 35        U R                  [        U U S	35      S
5       nUR                  SU S3R                  S5      5        UR                  [        U5      S-   R                  S5      5        S S S 5        O! , (       d  f       O= fUR                  [
        R                  R                  :X  a  e  S nAGMm  S nAff = f)N)instance_idendpointzCollecting information from ...:hostre   zCould not connect to : z.connect_error.txtr1   # r   r3   .)r   rO   rA   r?   r   global_variables)r   r8   rw   splitr   r   get_sessionr	   r4   r   r6   r9   strcode	ErrorCodeER_ACCESS_DENIED_ERRORr   r~   )r-   rN   r@   credsr   rO   rA   r   r   instance_datamembersr   r   r=   dester;   s                    r*   collect_topology_diagnosticsr      s    M"7+G!(& 
 	,XJc:;	;D)1)<&DL$v,%e&7&7&=>G $2(;-q)7%'$9!$#  	T"9 ")< '  	)(2aS9:=O&PQSVW[\"XJb)009:Q,,W56 XWW vv???	s1   AB''
F11E="AD<3	E=<
E
0E==Fcluster_typec           
      x   US;   a   [         R                  R                  5       R                  SS05      nU R	                  [        U S35      S5       nUR                  [        R                  " [        [        U5      5      5      R                  S5      5        S S S 5        US
;   a   [         R                  R                  5       R                  SS05      nU R	                  [        U S35      S5       nUR                  [        R                  " [        [        U5      5      5      R                  S5      5        S S S 5        US;   a   [         R                  R                  5       R                  SS05      nU R	                  [        U S35      S5       nUR                  [        R                  " [        [        U5      5      5      R                  S5      5        S S S 5        g g ! , (       d  f       GNW= f! [         a}  nU R	                  [        U S35      S5       nUR                  S5        UR                  U S	3R                  S5      5        S S S 5         S nAGM  ! , (       d  f        S nAGN= fS nAff = f! , (       d  f       GNP= f! [         a}  nU R	                  [        U S35      S5       nUR                  S5        UR                  U S	3R                  S5      5        S S S 5         S nAGM  ! , (       d  f        S nAGN= fS nAff = f! , (       d  f       g = f! [         az  nU R	                  [        U S35      S5       nUR                  S5        UR                  U S	3R                  S5      5        S S S 5         S nAg ! , (       d  f        S nAg = fS nAff = f)N)Ngrcsextended   zcluster_status.yamlr1   r3   zcluster_status.errors   cluster.status({'extended':2})
r   )Nr   zcluster_set_status.yamlzcluster_set_status.errors#   cluster_set.status({'extended':2})
)Narzreplica_set_status.yamlzreplica_set_status.errors#   replica_set.status({'extended':2})
)r   dbaget_clusterstatusr4   r   r6   r!   r   evalreprr9   	Exceptionget_cluster_setget_replica_set)r-   rN   r   r   r;   r   s         r*   dump_cluster_statusr     s   ))	2[[,,.55z1oFF0C&DEsKq		$tF|"45<<WEF L |#	2[[00299:q/JF0G&HI3OST		$tF|"45<<WEF P |#	2[[00299:q/JF0G&HI3OST		$tF|"45<<WEF PO $ LK 	20D&EFLPQ;<1#R01 MLLLL	2 PO 	20H&IJCPTU?@1#R01 QPPPP	2 PO 	20H&IJCPTU?@1#R01 QPPP	2s  AG> AG,G> +AJ 8AJ?J AL5 AL$"L5 ,
G;6G> ;G> >
JJ &5I*J *
I=	4J =J  J
JJ J 
L!$L5L7L
L	LLL!$
L2.L5 2L5 5
N9?N45NN4
N1	)N41N44N9c                  6    S[         R                  " S5       S3$ )Nzmysql-diagnostics-z%Y%m%d-%H%M%S.zip)timestrftime r,   r*   default_filenamer   %  s    o >?tDDr,   c                 \   0 n0 n[        U 5       Hj  u  pgU" U5       HY  nU" U5      n	U" U5      n
X;  a  S /U-  U
/-   XI'   US:  a  SXY'   M0  M2  X;  a  XI   S   U
:w  a  SXY'   XI   R                  U
5        M[     Ml     / nUR                  5        H  n	UR                  XU	   45        M     U$ )Nr   Tr   )	enumerater~   keys)topology_infoget_dataget_key	get_valuefieldsdifferent_fieldsirU   rowkeyr(   diffs               r*   diff_multi_tablesr   )  s    F /H%C#,CcNE #fqjE72q5,0$)  .{2%/04(-""5) & 0 D$$&S+&' ' Kr,   c           	      \  ^ U4S jnU(       a$  U R                  SU S3R                  S5      5        [        U5      /nU H   u  px[        US   [        U5      5      US'   M"     Xe" U5      -  nUR	                  US   5      /n	[        T5       H+  u  pU	R                  UR	                  USU
-      5      5        M-     SR                  U	5      S-   nU R                  UR                  S5      5        U R                  S[        U5      -  S-   R                  S5      5        U H  u  pxUR	                  US   5      /n	[        U5       H+  u  pU	R                  UR	                  USU
-      5      5        M-     U R                  SR                  U	5      S-   R                  S5      5        M     g )	Nc                    > S/[        T5      -  nU  H;  u  p#[        U5       H'  u  pE[        X   U(       a  [        U5      OS5      X'   M)     M=     U$ )Nr   )lenr   max)r=   column_widthsr   valuesr   r   instance_labelss         r*   get_column_widths$dump_diff.<locals>.get_column_widthsA  sS    c/22KC!&)#&}'71Q!#L  *   r,   r   r   r3   r      z | =)r6   r9   r   r   ljustr   r~   rI   )r;   	key_labelr   r   headerr   r   r   r   liner   labelhr(   s     `           r*   	dump_diffr   @  su    	"VHB&&w/0 ^$M}Q/Q8a &t,,MOOM!,-.Do.EKKac 234 /	D	D	 AGGAHHWGGSQZ_$$W-.a()*!!HAKKM!A#$678 %	D!D(009:	 r,   c           
         [        US S S 5      n/ nU H  nUR                  US   5        M     U R                  [        U S35      S5       nU(       a  [	        USXC[        U5       S35        S S S 5        g ! , (       d  f       g = f)	Nc                     U S   $ )Nr   r   )r   s    r*   <lambda>'analyze_topology_data.<locals>.<lambda>`  s
    q);'<r,   c                     U S   $ )NVariable_namer   r   s    r*   r   r   a  s	    _)=r,   c                     U S   $ )NValuer   r   s    r*   r   r   b  s    Wr,   r   zdiff.global_variables.txtr1   Variablez- differing global variables between instances)r   r~   r4   r   r   r   )r-   rN   r   r   instance_namesr   r;   s          r*   analyze_topology_datar   ^  s    ]<=57D Na
m,  
(ABCS	IQ:~D	{Bo5pr 
J	I	Is   "A::
Breturnc                    U (       d  [        S5      eU R                  5       R                  S5      (       dn  U R                  S5      (       d*  [        R                  S:X  a?  U R                  S5      (       a)  [
        R                  R                  U [        5       5      n OU S-  n [
        R                  R                  U R                  SS5      5      S S S-   n[
        R                  R                  U 5      (       a  [        U S-   5      eX4$ )Nz 'path' cannot be an empty stringr   /win32\z already exists)r	   lowerrY   rW   platformrG   r.   rI   r   basenamereplacer   )r.   rN   s     r*   process_pathr   m  s    677::<  ((==#,,'"9dmmD>Q>Q77<<&6&89DFNDWWdll456s;cAF	ww~~dD**++<r,   	customSqlcustomShellc
                 J   [        U5      u  p[        U 5      nUR                  S:  a  [        S5      eU(       a=  UR	                  S5      R                  5       nUS   (       a	  US   S:w  a  [        S5      e[        R                  nUR                  nS nU(       a@  U(       a9  UR                  UR                  5      nUR                  SUS	    S
3SS05      US'   [        R                  R                  UR                  5      nSU;  a  SOUS   S:H  nU	(       a  U(       d  [        S5      e[        U	SS9n[        SUR                   S35         [        R                  " USS9 n[         R"                  " US5        U(       a  UR%                  UU
5        S nUR&                  (       a  [        S5        [)        UXUS9n[+        UXS[-        U5      S.S9  [/        UXUUS9  S nSnUR&                  (       ah  U(       aa  [        S5        [1        UXUS9  [        S5        [3        UU
U5        U(       a,  U(       a%  Sn[5        UXXXgU(       a  UOS S!9n[7        UU
U5        U(       d  [9        UU
 U S"3XUUUUS#9  UR                  UR                  5      nU(       a+  U(       a  [        S$5        [;        UU
U5        O[        S%5        U(       a  [=        UU
5        S S S 5        [        5         [        S'U 35        URD                  (       d  [        S(5        U(       a  UR&                  (       d  [        S)5        g g g ! , (       d  f       Nh= f!   [         R>                  RA                  U5      (       a  [         RB                  " U5        [        5         [        S&5        e = f)*N  MySQL 5.7 or newer requiredz%select @@slow_query_log, @@log_outputr   r   TABLEzZslowQueries option requires slow_query_log to be enabled and log_output to be set to TABLEzPassword for userr   rv   passwordr   T	localhost@Option 'customShell' is only allowed when connected to localhostFallow_phases(Collecting diagnostics information from r   r1   mode  zInnoDB Cluster detectedrD   collectDiagnosticscommandcommandOptions)r   fullrA   z/Gathering grants for mysql_innodb_% accounts...zGathering cluster status...r   )r   rO   rA   r   r   )rO   r   rA   r?   r   z3Connected to local server, collecting ping stats...z8Connected to remote server, ping stats not be collected.AAn error occurred during data collection. Partial output deleted.z'Diagnostics information was written to RWARNING: performance_schema is disabled, collected a limited amount of informationz?NOTE: allMembers enabled, but InnoDB Cluster metadata not found)#r   r   rj   r	   rE   rF   r   r   r   	parse_urirR   promptr   r8   zipfileZipFilerG   chmodexecuter\   r   r   r{   r   r   r   r   r   r   r
   r   r.   r   remover[   )session_r.   	orig_argsinnodbMutex
allMembersschemaStatsslowQueriesignoreErrorsr   r   rN   r@   r   r   my_instance_idr   targetr?   	shell_exer-   r   topology_data	collecteds                          r*   do_collect_diagnosticsr)    sE     %LDh'G122oo355>Y[ 	1vQ7*ln n MME((NEn,!LLE&M?"-
/CEj ]]$$W[[1F!/4VF^{5RL<NP 	P k>I	4W[[M
EF>__T,HHT5!!!"f-L((/07| Er60D7@7K%MN !V;/;= !MI((^GH/F>JL 34#B=. $I$@FU%0<H.b%RM
 *"fmDrfXn-=Q#?&,7-9,8*35 __W[[1FOP&r6=ART !"f-o -~ 
G	3D6
:;??bc'33OP 4zG -,p77>>$IIdOQRs,   M (E5L?M ?
M	M M AN"c           
      v    [        XUUSS9  [        XUSSS9  [        XUSSUSS9  U(       a  [        X5        g g )NF)r   r   Tr  )rO   rA   r?   rP   )r   r   rn   r   )r-   rN   r@   r   r?   s        r*   collect_common_high_load_datar+    sS    r7 "') W"%9 G%)&+%1"&	( "% r,   r   i,  currentc	                 8   [        U5      u  pUS:  a  [        SU S35      eUS:  a  [        SU S35      eUS;  a  [        S5      e[        U 5      n
U
R                  S:  a  [        S5      e[        R
                  R                  U
R                  5      nS	U;  a  S
OUS	   S:H  nU(       a  U(       d  [        S5      e[        SU
R                   S35         [        R                  " USS9 n[        R                  " US5        [        XU
S[        U5      S.U5        U(       a	  U(       d   e[        5         [        XU
XEUUUUS9	  S S S 5        [        5         U
R&                  (       d  [        S5        U(       d  [        S5        U
R&                  (       d  [        S5        [        SU 35        g ! , (       d  f       Nq= f!   [        R                   R#                  U5      (       a  [        R$                  " U5        [        5         [        S5        e = f)Nr   z'iterations' must be > 0 (is rC   'delay' must be > 0 (is r,  mediumr  9'pfsInstrumentation' must be one of current, medium, fullr  r  r   Tr  r  r
  r   r1   r  r  collectHighLoadDiagnosticsr  )r   r   custom_shellr  r  KNOTE: Target server is not at localhost, host information was not collectedzfNOTE: performance_schema is disabled, only a limited set of metrics and information could be collectedz3Server load diagnostics information was written to )r   r	   r   rj   r   r   r  rR   r8   r  r  rG   r  r+  r{   r   r.   r   r  r[   )r  r.   r  r  
iterationsdelaypfsInstrumentationr   r   rN   r@   r%  r?   r-   s                 r*    do_collect_high_load_diagnosticsr8    s     %LDA~3J<qABBqy.ugQ788!>>GI 	I h'G122]]$$W[[1F!/4VF^{5RL<NP 	P 
4W[[M
EF__T,HHT5!)"g6R=Fy=Q+S*68
 #l22GG *3E-8+4-8	: -, 
G??bc[\??vw	?v
FG; -,77>>$IIdOQRs,   G 0AF6G 6
G G G AHqueryc                    ^^ U R                  S5      R                  5       S   mUU4S jm[        R                  " U5      nT" U5      $ )Nzselect schema()r   c                    >^ U4S jm/ nSU ;   aC  U S   S:X  a:  T" U 5      nU(       d   e[        U5      S:X  a  TUS   4nUR                  U5        U$ SU ;   a  U S    H  nUT" U5      -  nM     U$ )Nc                    > SU ;   aD  U S   S:X  a;  U S   S   S   S:X  a   [         R                  " U S   S   S   5      /$ U S   S   S   /$ SU ;   a  / nU S    H  nUT" U5      -  nM     U$ / $ )NrulepureIdentifierchildrenr   symbolBACK_TICK_QUOTED_IDtext)r   unquote_identifier)r)   refnextract_table_refs      r*   rF  Mextract_referenced_tables.<locals>.find_table_refs.<locals>.extract_table_refD  s    ~$v,2B"B
#A&x04II!44T*5Ea5H5PQRR ,Q/788t#j)A,Q//C *
Ir,   r=  tableRefr   r   r?  )r   r~   )astrefs	table_refchildrF  default_schemafind_table_refss       @r*   rN  2extract_referenced_tables.<locals>.find_table_refsC  s    	 S=S[J6)#.I99~"*IaL8	KK	"  3Z.. )r,   )rE   rF   r   parse_statement_ast)r@   r9  rI  rM  rN  s      @@r*   extract_referenced_tablesrQ  @  sB    __%67AACAFN4 
#
#E
*C3r,   c                    [        SU 35        UR                  U5      n[        SUR                  5        35        [        R                  " 5       n[	        UR                  5       5      n[        R                  " 5       n[        SXu-
  S S35        UR                  5       Xu-
  U[        UR                  5       5      UR                  5       US.n[        US5      (       a  UR                  5       US'   U$ )	NzExecuting query: zQuery finished in zResults fetched in z.4fz sec)zExecution TimezResult Fetch TimeQueryWarningszAffected RowszResult Rowsget_infoInfo)r8   rE   rZ   r   r   	fetch_allr{   get_warningsget_affected_row_counthasattrrU  )	r-   rN   helper_sessionr9  r   fetch_start	row_count	fetch_end
query_infos	            r*   execute_profiled_queryr`  b  s    	eW
%&u%A	q3356
78))+KAKKM"I		I		 5c:$
?@ ..0'5ann./113 J q*ZZ\
6r,      c	           
      Z  ^^^^ U(       d  [        S5      e[        U5      u  nmUS:  a  [        SU S35      eUS;  a  [        S5      e[        U 5      n	U	R                  S:  a  [        S5      e[        R
                  R                  U	R                  5      n
S	U
;  a  S
OU
S	   S:H  nU(       a  U(       d  [        S5      e[        X5      n[        R
                  R                  5       n[        SU	R                   S35         [        R                  " USS9 m[        R                  " US5        [        US
S9m[!        XS
S9mTR#                  TT5        TR#                  TT5        U H%  u  p[        SU SU S35        [%        TTXU5        M'     ['        TTU	S[)        U5      S.U5        [        S5        [+        TXT5        U	R,                  (       a  [        S5        [/        TXT5        [1        XS9nUR3                  TT5         UR5                  TT S3US9  [        S5        UUUU4S jnUR7                  UTT S3U5         [9        TTX5      nUR;                  5         UR?                  TT S35        TRA                  T S3S5       nURC                  [D        RF                  " U5      RI                  S 5      5        URC                  S!5        S S S 5        TRK                  TT5        TRK                  TT5        S S S 5        URM                  5         [        5         U	RT                  (       d  [        S#5        U(       d  [        S$5        U(       d  [        S%5        [        S&U 35        g !   UR;                  5         e = f!   UR=                  TT5        e = f! , (       d  f       N= f! , (       d  f       N= f!   URM                  5         [        RN                  RQ                  U5      (       a  [        RR                  " U5        [        5         [        S"5        e = f)'Nz-'query' must contain the query to be analyzedr   r.  rC   r/  r1  r  r  r   Tr  r  r
  r   r1   r  r  r  z-Collecting information for referenced table `z`.``collectSlowQueryDiagnosticsr  zCollecting EXPLAINz Collecting EXPLAIN with Heatwave)r   diagnostics)pfs_instrumentationz,Starting background diagnostics collector...c                 R   > TR                  TTU 5        TR                  TTU 5        g N)execute_during)r   customrN   r   r-   s    r*   
on_iterate5do_collect_slow_query_diagnostics.<locals>.on_iterate  s'    ((VQ7))"fa8r,   zquery-info.yamlr3      
zAAn error occurred during query profiling. Partial output deleted.r  z<NOTE: could not extract list of referenced tables from queryr4  z8Server and query diagnostics information was written to )+r	   r   r   rj   r   r   r  rR   rQ  open_sessionr8   r  r  rG   r  r   r   execute_beforer   r+  r{   r   r^   r   r   collect_configs_and_statestartstart_backgroundr`  stop_backgroundcleanupfinishr4   r6   r!   r   r9   execute_aftercloser.   r   r  r[   )r  r.   r9  r  r  r6  r7  r   r   r@   r%  r?   referenced_tablesr[  sr   diagrk  r_  r;   rj  rN   r   r-   s                       @@@@r*   !do_collect_slow_query_diagnosticsr{  z  s    CDD%LD&qy.ugQ788!>>GI 	I h'G122]]$$W[[1F!/4VF^{5RL<NP 	P 2'A]]//1N	4W[[M
EFC__T,HHT5!!+DAE $GF  V,!!"f-)CA3c!ANP"2vw1= *
 *"fg6S=Fy=Q+S*68
 &'"gf5  89&r76B%gHD**2v6

2&5/A  C DE9 9 %%eRF8;1G&02!7FN";J   "KKvhk23F8?3S9Q		*-44W=> : F+  V,w -H 	G??bcLM[\	DTF
KLE((*R( :9m -,x77>>$IIdOQRso   O C2N7?NM8:N7AN&,N7O 8NNN##N7&
N4	0N77
OO O A"P*rh  )FF)@rer   typingr   r   r   mysqlshr   r   r	   r   r  r!   rG   r   rW   debug.host_infor
   r   debug.sql_collectorr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   r"   BaseRepresenterrepresent_scalarr  r   r>   boolrM   rn   r{   rw   r   r   intr   r   r   r   r   r   r   r)  r+  r8  rQ  r`  r{  r   r,   r*   <module>r     s  0  ( (       	  
 A A  A n  n  n ) +
 5C       1< <s < < '//  t Ve vz ( \a7:GOO 7:S 7:? 7:bf 7:'+7:8<7:TX7:t: acw{ 67?? 6C 6/ 6Y] 6pt 6* ).(-).(-+-w  +!% "& #'	
 "&  $Cy. 7<6;7<:<9;&W__ &c &O &/3&/3& 15& 58	&
 .2#Y&R2C 2x} 2>E.;<rgoo rs uS#X & (-&+',',(-2446lQ '+3ilQ )-S	lQ^&goo &s &_ &dh &x| &* 2701+/8A<>>@;H
 15S	;H 37s);H|   s  tERUWZRZOG\  Dw  TW 2 38,.9B=??AmMc mM# mM 26c	mM
 489mMr,   