File: //lib/python3/dist-packages/cloudinit/analyze/__pycache__/__main__.cpython-310.pyc
o
�Ad% � @ s� d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZmZ d dl m
Z
ddd�Zdd � Zd
d� Z
dd
� Zdd� Zdd� Zdd� Zdeddfdd�Zedkrce� Ze�� Zej\ZZeee� dS dS )� N)�datetime)�IO)�dump�show)�
json_dumpsc C sh | s t jddd�} | jddd�}d|_|jdd d
�}|jddd
dddd� |jddd
dddd� |jdtfd� |jddd
�}|jddd
dddd� |jddd
dddd� |jddd
dddd� |jdtfd� |jd d!d
�}|jddd
ddd"d� |jddd
dddd� |jd t fd� |jd#d$d
�}|jddd
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 �defaultr z-oz --outfile�outfile�-zspecify where to write output. )r r z.Print list of in-order events during executionz-fz--format�print_formatz%I%D @%Es +%dszspecify formatting of output.zspecify where to write output.r z%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_parser s� ��������������r* c
C s� t |�\}}t�� }|\}}}}t�|�} t�|�}
t�|�}zdd� t|�D �d }t�|d �}
W n tyA d}
tj}Y nw d}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>
c S s( g | ]}|d dkrd|d v r|�qS )�namez
init-localzstarting searchr r( )�.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! t sT
��
������
r! c C s� t |�\}}d}t�dtj�}tt�t|�|��D ]&\}}tt |j
|�dd�}|�d|d � |�d�|�d � |�d� q|�d|d � t
||� d S )
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)r: �re�compile� MULTILINE� enumerater �show_eventsr= �sorted�filter�matchrB �joinrD ) r+ rE rF rG �blame_format�r�idx�record�srecsr( r( r) r � s �r c C s� t |�\}}tt�t|�|j��D ]!\}}|�d|d � |�d� |�d� |�d�|�d � q|�d|d � t||� dS )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
rY rZ 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[ r\ N) r: r` r ra r= r rB re rD )r+ rE rF rG rh ri r( r( r) r � s ���r c C s0 t |�\}}|�tt|��d � t||� dS )z%Dump cloud-init events in json formatr[ N)r: rB r r= rD )r+ rE rF rG r( r( r) r s r c C s* d }t �| �\}}|stj|d�\}}|S )N)�rawdata)r �load_events_infiler �dump_events)r rk �events�_r( r( r) r=
s
r= c C s� | j dkr tj}n zt| j d�}W n ty( tj�d| j � t�d� Y nw | jdkr5tj }||fS zt| jd�}W ||fS tyZ tj�d| j � t�d� Y ||fS w )z.Common parsing and setup of input/output filesr rg zCannot open file %s
rZ �w)
r �sys�stdin�open�OSError�stderrrB �exitr �stdout)rE rF rG r( r( r) r: s&