+
    Û1jT  ã                   óf   € ^ RI Ht ^ RIHtHtHt ^ RIHtHtHt ^ RI	H
t
HtHt  ! R R]
]4      tR# )é    )ÚOptional)ÚdatetimeÚ	timedeltaÚtimezone)ÚJSONDecodeErrorÚdumpsÚloads)ÚPluginÚIndependentPluginÚ	PluginOptc                   óê   a € ] tR t^t o RtRtRtRtRt^dt	R t
]! RRRR7      ]! R	RR
R7      ]! RRRR7      ]! RR]RR7      ]! RR]RR7      .tV 3R lR ltV 3R lR ltR tR tR tR tR tRtV tR# )!ÚLokiaÚ  
Collects logs and configuration from Loki.

This plugin interacts with the Loki API to fetch logs based on specified
labels and provides options for pagination and label detection.
It also collects relevant configuration files and masks sensitive
information. It works with both charmed and non-charmed Loki.
To fetch internal Loki logs, run it from the Loki container.
You can also run it from another machine and fetch only logs from
Loki API, by providing the following parameters:
    `-k loki.collect-logs=true -k loki.endpoint=LOKI_URL`

Usage:
    sos report -o loki -k loki.collect-logs=true             -k loki.labels=severity:charm -k loki.detect-labels=true             -k loki.paginate=true -k loki.endpoint=LOKI_URL
zLoki serviceÚlokiiˆ  úcollect-logsFzcollect logs from Loki API)ÚdefaultÚdescúdetect-labelszTfetch logs for all available labels. May result in multiple files with the same logsÚpaginatez'fetch all available logs from Loki API.ÚlabelsÚ z1colon-delimited list of labels to fetch logs from)r   Úval_typer   Úendpointúhttp://localhost:3100zDloki endpoint to fetch logs from. Defaults to http://localhost:3100.c                óF   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          /# ©é   ÚstartÚend©r   r   )ÚformatÚ__classdict__s   "€Ú9/usr/lib/python3/dist-packages/sos/report/plugins/loki.pyÚ__annotate__ÚLoki.__annotate__<   s&   ø€ ÷ ñ ±H¹XÕ4Fð Ù#¡HÕ-ñó    c                ó  € V'       g%   \         P                  ! \        P                  4      pV'       g   V\	        ^R7      ,
          pVP                  R4      pVP                  R4      pRV RV RV RV R\        P                   R2pV# )	é   )Údaysz%Y-%m-%dT%H:%M:%S.%fZúcurl -G -s 'z3/loki/api/v1/query_range' --data-urlencode 'query={z!=~".+"}' --data-urlencode 'start=z' --data-urlencode 'end=z' --data-urlencode 'limit=z' )r   Únowr   Úutcr   Ústrftimer   ÚLOKI_QUERY_LIMIT)Úselfr   Úlabelr   r   Ústart_formattedÚend_formattedÚcommands   &&&&&   r"   Úquery_commandÚLoki.query_command<   s”   € çÜ—,’,œxŸ|™|Ó,ˆCßØœ)¨Ô+Õ+ˆEàŸ.™.Ð)@ÓAˆØŸ™Ð%<Ó=ˆð ˜8˜*ð %)Ø).¨ð 0'Ø'6Ð&7ð 8%Ø%2 Oð 4'Ü'+×'<Ñ'<Ð&=¸Rð	Að 	ð ˆr%   c                óF   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          /# r   r   )r    r!   s   "€r"   r#   r$   O   s&   ø€ ÷ 
