
    ^ih!                        S SK JrJrJ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rS SKrS SKrS SKr/ SQr/ SQr/ SQrS\\   S\\\   \\   \\   4   4S	 jr " S
 S5      rS rSS\S\\   S\4S jjrS\R0                  S\4S jrS\4S jrS r\S:X  a-  \R0                  " SS5       r\" \SSS0SS0/5        SSS5        gg! , (       d  f       g= f)    )ListOptionalTupleN)globalsError)dateuname -amount -vdf -hz	iostat -Kztop -l4 -s1ps aux	ulimit -admesg%egrep -i 'err|fault|mysql' /var/log/*znetstat -ln	sysctl -a)zdate /Tver
systeminfoztasklist /V)!r   r	   
getenforcezfree -mz	swapon -szlsb_release -ar
   r   zcat /proc/cpuinfozcat /proc/meminfozcat /etc/fstabzmpstat -P ALL 1 4ziostat -m -x 1 4z
vmstat 1 4ztop -b -n 4 -d 1r   r   zfor PID in `pidof mysqld`;do echo "# numastat -p $PID";numastat -p $PID;echo "# /proc/$PID/limits";cat /proc/$PID/limits;echo;doner   r   pvs	pvdisplayvgs	vgdisplaylvs	lvdisplayznetstat -lnputznumactl --hardwareznumastat -mr   z dmidecode -s system-product-namezlsblk -izsudo sosreportlreturnc                     / n/ n/ nU  H  nUR                  5       R                  S5      (       a%  UR                  UR                  S5      S   5        ML  UR                  5       R                  S5      (       a%  UR                  UR                  S5      S   5        M  UR                  5       R                  S5      (       a%  UR                  UR                  S5      S   5        M  UR                  U5        M     XU4$ )Nzbefore::zduring:zafter:)lower
startswithappend	partition)r   beforeduringafterss        +/usr/lib/mysqlsh/plugins/debug/host_info.pysplit_phasesr(   V   s    FFE779	**MM!++c*2./WWY!!),,MM!++c*2./WWY!!(++LLS)"-.MM!  5      c                       \ rS rSr/ S4S\\   S\4S jjrS\R                  S\4S jr
S\R                  S\4S	 jrS\R                  S\S
\4S jrS\R                  S\4S jrSrg)ShellExecutorf   Tcustom_shellallow_phasesc                     [        U5      U l        U(       d4  U R                  S   (       d  U R                  S   (       a  [        S5      eg g )N      zHOption 'customShell' may not contain before:, during: or after: prefixes)r(   r-   r   )selfr-   r.   s      r'   __init__ShellExecutor.__init__g   sI    (6  #t'8'8';^` ` (< r)   zfprefixc                 d    U R                   S   nU(       a  [        S5        [        X S3USS9  g g )Nr   zExecuting custom shell scriptszcustom_shell.txtFignore_errorsr-   printrun_shell_scriptsr2   r5   r6   r   s       r'   executeShellExecutor.executeo   s;    a 24h./%I r)   c                 d    U R                   S   nU(       a  [        S5        [        X S3USS9  g g )Nr   z'Executing custom 'before' shell scriptszcustom_shell-before.txtFr8   r:   r=   s       r'   execute_beforeShellExecutor.execute_beforev   s;    a ;=h56P r)   	iterationc                 j    U R                   S   nU(       a  [        S5        [        X SU S3USS9  g g )Nr0   z1Executing custom 'during' iteration shell scriptszcustom_shell-iterationz.txtFr8   r:   )r2   r5   r6   rC   r   s        r'   execute_duringShellExecutor.execute_during}   sA    a EGh4YKtDa#% r)   c                 d    U R                   S   nU(       a  [        S5        [        X S3USS9  g g )Nr1   z&Executing custom 'after' shell scriptszcustom_shell-after.txtFr8   r:   r=   s       r'   execute_afterShellExecutor.execute_after   s;    a :<h45qO r)   )r-   N)__name__
__module____qualname____firstlineno__r   strboolr3   zipfileZipFiler>   rA   intrE   rH   __static_attributes__ r)   r'   r+   r+   f   s    13$ `T#Y `4 `I'// I3 IP P# P% %# %# %O O Or)   r+   c                    [         R                  " US[         R                  [         R                  S9nU R	                  SU S3R                  S5      5        U R	                  S[        R                  R                  5       R                  5        S3R                  S5      5        U R	                  SUR                   S3R                  S5      5        U R	                  UR                  5        U R	                  S5        UR                  $ )NT)shellstdoutstderrz# 
utf-8z# exitcode = s   


)
subprocessrunPIPESTDOUTwriteencodedatetimenow	isoformat
returncoderW   )fcmdrs      r'   dump_shell_cmdrh      s    4

8I8I	KAGGbRL()GGb""&&(2245R8??HIGGmALL>,33G<=GGAHHGGI<<r)   fnscriptsr9   c                     U R                  US5       nU H<  n[        SU 35        [        XE5      nUS:w  d  M$  U(       a  M-  [        SU SU 35      e   S S S 5        g ! , (       d  f       g = f)Nwz -> Executing r   zShell command "z" exited with code )openr;   rh   r   )r5   ri   rj   r9   re   rf   rcs          r'   r<   r<      sf    	S	QCN3%()'BQw$}/#6I" NOO  
		s   #AAA
A-r5   r6   c                    [         R                  R                  [        R                  " 5       S5      nSSU/nU R                  U S5       n[        SSR                  U5      5        [        XC5        UR                  [        US5      R                  5       5        S S S 5        [         R                  " U5        g ! , (       d  f       N%= f)Nzmysqlsh_msinfo32.txtmsinfo32z/reportrl   	Executing rb)ospathjointempfile
gettempdirrm   r;   rh   r_   readremove)r5   r6   	temp_pathargsre   s        r'   collect_msinfo32r}      s    X0024JKI	9-D	F8c	"ak388D>*q	Y%**,-	 
# IIi 
#	"s   AB;;
C	c                 B   / n[         R                  S:X  a  [        nO@[         R                  S;   a  [        n[	        X5        O[         R                  S:X  a  [
        n[        S[        R                  " 5        S[         R                   S35        [        X S3U5        g )Ndarwin)win32cygwinmsyslinuxz"Collecting system information for z ()	host_info)
sysplatformk_host_info_cmds_macosk_host_info_cmds_win32r}   k_host_info_cmds_linuxr;   socketgethostnamer<   )r5   r6   cmdlists      r'   collect_host_infor      s~    G
||x(	4	4($		 (	
,V-?-?-A,B"S\\NRSTVbHI.9r)   c           	         S n[         R                  n/ n/ n[        S[        R                  " 5        S35        U Hh  nUS   nUS   n	UR                  U5      S   n
[        SU
 S35        UR                  [        R                  " X:X4S	95        US
   R                  5         Mj     U H  nUR                  5         M     U R                  U S3S5       nU H`  u  pnUR                  SU	 SU
 S3R                  S5      5        UR                  S5        UR                  U5        UR                  S5        Mb     S S S 5        g ! , (       d  f       g = f)Nc                 "    [         R                  " S[        R                  S:X  a  SOSSU /SS9nUR	                  XUR
                  45        g ! [         a5  nUR	                  X[        U5      R                  S5      45         S nAg S nAff = f)	Npingr   z/nz-c5T)capture_outputrZ   )	r[   r\   r   r   r!   rW   FileNotFoundErrorrN   r`   )hostinstance_idtimingsrg   es        r'   r    collect_ping_stats.<locals>.ping   s    	H(+(?T3 $ &6:<A NNKqxx89  	HNNKs1v}}W/EFGG	Hs   AA 
B+B		BzExecuting ping from z to other member hosts...endpointr   r   z - Executing ping z
 for 5s...)targetr|   r   zping.txtrl   z# instance z - ping rY   rZ      
)r   rV   r;   r   r   	parse_urir!   	threadingThreadstartrv   rm   r_   r`   )r5   r6   topology_datar   rV   threadsr   instancer   r   r   thdre   outs                 r'   collect_ping_statsr      sE   H MMEGG	
v11344MNP!J'}-x(0"4&
34y''[:< 	= " 
  
F88$c	*a&-"KsGGk](4&;BB7KMGGENGGCLGGEN '. 
+	*	*s   A'E
E__main__ztest.ziprl   testr   	localhostzwww.oracle.com)T)typingr   r   r   rP   r   r   r[   mysqlshr   r   r   ra   rw   rt   r   r   r   rN   r(   r+   rh   rO   r<   rQ   r}   r   r   rJ   r5   rT   r)   r'   <module>r      s  0 ) (     " 
   	' ) 
, @!DI !%S	49d3i(G"H ! $O $ONPc PDI Pd P
 
# 
:# :#L z	S	)R*k2ZAQ4RS	U 
*	) 	)	)s   -C
C