+
    ˜qgjÈ&  ã                   ó>  € ^ RI t ^ RIt^ RIt^ RIHtHt ^ RIHtHtHtH	t	H
t
Ht ^ RIHtHt ^ RIHt RR R lltR R	 ltR
 R ltR R ltR R ltR R ltR R ltR R lt]R8X  d2   ]! 4       t]P7                  4       t]P:                  w  tt]! ]]4       R# R# )é    N)ÚdatetimeÚtimezone)ÚIOÚDictÚListÚOptionalÚTupleÚUnion)ÚdumpÚshow)Ú
json_dumpsc                ón   € V ^8„  d   QhR\         \        P                  ,          R\        P                  /# )é   ÚparserÚreturn)r   ÚargparseÚArgumentParser)Úformats   "Ú</usr/lib/python3/dist-packages/cloudinit/analyze/__init__.pyÚ__annotate__r      s1   € ÷ dñ dÜ”X×,Ñ,Õ-ðdä×Ññdó    c           	      óp  € V '       g   \         P                  ! R RR7      p V P                  RRR7      pRVn        VP	                  RRR	7      pVP                  R
RRRRRR7       VP                  RRRRRRR7       VP                  R\        3R7       VP	                  RRR	7      pVP                  RRRRRRR7       VP                  R
RRRRRR7       VP                  RRRRRRR7       VP                  R\        3R7       VP	                  RR R	7      pVP                  R
RRRRR!R7       VP                  RRRRRRR7       VP                  R\        3R7       VP	                  R"R#R	7      pVP                  R
RRRRR!R7       VP                  RRRRRRR7       VP                  R"\        3R7       V # )$zcloudinit-analyzez,Devel tool: Analyze cloud-init logs and data)ÚprogÚdescriptionÚSubcommandsÚ
subcommand)ÚtitleÚdestTÚblamez5Print list of executed stages ordered by time to init)Úhelpz-iz--infileÚstoreÚinfilez/var/log/cloud-init.logzspecify where to read input.)Úactionr   Údefaultr    z-oz	--outfileÚoutfileÚ-zspecify where to write output. )r#   r   z.Print list of in-order events during executionz-fz--formatÚprint_formatz%I%D @%Es +%dszspecify formatting of output.zspecify where to write output.r   z%Dump cloud-init events in JSON formatzspecify where to read input. Úbootz2Print list of boot times for kernel and cloud-init)r   r   Úadd_subparsersÚrequiredÚ
add_parserÚadd_argumentÚset_defaultsÚanalyze_blameÚanalyze_showÚanalyze_dumpÚanalyze_boot)r   Ú
subparsersÚparser_blameÚparser_showÚparser_dumpÚparser_boots   &     r   Ú
get_parserr7      sl  € ÷ Ü×(Ò(Ø$ØFô
ˆð ×&Ñ&¨]ÀÐ&ÓN€JØ€JÔà×(Ñ(ØÐMð )ó €Lð ×ÑØØØØØ)Ø+ð ô ð ×ÑØØØØØØ.ð ô ð ×Ñ g¬}Ð%=ÐÔ>à×'Ñ'ØÐEð (ó €Kð ×ÑØØØØØ Ø,ð ô ð ×ÑØØØØØ)Ø+ð ô ð ×ÑØØØØØØ-ð ô ð ×Ñ V¬\Ð$:ÐÔ;Ø×'Ñ'ØÐ<ð (ó €Kð ×ÑØØØØØ)Ø,ð ô ð ×ÑØØØØØØ.ð ô ð ×Ñ V¬\Ð$:ÐÔ;Ø×'Ñ'ØÐIð (ó €Kð ×ÑØØØØØ)Ø,ð ô ð ×ÑØØØØØØ-ð ô ð ×Ñ V¬\Ð$:ÐÔ;Ø€Mr   c                óP   € V ^8„  d   QhR\         R\        P                  R\        /# )r   ÚnameÚargsr   )Ústrr   Ú	NamespaceÚint)r   s   "r   r   r   v   s,   € ÷ T5ñ T5”sð T5¤(×"4Ñ"4ð T5¼ñ T5r   c                óÐ  € \        V4      w  r#\        P                  ! 4       pVw  rVrx\        P                  ! V\
        P                  4      p	\        P                  ! V\
        P                  4      p
