+
    ˜qgj+7  ã                   óŽ  € ^ RI t ^ RIt^ RIt^ RIt^ RIHtHt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RR	R
RRRRRRRRRRRRRRRR/tRtRtRt]R@R@R@3t]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, R- ltR. R/ lt R0 R1 lt! ! R2 R34      t"R4 R5 lt#R6 R7 lt$R8 R9 lt%RAR: R; llt&R< R= lt'R> R? lt(R# )Bé    N)ÚIOÚAnyÚDictÚListÚOptionalÚTupleÚUnionÚcast)ÚsubpÚutil)Úuses_systemdz%dÚdeltaz%DÚdescriptionz%EÚelapsedz%eÚ
event_typez%IÚindentz%lÚlevelz%nÚnamez%oÚoriginz%rÚresultz%tÚ	timestampz%TÚ
total_timeÚ
successfulÚfailureÚ	containerc                ó<   € V ^8„  d   QhR\         R\        R\         /# )é   ÚmsgÚeventÚreturn)ÚstrÚEvent)Úformats   "Ú8/usr/lib/python3/dist-packages/cloudinit/analyze/show.pyÚ__annotate__r%   9   s!   € ÷ ñ ”sð ¤5ð ¬Sñ ó    c                 óæ   € \         P                  4        FH  w  r#W 9   g   K  VR9   d   V P                  VRV,          4      p K/  V P                  VRV,          4      p KJ  	  V P                  ! R/ VB # )r   z
{%s:08.5f}z{%s})r   r   r   © )Ú
format_keyÚitemsÚreplacer#   )r   r   ÚiÚjs   &&  r$   Úformat_recordr.   9   sb   € Ü× Ñ Ö"‰ˆØŽ8àÐ5Ô5Ø—k‘k ! \°AÕ%5Ó6’à—k‘k ! V¨a¥ZÓ0’ñ #ð �:Š:Ñ˜ÑÐr&   c                ó\   € V ^8„  d   QhR\         \        ,          R\         \        ,          /# ©r   r   r    ©r   r"   r!   )r#   s   "r$   r%   r%   D   ó"   € ÷ ñ ”hœu•oð ¬(´3­-ñ r&   c                 ó8   € V '       d   V P                  R 4      # R# )r   N©Úget©r   s   &r$   Ú
event_namer7   D   s   € ßØ�y‰y˜Ó Ð Ùr&   c                ó\   € V ^8„  d   QhR\         \        ,          R\         \        ,          /# r0   r1   )r#   s   "r$   r%   r%   J   r2   r&   c                 ó8   € V '       d   V P                  R 4      # R# )r   Nr4   r6   s   &r$   r   r   J   s   € ßØ�y‰y˜Ó&Ð&Ùr&   c                ó\   € V ^8„  d   QhR\         \        ,          R\         \        ,          /# r0   r1   )r#   s   "r$   r%   r%   P   s"   € ÷ ñ œ¤�ð ¬H´S­Mñ r&   c                 ó\   € \        V 4      pV'       d   VP                  R 4      ^ ,          # R# )Ú/N)r7   Úsplit)r   r   s   & r$   Úevent_parentr>   P   s%   € Ü�eÓ€DßØ�z‰z˜#‹˜qÕ!Ð!Ùr&   c                ó0   € V ^8„  d   QhR\         R\        /# r0   ©r"   Úfloat)r#   s   "r$   r%   r%   W   s   € ÷ ñ œ5ð ¤Uñ r&   c                 óX   € V P                  R 4      pVf   \        R4      h\        V4      # )r   zEvent is missing a 'timestamp')r5   Ú
ValueErrorrA   )r   Útss   & r$   Úevent_timestamprE   W   s+   € Ø	�‰�;Ó	€BØ	‚zÜÐ9Ó:Ð:Ü�‹9Ðr&   c                óD   € V ^8„  d   QhR\         R\        P                  /# r0   )r"   Údatetime)r#   s   "r$   r%   r%   ^   s    € ÷ ñ œ%ð ¤H×$5Ñ$5ñ r&   c                 ó„   € \         P                   P                  \        V 4      \         P                  P                  4      # ©N)rG   ÚfromtimestamprE   ÚtimezoneÚutcr6   s   &r$   Úevent_datetimerM   ^   s1   € Ü×Ñ×*Ñ*Ü˜Ó¤× 1Ñ 1× 5Ñ 5óð r&   c                ód   € V ^8„  d   QhR\         P                   R\         P                   R\        /# )r   Út1Út2r    )rG   rA   )r#   s   "r$   r%   r%   d   s-   € ÷ %ñ %”h×'Ñ'ð %¬X×->Ñ->ð %Ä5ñ %r&   c                 ó.   € W,
          P                  4       # rI   )Útotal_seconds)rO   rP   s   &&r$   Údelta_secondsrS   d   s   € Ø�G×"Ñ"Ó$Ð$r&   c                ó<   € V ^8„  d   QhR\         R\         R\        /# )r   ÚstartÚfinishr    r@   )r#   s   "r$   r%   r%   h   s&   € ÷ Hñ Hœ%ð H¬ð H´5ñ Hr&   c                 ó>   € \        \        V 4      \        V4      4      # rI   )rS   rM   )rU   rV   s   &&r$   Úevent_durationrX   h   s   € Üœ¨Ó.´¸vÓ0FÓGÐGr&   c                ó\   € V ^8„  d   QhR\         P                   R\        R\        R\        /# )r   Ú
