U
    Ӈg                  	   @   s   d dl Z d dlZd dlmZmZ d dlmZmZmZ ddddddd	d
dZdZ	dZ
dZdd Zdd Zdd Zdd ZdddZdd Zedkree  dS )    N)datetimetimezone)atomic_helpersubputilzfinished running cloud-initz%starting search for local datasourcesz!searching for network datasourceszrunning config moduleszfinalizing moduleszrunning modules forzrunning single module )Zfinishedz
init-localinit-networkinitzmodules-configzmodules-finalmodulesZsinglez%Y-%m-%d %H:%M:%S,%fz%b %d %H:%M:%S.%f %Yz%b %d %H:%M:%S %Yc                 C   s   dd t ddD }|  d |krft}d| kr4t}t| d tt j |j	t
jd}| }n0d	| krt| tj	t
jd}| }nt| }t|S )
Nc                 S   s   g | ]}t j| qS  )calendarZ
month_abbr).0mr
   r
   8/usr/lib/python3/dist-packages/cloudinit/analyze/dump.py
<listcomp>    s     z#parse_timestamp.<locals>.<listcomp>      r   . )Ztzinfo,)rangesplitDEFAULT_FMTCLOUD_INIT_JOURNALCTL_FMTr   strptimestrZnowZyearreplacer   Zutc	timestampCLOUD_INIT_ASCTIME_FMTparse_timestamp_from_datefloat)timestampstrZmonthsZFMTZdtr   r
   r
   r   parse_timestamp   s&    

r!   c                   C   s   dt  ddgjkS )zGNU date includes a string containing the word GNU in it in
    help output. Posix date does not. Use this to indicate on Linux
    systems without GNU date that the extended parsing is not
    available.
    ZGNUdatez--help)r   stdoutr
   r
   r
   r   has_gnu_date9   s    r$   c                 C   sR   t  stdrd}nt r$d}ntd|  dtt|ddd| gj S )NZgdater"   z-Unable to parse timestamp without GNU date: []z-uz+%s.%3Nz-d)	r   Zis_Linuxr   Zwhichr$   
ValueErrorr   r#   strip)r    r"   r
   r
   r   r   B   s    
r   c                 C   s  d}dd|g}d}|D ]}|| krd} q,q|s4d S |  |\}}|drbd|  dd	 }d
|kr| d
\}}|d|  d  7 }d|kr|  d	 }	n@|  d	 }	||kr| }|j ddd }n| |	d  }d|krLd}
d|kr>| dd  }| d\}}|dddd}|dkrBd}nd S t| }n(|  dd \}}
}| |d  }|d|t|d|
dd}|d dkr| dd }| |d d }||d< | |d< |S )Nz cloud-init[z - z [CLOUDINIT] FT:r   r   r   z,%sr   )maxsplitCloud-init v.startrunningz at ' -r   r      	cloudinit)namedescriptionr   origin
event_typer6   Zfinishresultr4   )	r   endswithjoinr'   lstripr   stage_to_descriptionrstripr!   )lineZamazon_linux_2_sepZ
separatorsfoundsepZtimehostZeventstrr    ZextraZhostnamer6   Zstage_and_timestampZ
event_name_Zevent_descriptionZ_pymodloglvleventr7   Zdescr
   r
   r   parse_ci_loglineP   s\    





rB   c              
   C   s   g }d }dddg}t | |gs&td|r4| }n|  }|D ]R}|D ]H}||krHzt|}W n  tk
r   tjd Y nX |rH|| qHq@||fS )Nzstart:zfinish:r+   z2Either cisource or rawdata parameters are requiredzSkipping invalid entry
)	anyr&   
splitlines	readlinesrB   sysstderrwriteappend)cisourceZrawdataZeventsrA   ZCI_EVENT_MATCHESdatar=   matchr
   r
   r   dump_events   s$    

rM   c                  C   s2   t tjdkrttjd } ntj} tt| S )Nr   )lenrF   argvopenstdinr   Z
json_dumpsrM   )rJ   r
   r
   r   main   s    rR   __main__)NN)r   rF   r   r   r2   r   r   r   r;   r   r   r   r!   r$   r   rB   rM   rR   __name__printr
   r
   r
   r   <module>   s.   	V
	