\        P                  ! V\
        P                  4      p \        V4       Uu. uF.  pVR,          R8X  g   K  R\        VR,          4      9   g   K,  VNK0  	  upR,          p\        P                  ! \        VR,          4      \
        P                  4      pRpRpR	p\        P                  V\        P                  V\        P                  V/pWv,
          pW‡,
          pR
V	RV
RVRVRVRVRVRVRV/	pVP                  VV,          P                  ! R/ VB 4       \!        W#4       V\        P                  8X  d   ^# ^ # u upi   \         d    Rp\        P                  p LÌi ; i)ag  Report a list of how long different boot operations took.

For Example:
-- Most Recent Boot Record --
    Kernel Started at: <time>
    Kernel ended boot at: <time>
    Kernel time to boot (seconds): <time>
    Cloud-init activated by systemd at: <time>
    Time between Kernel end boot and Cloud-init activation (seconds):<time>
    Cloud-init start: <time>
r9   z
init-localzstarting searchr   Ú	timestampz4Could not find init-local log-line in cloud-init.logzîYour Linux distro or container does not support this functionality.
You must be running a Kernel Telemetry supported distro.
Please check https://docs.cloud-init.io/en/latest/topics/analyze.html for more information on supported distros.
a*  -- Most Recent Boot Record --
    Kernel Started at: {k_s_t}
    Kernel ended boot at: {k_e_t}
    Kernel time to boot (seconds): {k_r}
    Cloud-init activated by systemd at: {ci_sysd_t}
    Time between Kernel end boot and Cloud-init activation (seconds): {bt_r}
    Cloud-init start: {ci_start}
zŸ-- Most Recent Container Boot Record --
    Container started at: {k_s_t}
    Cloud-init activated by systemd at: {ci_sysd_t}
    Cloud-init start: {ci_start}
Úk_s_tÚk_e_tÚk_rÚbt_rÚk_eÚk_sÚci_sysdÚ	ci_sysd_tÚci_startéÿÿÿÿ© )Úconfigure_ior   Údist_check_timestampr   Úfromtimestampr   ÚutcÚ_get_eventsr;   ÚfloatÚ
IndexErrorÚ	FAIL_CODEÚCONTAINER_CODEÚSUCCESS_CODEÚwriter   Úclean_io)r9   r:   ÚinfhÚoutfhÚkernel_infoÚstatus_codeÚkernel_startÚ
kernel_endÚci_sysd_startÚkernel_start_timestampÚkernel_end_timestampÚci_sysd_start_timestampÚeÚlast_init_localrH   ÚFAILURE_MSGÚSUCCESS_MSGÚCONTAINER_MSGÚ
status_mapÚkernel_runtimeÚbetween_process_runtimeÚkwargss   &&                    r   r1   r1   v   sæ  € ô ˜tÓ$�K€DÜ×+Ò+Ó-€KØ;FÑ8€K˜zÜ%×3Ò3°LÄ(Ç,Á,ÓOÐÜ#×1Ò1°*¼h¿l¹lÓKÐÜ&×4Ò4Ø”x—|‘|óÐð%ô ! Ô&ó
á&�Ø��y˜LÑ(ô ð "¤S¨¨=Õ)9Ó%:Ñ:÷ ˆAÙ&ñ
ð
 õˆô *2×)?Ò)?Ü�/ +Õ.Ó/´·±ó*