start_timerU   rV   r    )rG   r"   )r#   s   "r$   r%   r%   l   s6   € ÷ ñ Ü×!Ñ!ðäðô ðô ñ	r&   c                 ó  € VP                  4       p\        V4      pR pV'       d.   VRVP                  R4      ^,
          ,          R,           ,          pVP                  R\	        W4      R\        V \        V4      4      RV/4       V# )Ú|Ú r<   z`->r   r   r   )Úcopyr7   ÚcountÚupdaterX   rS   rM   )rZ   rU   rV   Úrecordr   r   s   &&&   r$   Úevent_recordrb   l   sz   € ð
 �[‰[‹]€FÜ�eÓ€DØ€FßØ�#˜Ÿ™ C›¨1Õ,Õ-°Õ5Õ5ˆØ
‡M�Mà”^ EÓ2Ø”} Z´ÀÓ1FÓGØ�fð	
ôð €Mr&   c                ó0   € V ^8„  d   QhR\         R\        /# )r   r   r    )rA   r!   )r#   s   "r$   r%   r%   �   s   € ÷ 6ñ 6¤%ð 6¬Cñ 6r&   c                 ó   € R V ,          # )zTotal Time: %3.5f seconds
r(   )r   s   &r$   Útotal_time_recordre   �   s   € Ø(¨:Õ5Ð5r&   c                   ó^   a € ] tR t^…t o RtR
V 3R lR lltV 3R lR ltV 3R lR ltR	tV t	R# )ÚSystemctlReaderzI
Class for dealing with all systemctl subp calls in a consistent manner.
Nc                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# )r   ÚpropertyÚ	parameter)r!   r   )r#   Ú__classdict__s   "€r$   r%   ÚSystemctlReader.__annotate__Š   s   ø€ ÷ $ñ $¡ð $±¹#µñ $r&   c                óú   € R V n         \        P                  ! R4      R.V n        V'       d   V P                  P	                  V4       V P                  P                  RVR.4       V P                  4       V n        R # )NÚ	systemctlÚshowz-pz--timestamp=us+utc)Ústdoutr   ÚwhichÚargsÚappendÚextendÚ_subpr   )Úselfri   rj   s   &&&r$   Ú__init__ÚSystemctlReader.__init__Š   s^   € Ø%)ˆŒÜŸ*š* [Ó1°6Ð:ˆŒ	çØ�I‰I×Ñ˜YÔ'ð 	�	‰	×Ñ˜$ Ð*>Ð?Ô@ð
 —z‘z“|ˆŽr&   c                óF   <€ V ^8„  d   QhRS[ S[S[S[3,          ,          /# ©r   r    )r   r	   r!   Ú	Exception)r#   rk   s   "€r$   r%   rl   œ   s"   ø€ ÷ "ñ "‘x¡¡c©9 nÕ 5Õ6ñ "r&   c                ó¤   €  \         P                   ! V P                  RR7      w  rV'       d   V# Wn        R#   \         d   pTu Rp?# Rp?ii ; i)z|
Make a subp call based on set args and handle errors by setting
failure code

:return: whether the subp call failed or not
T©ÚcaptureN)r   rr   rp   r{   )rv   ÚvalueÚerrÚsystemctl_fails   &   r$   ru   ÚSystemctlReader._subpœ   sC   € ð	"ÜŸš 4§9¡9°dÔ;‰JˆEßØ�
ØŒKÙøÜô 	"Ø!Õ!ûð	"ús   ‚-8 °8 ¸AÁA
ÁAÁ
Ac                ó    <€ V ^8„  d   QhRS[ /# rz   )rA   )r#   rk   s   "€r$   r%   rl   ¬   s   ø€ ÷ +ñ +¡eñ +r&   c                ó  € V P                   '       d%   \        RP                  V P                   4      4      hV P                  f   \        R4      hV P                  P	                  R4      ^,          P                  4       pVP                  4       '       d   \        V4      R,          pV# \        P                  P                  VR4      P                  \        P                  P                  R7      P                  4       pV# )zc
If subp call succeeded, return the timestamp from subp as a float.

:return: timestamp as a float
zBSubprocess call to systemctl has failed, returning error code ({})z.stdout of subprocess call to systemctl is NoneÚ=i@B z%a %Y-%m-%d %H:%M:%S.%f %Z)Útzinfo)r   ÚRuntimeErrorr#   rp   r=   ÚstripÚ	isnumericrA   rG   Ústrptimer+   rK   rL   r   )rv   Úvalr   s   &  r$   Úconvert_val_to_floatÚ$SystemctlReader.convert_val_to_float¬   sÕ   € ð �<�<ˆ<Üð,ß,2©F°4·<±<Ó,@óð ð �;‰;ÒÜØ@óð ð �k‰k×Ñ Ó$ QÕ'×-Ñ-Ó/ˆà�=‰=�?Š?ô ˜c›
 WÕ,ˆIð Ðô ×!Ñ!×*Ñ*¨3Ð0LÓMß‘¤× 1Ñ 1× 5Ñ 5�Ó6ß‘“ð ð Ðr&   )rr   r   rp   rI   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rw   ru   rŒ   Ú__static_attributes__Ú__classdictcell__)rk   s   @r$   rg   rg   …   s(   ø‡ € ñ÷$ò $÷$"ð "÷ +ö +r&   rg   c                óZ   € V ^8„  d   QhR\         \        \        \        \        3,          /# rz   ©r   r!   rA   )r#   s   "r$   r%   r%   Ú   s!   € ÷ ñ œe¤C¬´´uÐ$<Õ=ñ r&   c                 óê   € \        4       '       d   \        4       # \        P                  ! 4       '       g0   R\        P                  ! 4       R,          P                  4       9   d   \        4       # \        # )a  
Determine which init system a particular linux distro is using.
Each init system (systemd, etc) has a different way of
providing timestamps.

:return: timestamps of kernelboot, kernelendboot, and cloud-initstart
or TIMESTAMP_UNKNOWN if the timestamps cannot be retrieved.
ÚgentooÚsystem)r   Úgather_timestamps_using_systemdr   Ú
is_FreeBSDÚsystem_infoÚlowerÚgather_timestamps_using_dmesgÚTIMESTAMP_UNKNOWNr(   r&   r$   Údist_check_timestampr    Ú   sR   € ô ‡~‚~Ü.Ó0Ð0ô ‡‚×Ò˜H¬×(8Ò(8Ó(:¸8Õ(D×(JÑ(JÓ(LÔLÜ,Ó.Ð.ô Ðr&   c                óZ   € V ^8„  d   QhR\         \        \        \        \        3,          /# rz   r–   )r#   s   "r$   r%   r%   ð   s!   € ÷ ñ ¤u¬S´%¼ÄÐ-EÕ'Fñ r&   c                 ó(  €  \         P                   ! R.RR7      w  rV ^ ,          P                  4       pV F¾  pVP                  R4      P                  R4      R8w  g   K*  VP                  R4      P	                  4       pV^,          P                  R4      p\        V4      p\        \        P                  ! 4       4      \        \        P                  ! 4       4      ,
          pWv,           p\        WxV3u # 	  \        #   \         d	     \        # i ; i)zò
Gather timestamps that corresponds to kernel begin initialization,
kernel finish initialization using dmesg as opposed to systemctl

:return: the two timestamps plus a dummy timestamp to keep consistency
with gather_timestamps_using_systemd
ÚdmesgTr}   zUTF-8ÚuserÚ]éÿÿÿÿ)r   Ú
splitlinesÚdecodeÚfindr=   rˆ   rA   Útimer   ÚuptimeÚSUCCESS_CODEr{   rŸ   )	ÚdataÚ_Úsplit_entriesr,   ÚsplitupÚstrippedÚuser_space_timestampÚkernel_startÚ
kernel_ends	            r$   rž   rž   ð   sã   € ðÜ—)’)˜W˜I¨tÔ4‰ˆØ˜Q�×*Ñ*Ó,ˆÛˆAØ�x‰x˜Ó ×%Ñ% fÓ-°Ö3ØŸ(™( 7Ó+×1Ñ1Ó3�Ø" 1�:×+Ñ+¨CÓ0�ô (-¨X£Ð$Ü$¤T§Y¢Y£[Ó1´E¼$¿+º+»-Ó4HÕH�Ø)Õ@�
ô $ \¸zÐIÒIñ ô" Ðøô ô ØÜÐðús   ‚AC> Á BC> Ã6C> Ã>DÄDc                óZ   € V ^8„  d   QhR\         \        \        \        \        3,          /# rz   r–   )r#   s   "r$   r%   r%     s!   € ÷ 6ñ 6¬¬s´E¼5Ä%Ð/GÕ)Hñ 6r&   c                 óJ  €  \         P                  ! 4       '       d4   \        R4      P                  4       p \        R4      P                  4       pM2\        R4      P                  4       p \        R4      P                  4       p\        R4      P                  4       V,
          p\        RR4      P                  4       V,
          p\         P                  ! 4       '       d   \        M\        pTT Y,           Y,           3#   \         d   p\        T4       \        u Rp?# Rp?ii ; i)z¶
Gather timestamps that corresponds to kernel begin initialization,
kernel finish initialization. and cloud-init systemd unit activation

:return: the three timesread_propertystamps
ÚUserspaceTimestampÚUserspaceTimestampMonotonicÚKernelTimestampÚKernelTimestampMonotonicÚInactiveExitTimestampMonotoniczcloud-init-localN)	r   Úis_containerrg   rŒ   r{   ÚprintrŸ   ÚCONTAINER_CODEr¬   )r³   Úmonotonic_offsetr´   Úcloudinit_sysdÚeÚstatuss         r$   rš   rš     s#  € ð&!ô ×Ò×Òô +Ø$óç"Ñ"Ó$ð ô  /Ø-ó ç"Ñ"Ó$ñ ô +Ø!óç"Ñ"Ó$ð ô  /Ø*ó ç"Ñ"Ó$ð ô Ø-óç"Ñ"Ó$Øõð 	ô Ø0Ð2Dóç"Ñ"Ó$Øõð 	ô  $×0Ò0×2Ò2�^¼€Fð 	ØØÕ!ØÕ%ð	ð øô ô !ô 	ˆaŒÜ Õ ûð!ús#   ‚C< �B&C< Ã<D"ÄDÄD"ÄD"c                ó~   € V ^8„  d   QhR\         \        ,          R\        R\         \         \        ,          ,          /# ©r   ÚeventsÚprint_formatr    ©r   r"   r!   )r#   s   "r$   r%   r%   H  s7   € ÷ Mñ MÜ”�KðMäðMô 
Œ$Œs�)…_ñMr&   c                ó‚  € \        V R R7      p. pRpRp/ p. p. p\        \        V4      4       EFÌ  p	W	,          p
 W	^,           ,          p\	        V
4      R8X  Ed	   V'       dH   V
P                  R4      R8X  d2   VP                  \        V4      4       VP                  V4       . pRpRpVf   \        V
4      pWF\        V
4      &   \        V
4      \        V4      8X  dJ   \	        V4      R8X  d8   \        \        V4      pVP                  \        V\        WJV4      4      4       Kø  Kú  VP                  R	V
P                  R4      ,          4       VP                  V
4       EK5  VP                  4       p\        V
4      \        V4      8X  d^   V'       dS   \        WLV
4      pVP                  \        R
V4      R,           4       Y]P                  R4      ;'       g    R,          pEK¸  EK»  VP                  V4       EKÏ  	  VP                  \        V4      4       VP                  V4       V#   \         d    Rp ELòi ; i)aW  
Take in raw events and create parent-child dependencies between events
in order to order events in chronological order.

:param events: JSONs from dump that represents events taken from logs
:param print_format: formatting to represent event, time stamp,
and time taken by the event in one line

:return: boot records ordered chronologically
c                 ó   € V R ,          # )r   r(   )Úxs   &r$   Ú<lambda>Ú"generate_records.<locals>.<lambda>W  s   € °°;¶r&   )ÚkeyNg        rU   r   z
init-localrV   zStarting stage: %szFinished stage: (%n) %d secondsÚ
r   )ÚsortedÚrangeÚlenÚ
IndexErrorr   r5   rs   re   rM   r>   r7   r
   r   r.   rb   Úpop)rÅ   rÆ   Úsorted_eventsÚrecordsrZ   r   Ústage_start_timeÚboot_recordsÚunprocessedrÁ   r   Únext_evtÚprev_evtra   s   &&            r$   Úgenerate_recordsrÛ   H  s  € ô ˜6Ñ'?Ô@€MØ€GØ€JØ€JØÐØ€Là€KÜ”3�}Ó%×&ˆØ•	ˆð	Ø !�e•}ˆHô �eÓ Õ'ß˜5Ÿ9™9 VÓ,°Ô<Ø—‘Ô0°Ó<Ô=Ø×#Ñ# GÔ,Ø�Ø!�
