Ë
    x[hZ%  ã                   óú   — d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ dd„Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zdeddfd„Zedk(  r0 e«       Zej-                  «       Zej0                  \  ZZ eee«       yy)é    N)ÚdatetimeÚtimezone)ÚIO)ÚdumpÚshow)Ú
json_dumpsc                 ób  — | st        j                  dd¬«      } | j                  dd¬«      }d|_        |j	                  dd	¬
«      }|j                  dddddd¬«       |j                  dddddd¬«       |j                  dt        f¬«       |j	                  dd¬
«      }|j                  dddddd¬«       |j                  dddddd¬«       |j                  dddddd¬«       |j                  dt        f¬«       |j	                  d d!¬
«      }|j                  dddddd"¬«       |j                  dddddd¬«       |j                  d t        f¬«       |j	                  d#d$¬
«      }|j                  dddddd"¬«       |j                  dddddd¬«       |j                  d#t        f¬«       | S )%Nz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)ÚargparseÚArgumentParserÚadd_subparsersÚrequiredÚ
add_parserÚadd_argumentÚset_defaultsÚanalyze_blameÚanalyze_showÚanalyze_dumpÚanalyze_boot)ÚparserÚ
subparsersÚparser_blameÚparser_showÚparser_dumpÚparser_boots         ú</usr/lib/python3/dist-packages/cloudinit/analyze/__init__.pyÚ
get_parserr,      sj  € ÙÜ×(Ñ(Ø$ØFô
ˆð ×&Ñ&¨]ÀÐ&ÓN€JØ€JÔà×(Ñ(ØÐMð )ó €Lð ×ÑØØØØØ)Ø+ð ô ð ×ÑØØØØØØ.ð ô ð ×Ñ g¬}Ð%=ÐÔ>à×'Ñ'ØÐEð (ó €Kð ×ÑØØØØØ Ø,ð ô ð ×ÑØØØØØ)Ø+ð ô ð ×ÑØØØØØØ-ð ô ð ×Ñ V¬\Ð$:ÐÔ;Ø×'Ñ'ØÐ<ð (ó €Kð ×ÑØØØØØ)Ø,ð ô ð ×ÑØØØØØØ.ð ô ð ×Ñ V¬\Ð$:ÐÔ;Ø×'Ñ'ØÐIð (ó €Kð ×ÑØØØØØ)Ø,ð ô ð ×ÑØØØØØØ-ð ô ð ×Ñ V¬\Ð$:ÐÔ;Ø€Mó    c           
      ó  — t        |«      \  }}t        j                  «       }|\  }}}}t        j                  |t
        j                  «      }	t        j                  |t
        j                  «      }
t        j                  |t
        j                  «      }	 t        |«      D �cg c]  }|d   dk(  r	d|d   v r|‘Œ c}d   }t        j                  |d   t
        j                  «      }d}d	}d
}t        j                  |t        j                  |t        j                  |i}||z
  }||z
  }|	|
|||||||dœ	}|j                   ||   j                  di |¤Ž«       t        ||«       |S c c}w # t        $ r d}t        j                  }Y Œ¢w xY w)a‹  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>
    Únamez
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_eventsÚ
IndexErrorÚ	FAIL_CODEÚCONTAINER_CODEÚSUCCESS_CODEÚwriteÚformatÚclean_io)r/   ÚargsÚ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_localr:   ÚFAILURE_MSGÚSUCCESS_MSGÚCONTAINER_MSGÚ
status_mapÚkernel_runtimeÚbetween_process_runtimeÚkwargss                         r+   r$   r$   t   s·  € ô ˜tÓ$�K€Dˆ%Ü×+Ñ+Ó-€KØ;FÑ8€K�˜z¨=Ü%×3Ñ3°LÄ(Ç,Á,ÓOÐÜ#×1Ñ1°*¼h¿l¹lÓKÐÜ&×4Ñ4Ø”x—|‘|óÐð%ô ! Ó&ö
àØ�‰y˜LÒ(Ø! Q }Ñ%5Ñ5ò ò
ð
 ñˆô ×)Ñ)Ø˜KÑ(¬(¯,©,ó
ˆð	.ð ð	-ð ð	-ð ô 	�‰˜Ü×Ñ˜]Ü×Ñ˜;ð€Jð   ,Ñ.€NØ+¨jÑ8Ðð (Ø%ØØ'ØØØ Ø,Øñ
€Fð 
‡K�KÐ.�
˜;Ñ'×.Ñ.Ñ8°Ñ8Ô9ÜˆT�5ÔØÐùò
øô ò %ØIˆÜ—n‘nŠð%ús$   ÂE. Â$E)Â<-E. Å)E. Å.FÆFc                 óî  — t        |«      \  }}d}t        j                  dt        j                  «      }d}t	        t        j                  t        |«      |«      «      D ]q  \  }}t        t        |j                  |«      d¬«      }|j                  d|dz   z  «       |j                  dj                  |«      dz   «       |j                  d«       Œs |j                  d	|dz   z  «       t        ||«       y
)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+)r   T)Úreverseú-- Boot Record %02d --
é   ú
ú%d boot records analyzed
N)r<   ÚreÚcompileÚ	MULTILINEÚ	enumerater   Úshow_eventsr@   ÚsortedÚfilterÚmatchrE   ÚjoinrG   )	r/   rH   rI   rJ   Úblame_formatÚrÚidxÚrecordÚsrecss	            r+   r!   r!   Ë   sÕ   € ô ˜tÓ$�K€Dˆ%Ø"€LÜ
�
‰
Ð$¤b§l¡lÓ3€AØ
€CÜ Ü×Ñœ TÓ*¨LÓ9óò ‰ˆˆVô ”v˜aŸg™g vÓ.¸Ô=ˆØ�‰Ð.°#¸±'Ñ:Ô;Ø�‰�D—I‘I˜eÓ$ tÑ+Ô,Ø�‰�DÕðð 
‡K�KÐ,°°a±Ñ8Ô9ÜˆT�5Õr-   c                 ó’  — t        |«      \  }}t        t        j                  t	        |«      |j
                  «      «      D ]a  \  }}|j                  d|dz   z  «       |j                  d«       |j                  d«       |j                  dj                  |«      dz   «       Œc |j                  ddz   z  «       t        ||«       y)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
    r^   r_   zUThe total time elapsed since completing an event is printed after the "@" character.