ˆð	.ð ð	-ð ð	-ð ô 	�‰˜Ü×Ñ˜]Ü×Ñ˜;ð€Jð  Õ.€NØ+Õ8Ðð 	Ð'ØÐ%Øˆ~ØÐ'ØˆzØˆ|Ø�=ØÐ,Ø�Hð
€Fð 
‡K�K�
˜;Õ'×.Ò.Ñ8°Ñ8Ô9ÜˆTÔØœtŸ~™~Ô-ˆ1Ð4°1Ð4ùò
øô ô %ØIˆÜ—n‘nŠð%ús0   ÂG Â%G Â:G ÃG Ã?G Ç G ÇG%Ç$G%c                ó<   € V ^8„  d   QhR\         P                  RR/# ©r   r:   r   N©r   r<   )r   s   "r   r   r   Í   s    € ÷ ñ œh×0Ñ0ð °Tñ r   c                ó  € \        V4      w  r#Rp\        P                  ! R\        P                  4      p^ p\	        \
        P                  ! \        V4      V4      4       F}  w  rg\        \        VP                  V4      RR7      pVP                  RV^,           ,          4       VP                  RP                  V4      R,           4       VP                  R4       K  	  VP                  RV^,           ,          4       \        W#4       R# )	aZ  Report a list of records sorted by largest time delta.

For example:
  30.210s (init-local) searching for datasource
   8.706s (init-network) reading and applying user-data
    166ms (modules-config) ....
    807us (modules-final) ...

We generate event records parsing cloud-init logs, formatting the output
and sorting by record data ('delta')
z     %ds (%n)z(^\s+\d+\.\d+)T)Úreverseú-- Boot Record %02d --
Ú
ú%d boot records analyzed
N)rK   ÚreÚcompileÚ	MULTILINEÚ	enumerater   Úshow_eventsrO   ÚsortedÚfilterÚmatchrU   ÚjoinrV   )	r9   r:   rW   rX   Úblame_formatÚrÚidxÚrecordÚsrecss	   &&       r   r.   r.   Í   sÊ   € ô ˜tÓ$�K€DØ"€LÜ
�
Š
Ð$¤b§l¡lÓ3€AØ
€CÜ Ü×Òœ TÓ*¨LÓ9ö‰ˆô ”v˜aŸg™g vÓ.¸Ô=ˆØ�‰Ð.°#¸µ'Õ:Ô;Ø�‰�D—I‘I˜eÓ$ tÕ+Ô,Ø�‰�DÖñð 
‡K�KÐ,°°aµÕ8Ô9ÜˆTÖr   c                ó<   € V ^8„  d   QhR\         P                  RR/# rk   rl   )r   s   "r   r   r   è   s    € ÷ "ñ "œX×/Ñ/ð "°Dñ "r   c                ó¼  € \        V4      w  r#\        \        P                  ! \	        V4      VP
                  4      4       Fm  w  rEVP                  RV^,           ,          4       VP                  R4       VP                  R4       VP                  RP                  V4      R,           4       Ko  	  VP                  RX^,           ,          4       \        W#4       R# )aä  Generate output records using the 'standard' format to printing events.

Example output follows:
    Starting stage: (init-local)
      ...
    Finished stage: (init-local) 0.105195 seconds

    Starting stage: (init-network)
      ...
    Finished stage: (init-network) 0.339024 seconds

    Starting stage: (modules-config)
      ...
    Finished stage: (modules-config) 0.NNN seconds

    Starting stage: (modules-final)
      ...
    Finished stage: (modules-final) 0.NNN seconds
ro   zUThe total time elapsed since completing an event is printed after the "@" character.
z>The time the event takes is printed after the "+" character.