Ø �
àÒ!Ü+¨EÓ2�
Ø8B¤¨eÓ!4Ñ5ô ˜%Ó ¤J¨xÓ$8Ô8Ü˜hÓ'¨8Ô3ô  $¤D¨(Ó3�HØ—N‘NÜ%Ø(Ü(¨¸HÓEóöñ	 4ð —‘Ð3°e·i±iÀÓ6GÕGÔHØ×"Ñ" 5Ô)Úà"—‘Ó(ˆHÜ˜%Ó ¤J¨xÓ$8Ô8ßÜ)¨*ÀÓF�FØ—N‘NÜ%Ø=¸vóð õôð §*¡*¨WÓ"5×"<Ð"<¸Õ<“Jò ð ×"Ñ" 8×,ñe 'ðh ‡N�NÔ$ ZÓ0Ô1Ø×Ñ˜Ô ØÐøôe ô 	Ø‹Hð	ús   ¼H-È-H>È=H>c                ó~   € V ^8„  d   QhR\         \        ,          R\        R\         \         \        ,          ,          /# rÄ   rÇ   )r#   s   "r$   r%   r%   ˜  s-   € ÷ 
?ñ 
?œœU�ð 
?´3ð 
?¼4ÄÄSÅ	½?ñ 
?r&   c                ó   € \        WR7      # )a$  
A passthrough method that makes it easier to call generate_records()