z>The time the event takes is printed after the "+" character.

r`   ra   N)	r<   re   r   rf   r@   r   rE   rj   rG   )r/   rH   rI   rJ   rm   rn   s         r+   r"   r"   æ   s½   € ô( ˜tÓ$�K€Dˆ%Ü Ü×Ñœ TÓ*¨D×,=Ñ,=Ó>óò .‰ˆˆVð 	�‰Ð.°#¸±'Ñ:Ô;Ø�‰ð2ô	
ð 	�‰ØNô	
ð 	�‰�D—I‘I˜fÓ%¨Ñ,Õ-ð.ð 
‡K�KÐ,°°a±Ñ8Ô9ÜˆT�5Õr-   c                 ó„   — t        |«      \  }}|j                  t        t        |«      «      dz   «       t	        ||«       y)z%Dump cloud-init events in json formatr`   N)r<   rE   r   r@   rG   )r/   rH   rI   rJ   s       r+   r#   r#     s5   € ä˜tÓ$�K€Dˆ%Ø	‡K�K”
œ; tÓ,Ó-°Ñ4Ô5ÜˆT�5Õr-   c                 óp   — d }t        j                  | «      \  }}|st        j                  |¬«      \  }}|S )N)Úrawdata)r   Úload_events_infiler   Údump_events)r   rs   ÚeventsÚ_s       r+   r@   r@     s7   € Ø€GÜ×-Ñ-¨fÓ5�O€FˆGÙÜ×$Ñ$¨WÔ5‰	ˆ�Ø€Mr-   c                 ó2  — | j                   dk(  rt        j                  }n	 t        | j                   d«      }| j                  dk(  rt        j                  }|fS 	 t        | j                  d«      }|fS # t        $ rD t        j
                  j                  d| j                   z  «       t        j                  d«       Y ŒŠw xY w# t        $ rG t        j
                  j                  d| j                  z  «       t        j                  d«       Y fS w xY w)z.Common parsing and setup of input/output filesr   rl   zCannot open file %s
r_   Úw)
r   ÚsysÚstdinÚopenÚOSErrorÚstderrrE   Úexitr   Ústdout)rH   rI   rJ   s      r+   r<   r<     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%   ¢A6 ÁC Á6A
CÃCÃA
DÄDÚfile_handlesÚreturnc                  óx   — | D ]5  }|t         j                  t         j                  fv rŒ&|j                  «        Œ7 y)zclose filehandlesN)rz   r{   r€   Úclose)r�   Úfile_handles     r+   rG   rG   1  s5   € à#ò ˆØœ3Ÿ9™9¤c§j¡jÐ1Ñ1ØØ×ÑÕñr-   Ú__main__)N)r   rb   rz   r   r   Útypingr   Úcloudinit.analyzer   r   Úcloudinit.atomic_helperr   r,   r$   r!   r"   r#   r@   r<   rG   Ú__name__r%   Ú
parse_argsrH   r   r/   Úaction_functorr;   r-   r+   ú<module>r�      s“   ðó
 Û 	Û 
ß 'Ý ç (Ý .óbòJTònò6"òJòòð.˜Bð  4ó ð ˆzÒÙ‹\€FØ×ÑÓ€DØ!Ÿ[™[Ñ€Tˆ>Ù�4˜Õð	 r-   