HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/cloudinit/analyze/__pycache__/__main__.cpython-310.pyc
o

�Ad%�@s�ddlZddlZddlZddlmZddlmZddlmZmZddl	m
Z
ddd�Zdd	�Zd
d�Z
dd
�Zdd�Zdd�Zdd�Zdeddfdd�Zedkrce�Ze��Zej\ZZeee�dSdS)�N)�datetime)�IO)�dump�show)�
json_dumpscCsh|s	tjddd�}|jddd�}d|_|jdd	d
�}|jddd
dddd�|jddd
dddd�|jdtfd�|jddd
�}|jddd
dddd�|jddd
dddd�|jddd
dddd�|jdtfd�|jd d!d
�}|jddd
ddd"d�|jddd
dddd�|jd t	fd�|jd#d$d
�}|jddd
ddd"d�|jddd
dddd�|jd#t
fd�|S)%Nzcloudinit-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.logzspecify where to read input.)�actionr�defaultrz-oz	--outfile�outfile�-zspecify where to write output. )rrz.Print list of in-order events during executionz-fz--format�print_formatz%I%D @%Es +%dszspecify formatting of output.zspecify where to write output.rz%Dump cloud-init events in JSON formatzspecify 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_boot�r(�</usr/lib/python3/dist-packages/cloudinit/analyze/__main__.py�
get_parsers���������������r*c
Cs�t|�\}}t��}|\}}}}t�|�}	t�|�}
t�|�}zdd�t|�D�d}t�|d�}
WntyAd}
tj}Ynwd}d}d}tj|tj|tj	|i}||}||}|	|
|||||||
d	�	}|�
||jdi|���t||�|S)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>
    cSs(g|]}|ddkrd|dvr|�qS)�namez
init-localzstarting searchrr()�.0�er(r(r)�
<listcomp>�s
�
��z analyze_boot.<locals>.<listcomp>����	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://cloudinit.readthedocs.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_startNr()
�configure_ior�dist_check_timestampr�utcfromtimestamp�_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�last_init_localr9�FAILURE_MSG�SUCCESS_MSG�
CONTAINER_MSG�
status_map�kernel_runtime�between_process_runtime�kwargsr(r(r)r!tsT


��
������
r!c	Cs�t|�\}}d}t�dtj�}tt�t|�|��D]&\}}tt	|j
|�dd�}|�d|d�|�d�|�d�|�d�q|�d|d�t
||�d	S)
azReport 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)r:�re�compile�	MULTILINE�	enumerater�show_eventsr=�sorted�filter�matchrB�joinrD)	r+rErFrG�blame_format�r�idx�record�srecsr(r(r)r�s�rcCs�t|�\}}tt�t|�|j��D]!\}}|�d|d�|�d�|�d�|�d�|�d�q|�d|d�t||�dS)aGenerate 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
    rYrZzUThe total time elapsed since completing an event is printed after the "@" character.
z>The time the event takes is printed after the "+" character.

r[r\N)	r:r`rrar=rrBrerD)r+rErFrGrhrir(r(r)r�s���rcCs0t|�\}}|�tt|��d�t||�dS)z%Dump cloud-init events in json formatr[N)r:rBrr=rD)r+rErFrGr(r(r)r sr cCs*d}t�|�\}}|stj|d�\}}|S)N)�rawdata)r�load_events_infiler�dump_events)rrk�events�_r(r(r)r=
s
r=cCs�|jdkr	tj}n zt|jd�}Wnty(tj�d|j�t�d�Ynw|jdkr5tj	}||fSzt|jd�}W||fStyZtj�d|j�t�d�Y||fSw)z.Common parsing and setup of input/output filesrrgzCannot open file %s
rZ�w)
r�sys�stdin�open�OSError�stderrrB�exitr�stdout)rErFrGr(r(r)r:s&
�
���r:�file_handles�returncGs(|D]}|tjtjfvr
q|��qdS)zclose filehandlesN)rqrrrw�close)rx�file_handler(r(r)rD,s

�rD�__main__)N)rr]rqr�typingr�cloudinit.analyzerr�cloudinit.utilrr*r!rrr r=r:rD�__name__r"�
parse_argsrErr+�action_functorr(r(r(r)�<module>s*
eS%