:param events: JSONs from dump that represents events taken from logs
:param print_format: formatting to represent event, time stamp,
and time taken by the event in one line

:return: boot records ordered chronologically
)rÆ   )rÛ   )rÅ   rÆ   s   &&r$   Úshow_eventsrÞ   ˜  s   € ô ˜FÔ>Ð>r&   c                óh   € V ^8„  d   QhR\         R\        \        \        ,          \        3,          /# )r   Úinfiler    )r   r   r   r   r!   )r#   s   "r$   r%   r%   ¥  s(   € ÷ ñ œrð ¤e¬H´S­M¼3Ð,>Õ&?ñ r&   c                ó6  € V P                  4       pVP                  4       '       gG   \        P                  P	                  RV P
                  ,          4       \        P                  ! ^4        \        P                  ! V4      V3#   \         d    RT3u # i ; i)zˆ
Takes in a log file, read it, and convert to json.

:param infile: The Log file to be read

:return: json version of logfile, raw file
zEmpty file %s
N)
Úreadrˆ   ÚsysÚstderrÚwriter   ÚexitÚjsonÚloadsrC   )rà   r­   s   & r$   Úload_events_infileré   ¥  ss   € ð �;‰;‹=€DØ�:‰:�<Š<Ü�
‰
×ÑÐ*¨V¯[©[Õ8Ô9Ü�Š�ŒðÜ�zŠz˜$Ó Ð%Ð%øÜô Ø�TˆzÒðús   Á.B ÂBÂBr¦   )z(%n) %d seconds in %I%D))rG   rç   rã   rª   Útypingr   r   r   r   r   r   r	   r
   Ú	cloudinitr   r   Úcloudinit.distrosr   r)   r¬   Ú	FAIL_CODEr¾   rŸ   r"   r.   r7   r   r>   rE   rM   rS   rX   rb   re   rg   r    rž   rš   rÛ   rÞ   ré   r(   r&   r$   Ú<module>rî      sè   ðó Û Û 
Û ß D× DÓ Dç  Ý *ð, 	ˆ'Øˆ-Øˆ)Øˆ,Øˆ(Øˆ'Øˆ&Øˆ(Øˆ(Øˆ+Øˆ,ð€
ð €Ø€	Ø€Ø  B¨Ð+Ð à€õõõõõõõ%õHõõ*6÷Rñ Rõjõ,õ>6÷rMõ`
?÷r&   