$ñ 
$©x¹Õ/Að 
$Ù™xÕ(ñ
$r%   c                óÈ   € V P                  V P                  WW44      4      p \        VR ,          4      #   \         d"    T P	                  RT R24       TR ,          u # i ; i)Úoutputz-An error was returned from Loki API on label z-. Error message stored, not querying further.)Úexec_cmdr3   r	   r   Ú	_log_warn)r.   r   r/   r   r   r7   s   &&&&& r"   Úget_logsÚLoki.get_logsO   so   € à—‘˜t×1Ñ1°(À5ÓNÓOˆð	$Ü˜ Õ)Ó*Ð*øÜô 	$à�N‰NÐKØ$˜gð &JðKô Mð ˜(Õ#Ò#ð	$ús   £5 µ)A!Á A!c                óø   € VR ,          R,          p\        \        P                  ! 4       P                  4       R,          4      pV F0  pVR,           F   p\        V^ ,          4      p\	        W64      pK"  	  K2  	  V# )ÚdataÚresulté Êš;Úvalues)Úintr   r*   Ú	timestampÚmin)r.   ÚlogsÚlog_streamsÚearliest_logÚstreamÚlogrB   s   &&     r"   Úget_earliest_log_timestampÚLoki.get_earliest_log_timestamp[   si   € Ø˜6•l 8Õ,ˆäœ8Ÿ<š<›>×3Ñ3Ó5°mÕCÓDˆÛ!ˆFØ˜h×'Ð'�Ü  A¥›K�	Ü" <Ó;’ó (ñ "ð Ðr%   c           	     óZ  € V P                  WR R 4      pV P                  V R24      ;_uu_ 4       pVP                  \        V^R7      4       R R R 4       \	        V\
        4      '       d   R # V'       Ed   V P                  V4      p\        \        P                  ! 4       P                  4       R,          4      p^ pV\        P                  8  d²   Wg8  dª   \        P                  ! VR,          4      p	V P                  WR V	4      p
V P                  V RV 24      ;_uu_ 4       pVP                  \        V
^R7      4       R R R 4       \	        V
\
        4      '       d   R # TpV P                  V
4      pV^,          pKÄ  R # R # R #   + '       g   i     ELB; i  + '       g   i     L`; i)Nz.log)Úindentr?   z.log.)r:   Úcollection_fileÚwriter   Ú
isinstanceÚstrrI   rA   r   r*   rB   r   ÚMAX_PAGINATION_ITERATIONSÚfromtimestamp)r.   r   r/   r   rD   ÚlogfilerF   Úprevious_earliest_logÚiterations_countÚlog_timestampÚnew_logss   &&&&       r"   Úget_logs_for_labelÚLoki.get_logs_for_labele   sk  € Ø�}‰}˜X¨d°DÓ9ˆØ×!Ñ! U G¨4 .×1Ô1°WØ�M‰Mœ% ¨QÔ/Ô0÷ 2ä�dœC× Ò áçˆ8Ø×:Ñ:¸4Ó@ˆLÜ$'Ü—’“×(Ñ(Ó*¨=Õ8ó%Ð!ð  !ÐØ"¤T×%CÑ%CÔCØ Ô8Ü (× 6Ò 6Ø$0°=Õ$@ó!B�àŸ=™=¨¸$ÀÓN�Ø×)Ñ)¨U¨G°5Ð9IÐ8JÐ*K×LÔLØ"Ø—M‘M¤%¨¸Ô";Ô<÷ Mô ˜h¬×,Ò,áØ(4Ð%à×3Ñ3°HÓ=ð ð ! AÕ%Ò ñ 9ñ Dñ ÷ 2×1Ð1ú÷" M×Lús   °FÄ%FÆF	ÆF*	c                óÎ  € V P                  R 4      pV P                  V4       V P                  R4      pV P                  V4       V P                  R4       V P                  R4       V P                  R4      '       dè   V P                  R4      ;'       g    Rp. V n        V P                  R4      ;p'       dI   \        V\        4      '       d3   V'       d+   V P                  P                  VP                  R4      4       V P                  R	4      '       dL   V P                  R
V R24      p\        VR,          4      pV P                  P                  VR,          4       R# R# R# )z/etc/loki/*.yamlz/etc/worker/*.yamlz/var/log/loki/*zpebble logs loki -n 10000r   r   r   r   Ú:r   r)   z/loki/api/v1/labels'r7   r=   N)Ú	path_joinÚadd_copy_specÚadd_cmd_outputÚ
get_optionr   rO   rP   ÚextendÚsplitÚcollect_cmd_outputr	   )r.   Úels_config_fileÚcoordinated_workers_config_filer   Úlabels_optionÚ
labels_cmdÚlabels_jsons   &      r"   ÚsetupÚ
Loki.setup„   s)  € ØŸ.™.Ð);Ó<ˆØ×Ñ˜?Ô+ð +/¯.©.Ð9MÓ*NÐ'Ø×ÑÐ:Ô;à×ÑÐ,Ô-Ø×ÑÐ7Ô8à�?‰?˜>×*Ò*Ø—‘ zÓ2×MÐMÐ6MˆHØˆDŒKØ $§¡°Ó 9Ð9ˆ}Ö9Ü˜m¬S×1Ò1·mØ—K‘K×&Ñ& }×':Ñ':¸3Ó'?Ô@à�‰˜×/Ò/Ø!×4Ñ4Ø" 8 *Ð,@ÐAó�
ô $ J¨xÕ$8Ó9�Ø—‘×"Ñ" ;¨vÕ#6Ö7ñ 0ñ +r%   c                ó¨   € V P                  R 4      ;'       g    RpV P                   F&  pV P                  R4      pV P                  WV4       K(  	  R# )r   r   r   N)r_   r   rX   )r.   r   r/   r   s   &   r"   ÚcollectÚLoki.collect�   sE   € Ø—?‘? :Ó.×IÐIÐ2IˆØ—[”[ˆEØ—‘ zÓ2ˆHØ×#Ñ# H°XÖ>ó !r%   c                óÄ   € R R.p. ROpRRP                  V4       R2pRRP                  V4       R2pV F'  pV P                  WSR4       V P                  WTR4       K)  	  R# )	Úaccess_key_idÚsecret_access_keyÚ(Ú|z)\s*(:|=)(\S*\n.*?\\n)z)\s*(:|=)\s*[a-zA-Z0-9]*z\1\2*********N)z /etc/loki/loki-local-config.yamlz/etc/loki/config.yamlz/etc/loki/local-config.yamlz/etc/loki/loki.yamlz/etc/worker/config.yaml)ÚjoinÚdo_file_sub)r.   Úprotect_keysÚ
loki_filesÚmatch_exp_multilÚ	match_expÚfiles   &     r"   ÚpostprocÚLoki.postproc£   s   € àØð
ˆò
ˆ
ð   §¡¨Ó 6Ð7Ð7MÐNÐØ˜Ÿ™ ,Ó/Ð0Ð0HÐIˆ	ãˆDØ×ÑØØ ôð ×ÑØØ öó r%   )r   N)Úservices)r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú
short_descÚplugin_nameÚprofilesr-   rQ   Úpackagesr   rP   Úoption_listr3   r:   rI   rX   rh   rk   ry   Ú__static_attributes__Ú__classdictcell__)r!   s   @r"   r   r      sÁ   ø‡ € ñð$  €JØ€KØ€HØÐØ #Ðà€Hñ 	�.¨%Ø3ô	5á�/¨5ðJô	Lñ 	�* eØ@ô	Bá�( B°ØJô	Lá�*Ð&=Èð=ô	?ð€K÷ð ÷&
$ð 
$òò&ò>8ò2?÷ð r%   r   N)Útypingr   r   r   r   Újsonr   r   r	   Úsos.report.pluginsr
   r   r   r   © r%   r"   Ú<module>rŒ      s-   ðõ ß 2Ñ 2ß .Ñ .ß CÑ Côiˆ6Ð$ö ir%   