U
    9¡_¬#  ã                   @   s†   d dl mZ d dlZd dlZd dlmZ d dlZd dlZd dlm	Z	m
Z
 ddlT zd dlmZ W n   dZY nX G d	d
„ d
eƒZdS )é    )ÚGtkN)ÚNamedTemporaryFile)ÚTimedOperationÚOperationCanceledé   )Ú*)ÚjournalFc                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚErrorLogCheckpointc                 C   sÄ   t  | |d¡ |  tdƒtdƒ¡}tj tdƒ¡}t ¡ }| d¡ | 	tj
j¡ | |ddd¡ || _| |ddd¡ t ¡ | _| j dd¡ | j d¡ | | jddd¡ | || ¡ i | _d S )NzError log checkpointZ	Debuggingz–This step will enable debugging output from the CUPS scheduler.  This may cause the scheduler to restart.  Click the button below to enable debugging.zEnable Debuggingr   FT)ÚQuestionÚ__init__Zinitial_vboxÚ_r   ZButtonZnew_with_labelZ
HButtonBoxZset_border_widthZ
set_layoutZButtonBoxStyleZSTARTZ
pack_startÚbuttonZLabelÚlabelZset_alignmentZset_line_wrapZnew_pageÚpersistent_answers)ÚselfÚtroubleshooterZpager   Z	buttonbox© r   úC/usr/share/system-config-printer/troubleshoot/ErrorLogCheckpoint.pyr   &   s"    
ÿ

zErrorLogCheckpoint.__init__c                 C   sŠ   | j  dd¡sd S | jjd }| ¡ }| d¡ | ¡ }tt| 	¡ ƒƒdkrPd S d|t
j< | jj}| j d }| dd¡|d< | |¡ d S )	NÚerror_log_debug_logging_setFÚ!_authenticated_connection_factoryr   Ú0Úcups_server_settingsÚ
MaxLogSizeZ2000000)r   Úgetr   ÚanswersÚget_connectionZ	_set_lockÚadminGetServerSettingsÚlenÚlistÚkeysÚcupsÚCUPS_SERVER_DEBUG_LOGGINGÚadminSetServerSettings)r   ÚfÚcÚsettingsr   Zorig_settingsr   r   r   Ú__del__;   s    ÿ


zErrorLogCheckpoint.__del__c                 C   sþ   i | _ | jj }|d sdS |d | _| j ¡ }dd„ }zt||d| _| j ¡ }W n. tk
rh   Y dS  tj	k
r€   i }Y nX d| _
| j d¡ tt| ¡ ƒƒdkr¬d	S || jd
< zt|tj ƒdkrÐW dS W n& tk
ræ   Y n tk
rø   Y nX d	S )NÚcups_queue_listedFÚ_authenticated_connectionc                  S   s(   t  dd„ ¡ t  d¡ t  ¡ } |  ¡ S )Nc                 S   s   dS )NÚ r   )Úxr   r   r   Ú<lambda>X   ó    zGErrorLogCheckpoint.display.<locals>.getServerSettings.<locals>.<lambda>r)   )r    ZsetPasswordCBZ	setServerZ
Connectionr   )r$   r   r   r   ÚgetServerSettingsV   s    
z5ErrorLogCheckpoint.display.<locals>.getServerSettings©Úparentr)   r   Tr   )r   r   ÚauthconnÚ
get_windowr   ÚopÚrunÚRuntimeErrorr    ÚIPPErrorÚforward_allowedr   Úset_textr   r   r   r   Úintr!   ÚKeyErrorÚ
ValueError)r   r   r/   r-   r%   r   r   r   ÚdisplayM   s6    




zErrorLogCheckpoint.displayc                 C   s   | j  d| j|¡| _d S )NZclicked)r   ZconnectÚenable_clickedÚbutton_sigid)r   Úhandlerr   r   r   Úconnect_signalsx   s    ÿz"ErrorLogCheckpoint.connect_signalsc                 C   s   | j  | j¡ d S ©N)r   Z
disconnectr=   ©r   r   r   r   Údisconnect_signals|   s    z%ErrorLogCheckpoint.disconnect_signalsc              
   C   s²  | j j}|d si S | j  ¡ }| j | j¡ d| jkr<| jS tƒ }z*t| jjdgd|i|d| _	| j	 
