+
    Û1jZ4  ã                   óÌ   € ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtH	t	H
t
 ^ RIt^ RIHt ^ RIHtHtHt ^ RIt^ RIHtHtHt ^ RIHt  ! R R	]4      t ! R
 R]]4      tR# )é    )ÚEnumN)ÚquoteÚ
quote_plusÚ	urlencode)ÚPath)ÚDictÚOptionalÚTuple)ÚPluginÚ	PluginOptÚUbuntuPlugin)Úis_executablec                   ó   € ] tR t^tRtRtRtR# )Ú	SubstrateÚvmÚk8s© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚVMÚK8SÚ__static_attributes__r   ó    ÚC/usr/lib/python3/dist-packages/sos/report/plugins/charmed_mongos.pyr   r      s   † Ø	€BØ
„Cr   r   c            	       óp  a € ] tR t^t o RtRtRtR1tR2tRt	Rt
RtRtRtR	R
RR/t]! RR]RR7      ]! RR]RR7      ]! RR]RR7      .tR3tV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltR tV 3R  lR! ltV 3R" lR# ltV 3R$ lR% ltV 3R& lR' ltV 3R( lR) ltR* tV 3R+ lR, ltR- t V 3R. lt!R/t"V t#R0# )4ÚCharmedMongosa’  The Charmed Mongos plugin is used to collect Mongos configuration
and logs from the Charmed Mongos snap package or K8s deployment.

