ó
    x[h,+  ã                   óî   • S SK r S SKrS SKrS SKrS SKJrJr  S SKJr  SSSSSS	S
SSSSS.r	Sr
SrSr\SSS4rS rS rS rS rS rS rS rS rS rS r " S S5      rS  rS! rS" r S&S# jrS$ rS% rg)'é    N)ÚsubpÚutil)Úuses_systemdÚdeltaÚdescriptionÚelapsedÚ
event_typeÚindentÚlevelÚnameÚoriginÚresultÚ	timestampÚ
total_time)z%dz%Dz%Ez%ez%Iz%lz%nz%oz%rz%tz%TÚ
successfulÚfailureÚ	containeréÿÿÿÿc                 óÒ   • [         R                  5        H>  u  p#X ;   d  M  US;   a  U R                  USU-  5      n M)  U R                  USU-  5      n M@     U R                  " S0 UD6$ )N)r   r   r   z
{%s:08.5f}z{%s}© )Ú
format_keyÚitemsÚreplaceÚformat)ÚmsgÚeventÚiÚjs       Ú8/usr/lib/python3/dist-packages/cloudinit/analyze/show.pyÚformat_recordr    6   sb   € Ü× Ñ Ö"‰ˆØ�8àÐ5Ó5Ø—k‘k ! \°AÑ%5Ó6’à—k‘k ! V¨a¡ZÓ0’ñ #ð �:Š:Ñ˜ÑÐó    c                 ó4   • U (       a  U R                  S5      $ g )Nr   ©Úget©r   s    r   Ú
event_namer&   A   s   € ÞØ�y‰y˜Ó Ð Ør!   c                 ó4   • U (       a  U R                  S5      $ g )Nr	   r#   r%   s    r   r	   r	   G   s   € ÞØ�y‰y˜Ó&Ð&Ør!   c                 óL   • U (       a  [        U 5      R                  S5      S   $ g )NÚ/r   )r&   Úsplitr%   s    r   Úevent_parentr+   M   s#   € ÞÜ˜%Ó ×&Ñ& sÓ+¨AÑ.Ð.Ør!   c                 ó6   • [        U R                  S5      5      $ ©Nr   )Úfloatr$   r%   s    r   Úevent_timestampr/   S   s   € Ü�—‘˜;Ó'Ó(Ð(r!   c                 ó„   • [         R                   R                  [        U 5      [         R                  R                  5      $ ©N)ÚdatetimeÚfromtimestampr/   ÚtimezoneÚutcr%   s    r   Úevent_datetimer6   W   s1   € Ü×Ñ×*Ñ*Ü˜Ó¤× 1Ñ 1× 5Ñ 5óð r!   c                 ó&   • X-
  R                  5       $ r1   )Útotal_seconds)Út1Út2s     r   Údelta_secondsr;   ]   s   € Ø‰G×"Ñ"Ó$Ð$r!   c                 ó>   • [        [        U 5      [        U5      5      $ r1   )r;   r6   )ÚstartÚfinishs     r   Úevent_durationr?   a   s   € Üœ¨Ó.´¸vÓ0FÓGÐGr!   c           	      óÐ   • UR                  5       nUR                  [        X5      [        U [	        U5      5      SS[        U5      R                  S5      S-
  -  -   S-   S.5        U$ )NÚ|Ú r)   é   z`->)r   r   r
   )ÚcopyÚupdater?   r;   r6   r&   Úcount)Ú
start_timer=   r>   Úrecords       r   Úevent_recordrI   e   sc   € Ø�[‰[‹]€FØ
‡M�Mä# EÓ2Ü$ Z´ÀÓ1FÓGØ˜C¤:¨eÓ#4×#:Ñ#:¸3Ó#?À!Ñ#CÑDÑDÀuÑLñ	
ôð €Mr!   c                 ó   • SU -  $ )NzTotal Time: %3.5f seconds
r   )r   s    r   Útotal_time_recordrK   r   s   € Ø(¨:Ñ5Ð5r!   c                   ó.   • \ rS rSrSrSS jrS rS rSrg)	ÚSystemctlReaderév   zI
Class for dealing with all systemctl subp calls in a consistent manner.
Nc                 óô   • S U l         [        R                  " S5      S/U l        U(       a  U R                  R	                  U5        U R                  R                  SU/5        U R                  5       U l        g )NÚ	systemctlÚshowz-p)Úepochr   ÚwhichÚargsÚappendÚextendr   )ÚselfÚpropertyÚ	parameters      r   Ú__init__ÚSystemctlReader.__init__{   sY   € ØˆŒ
Ü—Z’Z Ó,¨fÐ5ˆŒ	ÞØ�I‰I×Ñ˜YÔ'Ø�	‰	×Ñ˜$ Ð)Ô*ð —y‘y“{ˆ�r!   c                 ó˜   •  [         R                   " U R                  SS9u  pU(       a  U$ Xl        g! [         a  nUs SnA$ SnAff = f)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   rT   rR   Ú	Exception)rW   ÚvalueÚerrÚsystemctl_fails       r   r   ÚSystemctlReader.subp†   sC   € ð	"ÜŸš 4§9¡9°dÑ;‰JˆEÞØ�
ØŒJØøÜó 	"Ø!Õ!ûð	"ús   ‚)3 ¬3 ³
A	½A¾A	ÁA	c                 óÄ   • U R                   (       a$  [        SR                  U R                   5      5      eU R                  R	                  S5      S   n[        U5      S-  $ )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 ({})Ú=rC   i@B )r   ÚRuntimeErrorr   rR   r*   r.   )rW   r   s     r   Úparse_epoch_as_floatÚ$SystemctlReader.parse_epoch_as_float–   sV   € ð �<�<Üð,ß,2©F°4·<±<Ó,@óð ð —J‘J×$Ñ$ SÓ)¨!Ñ,ˆ	ä�YÓ 'Ñ)Ð)r!   )rT   rR   r   r1   )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rZ   r   rg   Ú__static_attributes__r   r!   r   rM   rM   v   s   † ñô	#ò"õ *r!   rM   c                  óÜ   • [        5       (       a
  [        5       $ [        R                  " 5       (       d*  S[        R                  " 5       S   R                  5       ;   a
  [        5       $ [        $ )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_timestamprx   «   sR   € ô ‡~�~Ü.Ó0Ð0ô ‡‚×Ñ˜H¬×(8Ò(8Ó(:¸8Ñ(D×(JÑ(JÓ(LÓLÜ,Ó.Ð.ô Ðr!   c                  óþ  •  [         R                   " S/SS9u  pU S   R                  5       nU H±  nUR                  S5      R                  S5      S:w  d  M)  UR                  S5      R	                  5       nUS   R                  S	5      n[        U5      n[        [        R                  " 5       5      [        [        R                  " 5       5      -
  nXv-   n[        XxU4s  $    [        $ ! [         a     [        $ f = f)
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]   r   zUTF-8Úuserr   rC   Ú])r   Ú
splitlinesÚdecodeÚfindr*   Ústripr.   Útimer   ÚuptimeÚSUCCESS_CODEr_   rw   )	ÚdataÚ_Úsplit_entriesr   ÚsplitupÚstrippedÚuser_space_timestampÚkernel_startÚ
kernel_ends	            r   rv   rv   Á   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* Ã"C* Ã*
C<Ã;C<c                  óœ  • [        [        R                  " 5       5      [        [        R                  " 5       5      -
  n  [	        S5      R                  5       n[	        SS5      R                  5       nU n[        n[        R                  " 5       (       a  [        nX1-   nX2-   nX@XV4$ ! [         a  n[        U5        [        s SnA$ SnAff = f)z¨
Gather timestamps that corresponds to kernel begin initialization,
kernel finish initialization. and cloud-init systemd unit activation

:return: the three timestamps
ÚUserspaceTimestampMonotonicÚInactiveExitTimestampMonotoniczcloud-init-localN)r.   r�   r   r‚   rM   rg   rƒ   Úis_containerÚCONTAINER_CODEr_   Úprintrw   )rŠ   Údelta_k_endÚ
delta_ci_sÚ	base_timeÚstatusr‹   Úcloudinit_sysdÚes           r   rr   rr   à   sÀ   € ô œŸš›Ó%¬¬d¯kªk«mÓ(<Ñ<€Lð!Ü%Ø)ó
ç
Ñ
Ó
 ð 	ô %Ø,Ð.@ó
ç
Ñ
Ó
 ð 	ð !ˆ	Üˆô ×Ò×ÑÜ#ˆFØÑ,ˆ
Ø"Ñ/ˆð  Ð;Ð;øô ó !ô 	ˆaŒÜ Õ ûð!ús   ¿A#B& Â&
CÂ0CÃ CÃCc                 óð  • [        U S S9n/ nSnSn0 n/ n/ n[        [        U5      5       GH‡  n	X	   n
 X	S-      n[	        U
5      S:X  aï  U(       aF  U
R                  S5      S:X  a1  UR                  [        U5      5        UR                  U5        / nSnSnUc  [        U
5      nXF[        U
5      '   [        U
5      [        U5      :X  a8  [	        U5      S	:X  a'  UR                  [        U[        XJU5      5      5        MÕ  M×  UR                  S
U
R                  S5      -  5        UR                  U
5        GM  UR                  5       n[        U
5      [        U5      :X  a@  [        XLU
5      nUR                  [        SU5      S-   5        X]R                  S5      -  nGMv  UR                  U5        GMŠ     UR                  [        U5      5        UR                  U5        U$ ! [         a    Sn GN¸f = f)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                 ó   • U S   $ r-   r   )Úxs    r   Ú<lambda>Ú"generate_records.<locals>.<lambda>  s   € °°;²r!   )ÚkeyNg        rC   r=   r   z
init-localr>   zStarting stage: %szFinished stage: (%n) %d secondsÚ
r   )ÚsortedÚrangeÚlenÚ
IndexErrorr	   r$   rU   rK   r6   r+   r&   r    rI   Úpop)ÚeventsÚprint_formatÚsorted_eventsÚrecordsrG   r   Ústage_start_timeÚboot_recordsÚunprocessedr—   r   Únext_evtÚprev_evtrH   s                 r   Úgenerate_recordsr­     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Ø—N‘NÜ%Ø(Ü(¨¸HÓEóöñ 4ð —‘Ð3°e·i±iÀÓ6GÑGÔHØ×"Ñ" 5Ô)Úà"—‘Ó(ˆHÜ˜%Ó ¤J¨xÓ$8Ó8Ü% j¸EÓB�Ø—‘Ü!Ð"CÀVÓLØñôð Ÿj™j¨Ó1Ñ1“
ð ×"Ñ" 8×,ñY 'ð\ ‡N�NÔ$ ZÓ0Ô1Ø×Ñ˜Ô ØÐøôY ó 	Ø‹Hð	ús   µG%Ç%G5Ç4G5c                 ó   • [        XS9$ )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¯   K  s   € ô ˜FÑ>Ð>r!   c                 ó*  • U R                  5       nUR                  5       (       dB  [        R                  R	                  SU R
                  -  5        [        R                  " S5         [        R                  " U5      U4$ ! [         a    SU4s $ f = f)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
rC   N)
Úreadr€   ÚsysÚstderrÚwriter   ÚexitÚjsonÚloadsÚ
ValueError)Úinfiler„   s     r   Úload_events_infilerº   X  ss   € ð �;‰;‹=€DØ�:‰:�<‰<Ü�
‰
×ÑÐ*¨V¯[©[Ñ8Ô9Ü�Š�ŒðÜ�zŠz˜$Ó Ð%Ð%øÜó Ø�TˆzÒðús   Á)B ÂBÂB)z(%n) %d seconds in %I%D)r2   r¶   r²   r�   Ú	cloudinitr   r   Úcloudinit.distrosr   r   rƒ   Ú	FAIL_CODEr�   rw   r    r&   r	   r+   r/   r6   r;   r?   rI   rK   rM   rx   rv   rr   r­   r¯   rº   r   r!   r   Ú<module>r¾      sÇ   ðó Û Û 
Û ç  Ý *ð, Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
ñ€
ð €Ø€	Ø€Ø  B¨Ð+Ð òòòòò)òò%òHò
ò6÷2*ñ 2*òjò,ò><ðF +ôGòT
?ór!   