ó
    ;ð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Ø××Ø�
‰
�Y˜v×2Ñ2Ð3Ð4Ô5ð ‡J�J��d˜D %Ð(Ô)ðÜ�nŠnØØØØØØñ
ˆð �>‰>˜QÓÜ�I‰IÐCÀSÇ^Á^ÐUX×U_ÑU_Ô`ØØ�z‰zÐøô7 ó Ü�	‰	ÐCÀSÔ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  pšU(       aL  UR                  5       R	                  S5      n[        U5      S:¼  a
  US   US	   p©O[        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Ó2€IÞØˆ	âM€JØ
€CØ×$Ñ$Ö&ˆØ—*‘*“,ˆÞ˜'Ó/ÙØ�
‰
�7Öñ	 'ð €GÛˆð Fð  GIð  FJð  JLð  Mˆ
Ü" :Ó.ˆØ'ÑˆÞØ—N‘NÓ$×*Ñ*¨4Ó0ˆEÜ�5‹z˜Q‹Ø%*¨1¡X¨u°Q©x™Ü�U“˜q“Ø ™(�ð zÐz|Ðy}Ð}ð  Aˆ
Ü" :Ó.ˆØˆÞðØ—n‘nÓ&�Þ˜3 &›=Ü# C›j�Gð 	�‰ØØØ%ØØ"Ø*ñ
ö 	ñ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ÓE€IÞØˆ	âa€LØ€EØ×$Ñ$Ö&ˆØ—
‘
“×"Ñ" 4Ó(ˆÜˆu‹:˜‹>ÙØ˜q™ 5¨¡8�$ØÓ# x×':Ñ':¸8×'DÑ'DÙØ�‰�hÐ%Ö&ñ 'ð €HÛ‰ˆØ*¨8¨*°C¸°v¸RÐ@ˆÜ$ \Ó2ˆ
ä“uˆØˆ	ÞØ(×3Ñ3Ö5�
Ø&¨*×*:Ñ*:Ó*<Ó<Ø $�Iô Ÿ	š	Ð"LÈjÔZ\×ZgÑZgÓh�ß�5Ø#Ÿk™k¨!›n�GØ #•~Ø$×(Ñ(¨Ö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   