¡  W n„ ttjfk
rž } z|| jd< W 5 d }~X Y nT tjk
rð } z4|| jd< | j j}|d }| ¡ | _| j| jd< W 5 d }~X Y nX zt |j¡}W n( tk
r*   d	d	d	d	d	d	d	g}Y nX |d
 | jd< |d
 | jd< tr¬t ¡ }| ¡  | ¡ d }|| jd< || jd< tj t ¡ ¡}	|	 d¡}
|
| jd< |
| jd< | jS )Nr'   Zerror_log_checkpointz/admin/log/error_logÚfile)ÚargsÚkwargsr/   Zerror_log_checkpoint_excr   r(   r   é   Z__CURSORZerror_log_cursorz%F %TZerror_log_timestamp)r   r   r1   Úupdater   r   r   r0   ZgetFiler2   r3   r4   r    r5   Z	HTTPErrorr   ÚosÚstatÚnameÚOSErrorr   ÚReaderZ	seek_tailZget_previousÚdatetimeZfromtimestampÚtimeÚstrftime)r   r   r/   ZtmpfÚeÚfactoryZstatbufÚjZcursorZnowZ	timestampr   r   r   Úcollect_answer   sP    

ý






z!ErrorLogCheckpoint.collect_answerc                 C   s   | j S r@   )r6   rA   r   r   r   Úcan_click_forward°   s    z$ErrorLogCheckpoint.can_click_forwardc           
   	   C   sº  | j  ¡ }| j  ¡  z t| jj|d| _| j ¡ }W n4 tj	t
fk
rh   | j  ¡  d| _||ƒ Y d S X | ¡ | jd< d}zt|tj ƒ}W n tk
r¦   d}Y nX zt|| ƒ}W n ttfk
rÔ   d}Y nX |dksè|dkrŽd|tj< d||< d	}d
d„ }	z8tdt|ƒ ƒ t|	| j|f|d| _| j ¡  d}W n, tj	k
rV   Y n tk
rj   Y nX |ržd| jd< | j tdƒ¡ n| j tdƒ¡ d| _| j  ¡  ||ƒ d S )Nr.   Tr   r   r   éÿÿÿÿr   Ú1Fc                 S   sT   |   |¡ d}|dkrPzt d¡ |  ¡  W qPW q tk
rL   |d7 }Y qX qd S )Nr   é   )r"   rN   ÚsleepZ_connectr4   )Z
connectionr%   Zattemptr   r   r   Úset_settingsÐ   s    

z7ErrorLogCheckpoint.enable_clicked.<locals>.set_settingszSettings to set: )rD   r/   r   zDebug logging enabled.z"Debug logging was already enabled.)r   r1   Zbusyr   r0   r   r2   r3   r    r5   r   Zreadyr6   Úcopyr   r8   r!   r9   r:   Z
debugprintÚreprr4   r   r7   r   )
r   r   r>   r/   r%   Z
MAXLOGSIZEZ
prev_debugZprev_logsizeZsuccessrY   r   r   r   r<   ³   s\    

ÿ



þ


z!ErrorLogCheckpoint.enable_clickedc                 C   s4   | j  ¡  | jj}|d }| ¡ | _| j| jd< d S )Nr   r(   )r2   Zcancelr   r   r   r0   )r   r   rQ   r   r   r   Úcancel_operationô   s
    

z#ErrorLogCheckpoint.cancel_operationN)Ú__name__Ú
__module__Ú__qualname__r   r&   r;   r?   rB   rS   rT   r<   r\   r   r   r   r   r	   %   s   +1Ar	   )Zgi.repositoryr   r    rH   Ztempfiler   rM   rN   Ztimedopsr   r   ÚbaseZsystemdr   r
   r	   r   r   r   r   Ú<module>   s   