If all_logs is set to True, it collects all logs by default.
The parameters `dbuser` and `dbpass` are used to dump database information,
replicaset status, shard status, etc. You can provide those parameters with
the environment variables `MONGOS_USER` and `MONGOS_PWD`
zCharmed MongosÚcharmed_mongosúcharmed-mongodbz /var/snap/charmed-mongodb/commonz!/var/snap/charmed-mongodb/currentÚkubectlz!app.kubernetes.io/name=mongos-k8sÚMONGODB_CONFz/etc/mongodÚMONGODB_LOGSz/var/log/mongodbÚdumpdbsFz'Set to true to dump server information.)ÚnameÚdefaultÚval_typeÚdescÚdbuserÚ z%Username for database dump collection)r&   r'   r(   Údbpassz%Password for database dump collectionc                ó&   <€ V ^8„  d   QhRS[ RS[ /# )é   ÚbaseÚparts©Ústr)ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚCharmedMongos.__annotate__]   s   ø€ ÷ 5ñ 5¡Cð 5±ñ 5r   c                ó¢   € V Uu. uF+  q3P                  \        P                  P                  4      NK-  	  ppV P                  ! V.VO5!  # u upi ©N)ÚlstripÚosÚpathÚsepÚ	path_join)Úselfr.   r/   ÚpÚstripped_partss   &&*  r   Ú_join_conf_pathÚCharmedMongos._join_conf_path]   s?   € Ù9>Ó?¹°AŸ(™(¤2§7¡7§;¡;Ö/¹ˆÐ?Ø�~Š~˜dÐ4 ^Ó4Ð4ùò @s   …1Ac                óV   <€ V ^8„  d   QhRS[ S[S[,          S[S[,          3,          /# ©r-   Úreturn)r
   r	   r1   )r2   r3   s   "€r   r4   r5   a   s&   ø€ ÷  ñ  ¡U©8±C­=¹(Á3½-Ð+GÕ%Hñ  r   c                ó  € V P                  R 4      pV P                  R4      pV'       gf   R\        P                  9   d4   V P                  P	                  R4       \        P                  R,          pMV P                  P                  R4       R# V'       gh   R\        P                  9   d6   V P                  P	                  R4       \        P                  R,          pW3# V P                  P                  R4       R# W3# )	r)   r+   ÚMONGOS_USERz[MONGOS_USER present: Using MONGOS_USER environment variable, user did not provide username.z%error: Missing credentials (username)Ú
MONGOS_PWDzYMONGOS_PWD present: Using MONGOS_PWD environment variable, user did not provide password.z%error: Missing credentials (password))NN)Ú
get_optionr9   ÚenvironÚsoslogÚinfoÚwarning)r=   Údb_userÚdb_passs   &  r   Ú_get_db_credentialsÚ!CharmedMongos._get_db_credentialsa   sÒ   € Ø—/‘/ (Ó+ˆØ—/‘/ (Ó+ˆçØ¤§
¡
Ô*Ø—‘× Ñ ð?ôô Ÿ*™* ]Õ3‘à—‘×#Ñ#Ð$KÔLØ!Ð!çØœrŸz™zÔ)Ø—‘× Ñ ð?ôô Ÿ*™* \Õ2�ð
 ÐÐð —‘×#Ñ#Ð$KÔLØ!Ð!àÐÐr   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rC   )r	   r1   )r2   r3   s   "€r   r4   r5   }   s   ø€ ÷ 	ñ 	™h¡s�mñ 	r   c                ó^  € V P                   R ,           R2pV P                  V P                  V4      p \        VRR7      ;_uu_ 4       p\        P
                  ! V4      pRRR4       XP                  R/ 4      P                  RR4      #   + '       g   i     L2; i  \         d     R# i ; i)r"   ú/mongos.confzutf-8)ÚencodingNÚshardingÚconfigDB)Ú
conf_pathsr@   Úsnap_path_currentÚopenÚyamlÚ	safe_loadÚgetÚFileNotFoundError)r=   Ú
_conf_fileÚ	conf_pathÚfÚdatas   &    r   Úvm_config_dbÚCharmedMongos.vm_config_db}   s“   € ØŸ™¨Õ7Ð8¸ÐEˆ
Ø×(Ñ(¨×)?Ñ)?ÀÓLˆ	ð	Ü�i¨'×2Õ2°aÜ—~’~ aÓ(�÷ 3ð —8‘8˜J¨Ó+×/Ñ/°
¸DÓAÐA÷ 3×2ûô !ô 	Úð	ús)   ´B Á	B
Á )B Â
B	ÂB ÂB,Â+B,c          	      óB   <€ V ^8„  d   QhRS[ RS[ RS[ RS[S[ ,          /# )r-   Úkube_cmdÚcontÚpodrD   )r1   r	   )r2   r3   s   "€r   r4   r5   ˆ   s1   ø€ ÷ >ñ >Ùð>Ù#&ð>Ù-0ð>á	‘#�ñ>r   c                ó"  € V R V RV RV P                   R,           R2pV P                  V4      pVP                  R4      ^ 8w  d   R# \        P                  ! VP                  RR4      4      pVP                  R	/ 4      P                  R
R4      # )ú	 exec -c Ú z -- cat r"   rS   ÚstatusNÚoutputr*   rU   rV   )rW   Úexec_cmdr\   rZ   r[   )r=   re   rf   rg   Úcat_conf_cmdÚresultra   s   &&&&   r   Úk8s_config_dbÚCharmedMongos.k8s_config_dbˆ   s‘   € ð
 ˆj˜	 $  q¨¨ð .Ø—?‘? >Õ2Ð3°<ðAð 	ð —‘˜|Ó,ˆà�:‰:�hÓ 1Ô$Ùä�~Š~˜fŸj™j¨°2Ó6Ó7ˆØ�x‰x˜
 BÓ'×+Ñ+¨J¸Ó=Ð=r   c           
     óh  € V P                  4       pV'       g   R # V P                  V P                  V P                  R,          4      pV P                  V P                  V P                  R,          4      pV P                  R4      pV P                  V R2V R2V R2V R2.4       V P                  V.4       V'       d   V P                  V R2.4       MV P                  V R	2.4       V'       d   R MR
pV P                  RVR7       V P                  R4       V P                  R4      '       g   R # V P                  4       w  rgV'       d	   V'       g   R # V P                  V\        P                  4      pRp	RV/p
V P                   F#  w  r¼V P                  RV	 RV RV R2VV
R7       K%  	  R # )Nr"   r#   Úall_logsú/*.pemú/*.crtú/keyFileú/mongod.confú/*ú/*.logiô  zsnap.charmed-mongodb.mongos)Úlineszsnap info charmed-mongodbr$   zcharmed-mongodb.mongoshrG   zsh -c 'rj   ú --quiet --eval "z"')Úsuggest_filenameÚenv)rb   r@   rX   rW   Úsnap_path_commonrH   Úadd_forbidden_pathÚadd_copy_specÚadd_journalÚadd_cmd_outputrO   Ú
_build_urir   r   Úmongos_commands)r=   Ú	config_dbÚ	base_confÚ	base_logsrs   rz   rM   rN   Ú
mongos_uriÚmongodb_cmdr}   Úcommandr|   s   &            r   Ú_process_snapÚCharmedMongos._process_snap˜   sº  € Ø×%Ñ%Ó'ˆ	çáà×(Ñ(Ø×"Ñ" D§O¡O°NÕ$Có
ˆ	ð ×(Ñ(Ø×!Ñ! 4§?¡?°>Õ#Bó
ˆ	ð —?‘? :Ó.ˆð 	×Ñà�+˜VÐ$Ø�+˜VÐ$Ø�+˜XÐ&Ø�+˜\Ð*ð	ô	
ð 	×Ñ˜I˜;Ô'çØ×Ñ 9 +¨RÐ 0Ð1Õ2à×Ñ 9 +¨VÐ 4Ð5Ô6ç ‘ cˆØ×ÑÐ6¸eÐÔDà×ÑÐ7Ô8à�‰˜y×)Ò)Ùà×3Ñ3Ó5ÑˆßŸgÙà—_‘_ W¬i¯l©lÓ;ˆ
Ø/ˆØ˜WÐ%ˆð *.×)=Ô)=Ñ%ˆGØ×Ñà˜k˜]¨!¨J¨<ð 8(Ø(/ y°ð5ð "2Øð  ö ó *>r   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[ /# )r-   rM   Ú	substraterD   )r1   r   )r2   r3   s   "€r   r4   r5   Ó   s.   ø€ ÷ Hñ HáðHñ ðHñ 
ñ	Hr   c                ól  € V P                   R ,          pRR/pV\        P                  8X  d   V P                  V P                  V4      p\        V R24      p\        V R24      pVP                  4       '       d(   VP                  4       '       d   VRRRV RV /,          p\        V4      p\        V4      pR	p	\        V P                   R
24      p
V\        P                  8X  d%   V
P                  4       '       d   \        V
 RR7      p	V\        P                  8X  d   RV RV	 RV 2# RV RV	 RV 2# )r"   Ú
authSourceÚadminz/external-ca.crtz/external-cert.pemÚtlsÚtrueÚtlsCertificateKeyFileÚ	tlsCaFilez127.0.0.1:27018z/var/mongodb-27018.sockr*   )Úsafez
mongodb://Ú@z/admin?z:${MONGOS_PWD}@)rW   r   r   r@   rX   r   Úexistsr   r   r   r   )r=   rM   rŽ   r†   ÚargsÚexternal_caÚexternal_certÚ_argsÚuserÚhostÚsocket_paths   &&&        r   rƒ   ÚCharmedMongos._build_uriÓ   s=  € ð
 —O‘O NÕ3ˆ	Ø ,¨gÐ6ˆàœ	Ÿ™Ô$Ø×,Ñ,¨T×-CÑ-CÀYÓOˆIä˜i˜[Ð(8Ð9Ó:ˆÜ 	˜{Ð*<Ð=Ó>ˆØ×Ñ×Ò M×$8Ñ$8×$:Ò$:ØØ�vØ'¨M¨?Ø ˜}ðõ ˆDô
 ˜$“ˆÜ˜'Ó"ˆØ ˆÜ˜d×4Ñ4Ð5Ð5LÐMÓNˆØœ	Ÿ™Ô$¨×);Ñ);×)=Ò)=Ü˜K˜=°Ô3ˆDàœ	Ÿ™Ô%Ø ˜v Q t f¨G°E°7Ð;Ð;Ø˜D˜6Ð!2°4°&¸À¸wÐGÐGr   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rC   ©Úlistr1   )r2   r3   s   "€r   r4   r5   ñ   s   ø€ ÷ ñ ¡t©C¥yñ r   c                óæ   € V P                  V P                   R V P                   R24      pVR,          ^ 8X  d8   \        \	        VR,          P                  4       P                  4       4      4      # . # )z get pods -A -l z- -o jsonpath='{.items[*].metadata.namespace}'rk   rl   )rm   re   Úselectorr£   ÚsetÚstripÚsplit)r=   Ú
namespacess   & r   Ú_determine_namespacesÚ#CharmedMongos._determine_namespacesñ   si   € Ø—]‘]Ø�}‰}ˆoÐ-¨d¯m©m¨_ð =;ð ;ó
ˆ
ð �hÕ 1Ô$Üœ˜J xÕ0×6Ñ6Ó8×>Ñ>Ó@ÓAÓBÐBØˆ	r   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rC   r¢   )r2   r3   s   "€r   r4   r5   ú   s   ø€ ÷ ñ ©4±­9ñ r   c                óÈ   € V P                  V P                   R V RV P                   R24      pVR,          ^ 8X  d&   VR,          P                  4       P	                  4       # . # )ú -n z get pods -l z( -o jsonpath='{.items[*].metadata.name}'rk   rl   )rm   re   r¥   r§   r¨   )r=   Ú	namespaceÚpodss   && r   Ú_get_pod_namesÚCharmedMongos._get_pod_namesú   sc   € Ø�}‰}Ø�}‰}ˆo˜T ) ¨M¸$¿-¹-¸ð I6ð 6ó
ˆð ��>˜QÔØ˜•>×'Ñ'Ó)×/Ñ/Ó1Ð1Øˆ	r   c                óJ   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ RS[ RS[ RS[ RS[ /# )	r-   re   rf   rg   Ú
mongod_cmdÚuriÚpasswordÚcmdÚcmd_namer0   )r2   r3   s   "€r   r4   r5     s[   ø€ ÷ "
ñ "
áð"
ñ ð"
ñ ð	"
ñ
 ð"
ñ ð"
ñ ð"
ñ ð"
ñ ñ"
r   c	                óÜ  € \         P                  \         P                  ,           p	R P                  \	        ^4       U
u. uF  p
\
        P                  ! V	4      NK  	  up
4      pRV RV R2p\        P                  ! V RV RV RV RV RV RV R	24      p\        P                  ! WÖP                  4       R
R7       V RV RV RV RV R	2
pV P                  VV RV 2R7       R# u up
i )r*   z
/tmp/eval_Ú_z.txtz exec -i -c rj   z -- sh -lc 'r{   z" --password > Ú'F)ÚinputÚcheckri   z -- sh -lc 'cat z && rm )Úcmdsr|   N)ÚstringÚascii_lettersÚdigitsÚjoinÚrangeÚsecretsÚchoiceÚshlexr¨   Ú
subprocessÚrunÚencoder‚   )r=   re   rf   rg   r´   rµ   r¶   r·   r¸   Úchoicesrº   Ú
randstringÚoutput_fileÚ	query_cmdÚcat_cmds   &&&&&&&&&      r   Ú_remote_execÚCharmedMongos._remote_exec  s  € ô ×&Ñ&¬¯©Õ6ˆØ—W‘W¼uÀR¼yÓI¹y¸!œgŸnšn¨WÖ5¹yÑIÓJˆ
Ø" 8 *¨A¨j¨\¸Ð>ˆä—K’KØˆj˜ T F¨!¨C¨5ð 1Ø"�| 1 S Eð *Ø"˜e ?°;°-¸rðCó
ˆ	ô 	�Š�y¯©Ó(9ÀÕGð ˆj˜	 $  q¨¨ð .Ø&˜- w¨{¨m¸1ð>ð 	ð
 	×ÑØØ #˜u A h ZÐ0ð 	ö 	
ùò' Js   ¾C)c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r-   Únsrs   )r1   Úbool)r2   r3   s   "€r   r4   r5   '  s   ø€ ÷ >ñ >©ð >¹ñ >r   c                ó0  € V P                    R V 2pRpV P                  V4      pV P                  R,          pV P                  R,          pV P                  4       pV P                  P	                  4        FO  p	V FF  p
V RV
 RV	 2p\
        P                  ! VRR7       V RV R	V
 R
V	 R	V 2	pV P                  V4       KH  	  KQ  	  V F•  p
V'       d   V P                  V RV
 RV R2.4       MV P                  V RV
 RV R2.4       V P                  V RV
 RV R2V RV
 RV R2V RV
 RV R2V RV
 RV R2.4       V P                  V RV
 RV 2.4       K—  	  V P                  R4      '       g   R# V P                  4       w  rÞV'       d	   V'       g   R# V P                  V\        P                  4      pRpV FN  p
V P                  W4V
4      pV'       g   K  V P                    F  w  ppV P#                  VVV
VVVVVR7       K!  	  KP  	  R# )r®   Úmongosr#   r"   z/pods/Ú/T)Úexist_okz cp -c rj   Ú:rx   ry   rt   ru   rv   rw   r$   NÚmongosh)re   rf   rg   r´   rµ   r¶   r·   r¸   )re   r±   rW   Úget_cmd_output_pathÚvaluesr9   Úmakedirsrm   r€   r   rH   rO   rƒ   r   r   rp   r„   rÏ   )r=   rÒ   rs   re   Úmongodb_contr°   Ú	logs_pathr_   Údump_files_pathr:   rg   Úname_prefixÚcopy_cmdrM   rN   rˆ   r‰   r…   rŠ   r|   s   &&&                 r   Ú_collect_per_namespaceÚ$CharmedMongos._collect_per_namespace'  so  € Ø—m‘m�_ D¨¨Ð-ˆàˆØ×"Ñ" 2Ó&ˆØ—O‘O NÕ3ˆ	Ø—O‘O NÕ3ˆ	ð ×2Ñ2Ó4ˆØ—O‘O×*Ñ*Ö,ˆDÛ�Ø!0Ð 1°¸°u¸A¸d¸VÐD�Ü—’˜K°$Õ7à�j ¨ ~°QØ�e˜1˜T˜F ! K =ð2ð ð —‘˜hÖ'ó ñ -ó ˆCßØ×"Ñ" Ð&7°q¸¸¸Q¸y¸kÈÐ$LÐ#MÕNà×"Ñ"Ø'Ð(¨¨#¨¨a°	¨{¸&ÐAÐBôð ×#Ñ#à&Ð' v¨c¨U°!°I°;¸fÐEØ&Ð' v¨c¨U°!°I°;¸fÐEØ&Ð' v¨c¨U°!°I°;¸hÐGØ&Ð' v¨c¨U°!°I°;¸lÐKð	ôð ×Ñ ?Ð"3°6¸#¸¸aÀ	¸{Ð KÐLÖMñ! ð$ �‰˜y×)Ò)Ùà×3Ñ3Ó5ÑˆßŸgÙà—_‘_ W¬i¯m©mÓ<ˆ
ØˆãˆCØ×*Ñ*¨8À3ÓGˆIßÙØ-1×-AÔ-AÑ)�Ð)Ø×!Ñ!Ø%Ø%ØØ*Ø"Ø$ØØ-ð "ö 	ó .Bó	 r   c                ó�   € V P                  R 4      ;'       g    RpV P                  4       pV F  pV P                  W14       K  	  R# )rs   FN)rH   rª   râ   )r=   rs   r©   r¯   s   &   r   Ú_process_k8sÚCharmedMongos._process_k8sg  s>   € Ø—?‘? :Ó.×7Ð7°%ˆØ×/Ñ/Ó1ˆ
Û#ˆIØ×'Ñ'¨	Ö<ó $r   c                ó   <€ V ^8„  d   QhRR/# )r-   rD   Nr   )r2   r3   s   "€r   r4   r5   m  s   ø€ ÷  ñ  �tñ  r   c                óØ   € V P                  V P                  4      '       d   V P                  4        \        V P                  V P
                  4      '       d   V P                  4        R # R # r7   )Úis_installedÚsnap_packager‹   r   re   Úsysrootrå   )r=   s   &r   ÚsetupÚCharmedMongos.setupm  sK   € Ø×Ñ˜T×.Ñ.×/Ò/Ø×ÑÔ ä˜Ÿ™¨¯©×5Ò5Ø×ÑÖñ 6r   c                óî  € V P                  V P                  4      '       d*   \        P                  pV P	                  4       '       g   R # M\        P
                  pV P                  R,          pV\        P                  8X  d   V P                  V P                  V4      pM>V P                  4        RV 2p\        P                  ! V P                  4        R2RR7       V P                  V R2RRR	7       R # )
Nr"   z/pods/*/z/podsT)Úignore_errorsrx   z("queryPassword": ")[^"]*"z\1*********)ÚregexpÚsubst)ré   rê   r   r   rb   r   rW   r@   rX   rÚ   ÚshutilÚrmtreeÚdo_path_regex_sub)r=   rŽ   r†   s   &  r   ÚpostprocÚCharmedMongos.postproct  sØ   € Ø×Ñ˜T×.Ñ.×/Ò/Ü!Ÿ™ˆIØ×$Ñ$×&Ò&áð 'ô "Ÿ™ˆIà—O‘O NÕ3ˆ	Øœ	Ÿ™Ô$Ø×,Ñ,¨T×-CÑ-CÀYÓO‰Ià×3Ñ3Ó5Ð6°h¸y¸kÐJˆIÜ�MŠMØ×+Ñ+Ó-Ð.¨eÐ4Ø"õð 	×ÑØˆk˜ÐØ0Ø ð 	ö 	
r   c                óP   <€ V ^8„  d   Qh/ S[ S[ S[S[3,          R3,          ;R&   # )r-   .r„   )r
   r1   )r2   r3   s   "€r   r4   r5      s(   ø‡ ‚ ñd ™5¡¡c �?¨CÐ/Õ0ñ 
òe r   r   N)r    )rÕ   ))z"EJSON.stringify(db.serverStatus())zserver_status.txt)zEJSON.stringify(db.getUsers())zdb_users.txt)zEJSON.stringify(db.getRoles())zdb_roles.txt)z4EJSON.stringify(db.adminCommand({listDatabases: 1}))zdb_databases.txt)zEJSON.stringify(sh.status())zshard_cluster_status.txt)z EJSON.stringify(sh.listShards())zshard_shards.txt)$r   r   r   r   Ú__doc__Ú
short_descÚplugin_nameÚpackagesÚ
containersrê   r~   rX   re   r¥   rW   r   rÓ   r1   Úoption_listr„   r@   rO   rb   rp   r‹   rƒ   rª   r±   rÏ   râ   rå   rì   rõ   Ú__annotate_func__r   Ú__classdictcell__)r3   s   @r   r   r      s!  ø‡ € ñð "€JØ"€Kð $€HØ€Jà$€LØ9ÐØ;Ðà€HØ2€Hð 	˜ØÐ*ð€Jñ 	ØØØØ:ô		
ñ 	ØØØØ8ô		
ñ 	ØØØØ8ô		
ð€Kð*
4€O÷5ð 5÷ ð  ÷8	ð 	÷>ð >ò 9÷vHð H÷<ð ÷ð ÷"
ð "
÷H>ð >ò@=÷ ð  ò
÷k
 ƒ r   r   )Úenumr   rÆ   rò   rÄ   r¿   rÇ   Úurllib.parser   r   r   r9   Úpathlibr   Útypingr   r	   r
   rZ   Úsos.report.pluginsr   r   r   Úsos.utilitiesr   r   r   r   r   r   Ú<module>r     sS   ðõ Û Û Û Û Û ß 5Ñ 5Û 	Ý ß (Ñ (ã ç >Ñ >Ý 'ô�ô ô
m
�F˜Lö m
r   