U
    L¬÷d"  ã                   @   sˆ   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlm	Z
 e e¡ZdZejdejdejd	iZd
d„ Zdd„ Zdd„ ZdS )é    N)ÚStringIO)Úlog)Úutil)Úversioné   )z2Cloud-init %(version)s received SIGINT, exiting...é   )z3Cloud-init %(version)s received SIGTERM, exiting...r   )z3Cloud-init %(version)s received SIGABRT, exiting...r   c                 C   sz   ||ks| sd S t  | ¡}d|d  }| d||jf ¡ | d||jf ¡ | d||jf ¡ t| j|d ||ƒ d S )Nú é   z%sFilename: %s
z%sFunction: %s
z%sLine number: %s
r   )ÚinspectZgetframeinfoÚwriteÚfilenameZfunctionÚlinenoÚ_pprint_frameÚf_back)ÚframeZdepthZ	max_depthÚcontentsZ
frame_infoÚprefix© r   ú:/usr/lib/python3/dist-packages/cloudinit/signal_handler.pyr      s    
r   c                 C   sb   t |  \}}|dt ¡ i }tƒ }| d| ¡ t|dt|ƒ tj| 	¡ ddt
d t |¡ d S )Nr   z%s
r   TF)ZconsoleÚstderrr   )ÚEXIT_FORÚvrZversion_stringr   r   r   ÚBACK_FRAME_TRACE_DEPTHr   Z	multi_logÚgetvalueÚLOGÚsysÚexit)Úsignumr   ÚmsgZrcr   r   r   r   Ú_handle_exit*   s    r   c                  C   s.   d} t  ¡ D ]}t |t¡ q| tt ƒ7 } | S )Nr   )r   ÚkeysÚsignalr   Úlen)Zsigs_attachedr   r   r   r   Úattach_handlers4   s
    r#   )r
   r!   r   Úior   Z	cloudinitr   Zloggingr   r   r   Z	getLoggerÚ__name__r   r   ÚSIGINTÚSIGTERMÚSIGABRTr   r   r   r#   r   r   r   r   Ú<module>	   s$   
   û	
