
    ;Gj                    v    S SK Jr  S SKrS SKrS SKrS SKrS SKJr  S SKJ	r	  \	" S5      r
S	S jrS
S jrS
S jrg)    )annotationsN)load_config)
get_loggerzdiscovery.databasesc           	     8   [         R                  " S5      (       d  [        R                  S5        g [	        5       n[        R                  R                  5       nUR                  (       a  UR                  US'   SSUR                   3/nUR                  (       a  UR                  SUR                   35        UR                  SS	S
U /5         [        R                  " UUSSSSS9nUR                   S:w  a,  [        R                  SUR                   UR"                  5        gUR$                  $ ! [
         a   n[        R                  SU5         SnAgSnAff = f! [        R&                  [(        4 a   n[        R                  SU5         SnAgSnAff = f)zERun a MySQL query using the CLI and return output or None on failure.mysqlzmysql CLI not found on systemNz/failed to load config in database discovery: %s	MYSQL_PWDz-uz	--socket=z-Nz-Bz-eT
   F)envcapture_outputtexttimeoutcheckr   z+mysql command returned non-zero code %d: %sz"mysql command execution failed: %s)shutilwhichlogdebugr   	Exceptionosenvironcopymysql_password
mysql_usermysql_socketappendextend
subprocessrun
returncodestderrstdoutSubprocessErrorOSError)queryconfigexcr
   cmdress         =D:\Programs\laragon\www\wolf\agent\src\discovery\databases.pyrun_mysql_queryr)      sX   <<  		12
 **//
C!00Kb**+,
-C

Yv22345 JJdD%()nn
 >>QIICS^^UXU_U_`zz7  		CSI8 &&0 		6<s6   
D2 AE &E 2
E<EEF9FFc            
        [        S5      n U (       d  / $ 1 Skn/ nU R                  5        H2  nUR                  5       nU(       a  XA;   a  M!  UR                  U5        M4     / nU H  nSU S3n[        U5      nSu  pU(       aL  UR                  5       R	                  S5      n[        U5      S:  a
  US   US	   pO[        U5      S	:X  a  US   n	S
U S3n[        U5      nSnU(       a)   UR                  5       nU(       a  US:w  a  [        U5      nUR                  UU	U
USSS.5        M     U$ ! [         a     N*f = f)z=Discover logical database schemas, their metadata, and sizes.zSHOW DATABASES;>   sysr   information_schemaperformance_schemaznSELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='';)NN	   r      zbSELECT SUM(data_length+index_length)/1024/1024 FROM information_schema.TABLES WHERE table_schema='g        NULLr   database_schemas)namecharsetdb_collationsize_mbengine_typecategory)r)   
splitlinesstripr   splitlenfloat
ValueError)	db_output
system_dbsdbslinedb_nameschemasdb
meta_querymeta_outr5   	collationparts
size_querysize_outr7   vals                   r(   discover_database_schemasrN   6   so    12I	MJ
C$$&**,'/

7	 ' G F  GI  FJ  JL  M
":.'NN$**40E5zQ%*1XuQxUq( zz|y}}  A
":.nn&3&=#CjG 	%"*
 	1 B N  s   +(D11
D>=D>c            
        [        S5      n U (       d  / $ 1 Skn/ nU R                  5        Hk  nUR                  5       R                  S5      n[	        U5      S:  a  M3  US   US   peXQ;   d  UR                  S5      (       a  MY  UR                  XV45        Mm     / nU H  u  pVSU S	U S
3n[        U5      n	[        5       n
SnU	(       a  U	R                  5        Hr  nSUR                  5       ;   a  Sn[        R                  " SU[        R                  5      nU(       d  MH  UR                  S5      nUS:w  d  Ma  U
R                  U5        Mt     UR                  UU[        [        U
5      5      USS.5        M     U$ )zKDiscover database users, hosts, database mappings, and grant option status.z"SELECT User, Host FROM mysql.user;>   root	mysql.sysmysql.sessiondebian-sys-maintmysql.infoschemar/   r0   r   r1   zmysql.zSHOW GRANTS FOR 'z'@'r.   FzWITH GRANT OPTIONTz'ON\s+`?([^`\s\.]+)(?:`?\.`?[*`]|`?\.\*)*database_users)usernamehost	databaseshas_grant_optionr9   )r)   r:   r;   r<   r=   
startswithr   setupperresearch
IGNORECASEgroupaddsortedlist)	users_outsystem_usersusersrC   rJ   rW   rX   db_usersgrants_query
grants_outassigned_dbs	has_grant
grant_linematchrD   s                  r(   discover_database_usersro   i   sl    DEI	aLE$$&

""4(u:>q58$#x':':8'D'Dh%& ' H*8*CvR@$\2
u	(335
&**:*:*<< $I 		"LjZ\ZgZgh5#kk!nG#~$((1 6 	 \ 23 )(
 	%  4 O    )r#   strreturnz
str | None)rr   z
list[dict])
__future__r   r   r^   r   r   r$   r   loggerr   r   r)   rN   ro    rp   r(   <module>rv      s6    " 	 	    &'&R0f,rp   