rp   rq   N)	rK   ru   r   rv   rO   r'   rU   rz   rV   )r9   r:   rW   rX   r}   r~   s   &&    r   r/   r/   è   s²   € ô( ˜tÓ$�K€DÜ Ü×Òœ TÓ*¨D×,=Ñ,=Ó>ö‰ˆð 	�‰Ð.°#¸µ'Õ:Ô;Ø�‰ð2ô	
ð 	�‰ØNô	
ð 	�‰�D—I‘I˜fÓ%¨Õ,Ö-ñð 
‡K�KÐ,°°aµÕ8Ô9ÜˆTÖr   c                ó<   € V ^8„  d   QhR\         P                  RR/# rk   rl   )r   s   "r   r   r     s    € ÷ ñ œX×/Ñ/ð °Dñ r   c                óŠ   € \        V4      w  r#VP                  \        \        V4      4      R,           4       \	        W#4       R# )z%Dump cloud-init events in json formatrp   N)rK   rU   r   rO   rV   )r9   r:   rW   rX   s   &&  r   r0   r0     s1   € ä˜tÓ$�K€DØ	‡K�K”
œ; tÓ,Ó-°Õ4Ô5ÜˆTÖr   c          	      óŠ   € V ^8„  d   QhR\         R\        \        \        \        \        \
        3,          3,          ,          /# )r   r"   r   )r   r   r   r;   r
   rP   )r   s   "r   r   r     s2   € ÷ ñ œð œt¤D¬¬e´C¼°JÕ.?Ð)?Õ$@ÕAñ r   c                 ó|   € R p\         P                  ! V 4      w  r!V'       g   \        P                  ! VR7      w  r#V# )N)Úrawdata)r   Úload_events_infiler   Údump_events)r"   r†   ÚeventsÚ_s   &   r   rO   rO     s3   € Ø€GÜ×-Ò-¨fÓ5�O€FßÜ×$Ò$¨WÔ5‰	ˆØ€Mr   c                óf   € V ^8„  d   QhR\         P                  R\        \        \        3,          /# )r   r:   r   )r   r<   r	   r   )r   s   "r   r   r     s(   € ÷ ñ ”x×)Ñ)ð ¬e´B¼°F­mñ r   c                óV  € V P                   R8X  d   \        P                  pM \        V P                   R4      pV P                  R8X  d   \        P                  pXV3#  \        V P                  R4      pXV3#   \         dJ    \        P
                  P                  RT P                   ,          4       \        P                  ! ^4        L“i ; i  \         dM    \        P
                  P                  RT P                  ,          4       \        P                  ! ^4        XX3# i ; i)z.Common parsing and setup of input/output filesr&   r|   zCannot open file %s
Úw)
r"   ÚsysÚstdinÚopenÚOSErrorÚstderrrU   Úexitr%   Ústdout)r:   rW   rX   s   &  r   rK   rK     sé   € à‡{�{�cÔÜ�y‰y‰ð	Ü˜Ÿ™ SÓ)ˆDð
 ‡|�|�sÔÜ—
‘
ˆð �ˆ;Ðð	Ü˜Ÿ™ sÓ+ˆEð
 �ˆ;Ðøô ô 	Ü�J‰J×ÑÐ4°t·{±{ÕBÔCÜ�HŠH�QŽKð	ûô ô 	Ü�J‰J×ÑÐ4°t·|±|ÕCÔDÜ�HŠH�Q�Kà�ˆ;Ðð		ús%   ¤A: Á C Á:ACÃCÃAD(Ä'D(c                ó(   € V ^8„  d   QhR\         RR/# )r   Úfile_handlesr   N)r   )r   s   "r   r   r   3  s   € ÷ ñ œBð  4ñ r   c                 ó†   € V  F:  pV\         P                  \         P                  39   d   K*  VP                  4        K<  	  R# )zclose filehandlesN)rŽ   r�   r”   Úclose)r–   Úfile_handles   * r   rV   rV   3  s0   € ã#ˆØœ3Ÿ9™9¤c§j¡jÐ1Ô1ÙØ×ÑÖó $r   Ú__main__)N) r   rr   rŽ   r   r   Útypingr   r   r   r   r	   r
   Úcloudinit.analyzer   r   Úcloudinit.atomic_helperr   r7   r1   r.   r/   r0   rO   rK   rV   Ú__name__r   Ú
parse_argsr:   r#   r9   Úaction_functorrJ   r   r   Ú<module>r¡      sˆ   ðó
 Û 	Û 
ß 'ß 9× 9ç (Ý .÷dõNT5õnõ6"õJõõõ.ð ˆzÔÙ‹\€FØ×ÑÓ€DØ!Ÿ[™[Ñ€Tˆ>Ù�4˜Öñ	 r   