HEX
Server: nginx/1.28.0
System: Linux server-one 5.15.0-153-generic #163-Ubuntu SMP Thu Aug 7 16:37:18 UTC 2025 x86_64
User: root (0)
PHP: 8.3.23
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/supervisor/__pycache__/dispatchers.cpython-310.pyc
o

VƧ\�J�@s�ddlZddlZddlmZddlmZddlmZddlmZddlm	Z	ddlm
Z
ddlmZdd	lm
Z
dd
lmZdd�ZGd
d�d�ZGdd�de�ZGdd�de�ZGdd�de�ZdZdZdd�ZGdd�de�Zdd�ZdS)�N)�compact_traceback)�	as_string)�notify)�EventRejectedEvent)�ProcessLogStderrEvent)�ProcessLogStdoutEvent)�EventListenerStates)� getEventListenerStateDescription)�loggerscCsDt|�d}|r |�|d|��s |d8}|r |�|d|��r|S)N�)�len�endswith)�haystack�needle�l�r�8/usr/lib/python3/dist-packages/supervisor/dispatchers.py�find_prefix_at_ends
�rc@s\eZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dS)�PDispatcherz{ Asyncore dispatcher for mainloop, representing a process channel
    (stdin, stdout, or stderr).  This class is abstract. FcCs||_||_||_d|_dS�NF)�process�channel�fd�closed��selfrrrrrr�__init__s
zPDispatcher.__init__cCsd|jjt|�|j|jfS)Nz<%s at %s for %s (%s)>)�	__class__�__name__�idrr�rrrr�__repr__ s
�zPDispatcher.__repr__cC�t��N��NotImplementedErrorr rrr�readable&�zPDispatcher.readablecCr"r#r$r rrr�writable)r'zPDispatcher.writablecCr"r#r$r rrr�handle_read_event,r'zPDispatcher.handle_read_eventcCr"r#r$r rrr�handle_write_event/r'zPDispatcher.handle_write_eventcCs<t�\}}}}|jjjj�dt|�|||f�|��dS)Nz:uncaptured python exception, closing channel %s (%s:%s %s))rr�config�options�logger�critical�repr�close)r�nil�t�v�tbinforrr�handle_error2s��zPDispatcher.handle_errorcCs0|js|jjjj�d|j|f�d|_dSdS)Nz#fd %s closed, stopped monitoring %sT)rrr+r,r-�debugrr rrrr0?s�
�zPDispatcher.closecCsdSr#rr rrr�flushEr'zPDispatcher.flushN)r�
__module__�__qualname__�__doc__rrr!r&r(r)r*r5r0r7rrrrrs
rc@steZdZdZdZdZdZdZdZdd�Z	dd�Z
d	d
�Zdd�Zd
d�Z
dd�Zdd�Zdd�Zdd�Zdd�ZdS)�POutputDispatcheraP
    A Process Output (stdout/stderr) dispatcher. Serves several purposes:

    - capture output sent within <!--XSUPERVISOR:BEGIN--> and
      <!--XSUPERVISOR:END--> tags and signal a ProcessCommunicationEvent
      by calling notify(event).
    - route the output to the appropriate log handlers as specified in the
      config.
    FN�c	Cs�||_||_||_|jj|_}|�|j|�t|jd|�}|r/tj|jjj	�
�d|d�|_|j|_
|jj}|jj}|t|�f|_|t|�f|_tjj|_|jj}|j	j|jk|_|j|_|j|_dS)z�
        Initialize the dispatcher.

        `event_type` should be one of ProcessLogStdoutEvent or
        ProcessLogStderrEvent
        z%s_capture_maxbytes�%(message)s)�fmt�maxbytesN)r�
event_typerr�_setup_loggingr+�getattrr
�handle_boundIOr,�	getLogger�
capturelog�mainlog�childlog�BEGIN_TOKEN�	END_TOKENr�begintoken_data�
endtoken_data�LevelsByName�DEBG�
mainlog_level�loglevel�log_to_mainlog�stdout_events_enabled�stderr_events_enabled)	rrr@rr�capture_maxbytes�
begintoken�endtokenr+rrrrYs0��
zPOutputDispatcher.__init__cCs�t|d|�}|sdSt|d|�}t|d|�}d}|dkr/t�d|t�d�|j|f�}tj|j�	�|||||d	�|_
t|d
|d�rV|jd}t�|j
|�dSdS)
z�
        Configure the main log according to the process' configuration and
        channel. Sets `mainlog` on self. Returns nothing.
        �
%s_logfileN�%s_logfile_maxbytes�%s_logfile_backupsr=�syslogzFSpecifying 'syslog' for filename is deprecated. Use %s_syslog instead.� )�filenamer>�rotatingr?�backupsz	%s_syslogFz %(message)s)rB�warnings�warn�DeprecationWarning�join�namer
�handle_filer,rDrF�
handle_syslog)rr+r�logfiler?r]r>rrrrA}s2���
�z POutputDispatcher._setup_loggingcCs:|j|jfD]}|dur|jD]
}|��|��qqdSr#)rFrE�handlers�remove�reopen�r�log�handlerrrr�
removelogs�s

��zPOutputDispatcher.removelogscCs2|j|jfD]}|dur|jD]}|��qqdSr#)rFrErfrhrirrr�
reopenlogs�s

��zPOutputDispatcher.reopenlogscCs�|ro|jj}|jjrt|�}|jr|j�|�|jrHt|t	�s"|}nz|�
d�}Wn
ty6d|}Ynwd}|jjj
|j||j|j|d�|jdkr_|jr]tt|j|jj|��dSdS|jrqtt|j|jj|��dSdSdS)Nzutf-8�Undecodable: %rz%%(name)r %(channel)s output:
%(data)s)rbr�data�stdout)rr+r,�
strip_ansi�stripEscapesrG�inforP�
isinstance�bytes�decode�UnicodeDecodeErrorr-rjrNrbrrQrr�pidrRr)rror+�text�msgrrr�_log�sF
�
�
������zPOutputDispatcher._logcCs�|jdur|j}d|_|�|�dS|jr|j\}}n|j\}}t|j�|kr)dS|j}d|_z
|�|d�\}}Wn)tybd}t	||�}|r[|j||d�|_|d|�}|�|�Yn
w|�|�|�
�||_|rw|��dSdS)Nr<r)rE�
output_bufferr{�capturemoderKrJr�split�
ValueErrorr�toggle_capturemode�
record_output)rro�token�tokenlen�before�after�indexrrrr��s8



�
�zPOutputDispatcher.record_outputcCs�|j|_|jdur\|jr|j|_dS|jjD]}|��q|j��}|j}|jjj	}|�
|j|jj|�}t|�d}|jjj
jj|||d�|jjD]
}|��|��qK|j|_dSdS)Nz-%(procname)r %(channel)s emitted a comm event)�procnamer)r}rErGrfr7�getvaluerrr+rbr@rxrr,r-r6rgrhrF)rrkrorr��eventrzrrrr��s*




�
�z$POutputDispatcher.toggle_capturemodecC�dSrrr rrrr(r'zPOutputDispatcher.writablecC�|jrdSdS�NFT�rr rrrr&�zPOutputDispatcher.readablecCs<|jjj�|j�}|j|7_|��|s|��dSdSr#)rr+r,�readfdrr|r�r0)rrorrrr)s�z#POutputDispatcher.handle_read_event)rr8r9r:r}rFrErGr|rrArlrmr{r�r�r(r&r)rrrrr;Hs"
$ $r;c@sxeZdZdZdZdZdZdZee�Z	ee�Z
dd�Zdd	�Zd
d�Z
dd
�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS)�PEventListenerDispatcherzN An output dispatcher that monitors and changes a process'
    listener_state Nr<sREADY
sRESULT cCs�t�||||�tj|j_d|j_d|_d|_t	|j
d|�}|rEt	|j
d|�}t	|j
d|�}tj|j
j
��|d|||d�|_dSdS)Nr<rVrWrXr=)r\r?r])rrr�ACKNOWLEDGEDr�listener_stater��result�	resultlenrBr+r
rcr,rDrG)rrrrrer?r]rrrr s$

��z!PEventListenerDispatcher.__init__cCs0|jdur|jjD]}|��|��q	dSdSr#)rGrfrgrh�rrkrrrrl7s

�z#PEventListenerDispatcher.removelogscCs(|jdur|jjD]}|��q	dSdSr#)rGrfrhr�rrrrm=s


�z#PEventListenerDispatcher.reopenlogscCr�rrr rrrr(Cr'z!PEventListenerDispatcher.writablecCr�r�r�r rrrr&Fr�z!PEventListenerDispatcher.readablecCs�|jjj�|j�}|r<|j|7_|jjj}d||j|f}|jjjj�	|�|j
r;|jjjjr5t|�}|j
�
|�n|��|��dS)Nz%r %s output:
%s)rr+r,r�r�state_bufferrbrr-r6rGrqrrrsr0�handle_listener_state_change)rror�rzrrrr)Ks
�z*PEventListenerDispatcher.handle_read_eventc
CsT|j}|sdS|j}|jj}|j}|tjkrd|_dS|tjkr[t|�|j	kr)dS|�
|j�rD|�tj
�|j	}|j|d�|_d|_n|�tj�d|_d|_|jrY|��dSdS|tj
krn|�tj�d|_d|_dS|tjk�r&|jdur�|�d�}|dkr�dS|jd|�}|j|dd�|_||jd�}zt|�|_Wnxty�zt|�}Wn
ty�d|}Ynw|jjj�d||f�|�tj�d|_tt||j��d|_YdSw|jt|j�}	|	�r	|j|jd|	�7_|j|	d�|_|jt|j�}	|	�s|�|j�d|j_d|_d|_|j�r(|��dSdSdS)Nr<�
���rrnz%s: bad result line: '%s')r�rr+rbr�r�UNKNOWNr�r�READY_FOR_EVENTS_LEN�
startswith�READY_FOR_EVENTS_TOKEN�_change_listener_state�READYr�r��BUSYr��find�RESULT_TOKEN_START_LEN�intrrrwr,r-r_rrr��
handle_result)
rrorr��stater��pos�result_liner��neededrrrr�_s�




�

���*z5PEventListenerDispatcher.handle_listener_state_changecCs�|j}|jj}|jjj}z|jjj�|j|�|�d|�|�	t
j�WdStyE|�
d|�|�	t
j�tt||j��YdS|�
d|�|�	t
j�tt||j��YdS)Nz%s: event was processedz%s: event was rejectedz%s: event caused an error)rr+rbr,r-�group�result_handlerr�r6r�rr��RejectEventr_rrr�)rr�rr�r-rrrr��s
z&PEventListenerDispatcher.handle_resultcCsj|j}|jj}|j}d|t|�t|�f}|jjj�|�||_|tj	kr3d|}|jjj�
|�dSdS)Nz%s: %s -> %sz�%s: has entered the UNKNOWN state and will no longer receive events, this usually indicates the process violated the eventlistener protocol)rr+rbr�r	r,r-r6rr�r_)r�	new_staterr��	old_staterzrrrr��s �
��z/PEventListenerDispatcher._change_listener_state)rr8r9r:rGr�r��RESULT_TOKEN_STARTrr�r�rrlrmr(r&r)r�r�r�rrrrr�s"Wr�c@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�PInputDispatcherz Input (stdin) dispatcher cCst�||||�d|_dS)Nr<)rr�input_bufferrrrrr�s
zPInputDispatcher.__init__cCs|jr|jsdSdS)NTF)r�rr rrrr(�szPInputDispatcher.writablecCr�rrr rrrr&�r'zPInputDispatcher.readablecCs*|jjj�|j|j�}|j|d�|_dSr#)rr+r,�writerr�)r�sentrrrr7�s�zPInputDispatcher.flushc
Csb|jr/z|��WdSty.}z|jdtjkr"d|_|��n�WYd}~dSd}~wwdS)Nrr<)r�r7�OSError�args�errno�EPIPEr0)r�whyrrrr*�s
����z#PInputDispatcher.handle_write_eventN)	rr8r9r:rr(r&r7r*rrrrr��sr�s[)�H�f�A�B�C�D�R�s�u�J�K�h�l�p�mcCs�d}d}d}t|�}||krG|dkr|||d�tvrd}n |r?|�t|�}|dkr3|||d�S||||�}|}d}|d7}||ks|S)z>
    Remove all ANSI color escapes from the given string.
    r<rrr�N)r�ANSI_TERMINATORSr��ANSI_ESCAPE_BEGIN)�sr��show�i�L�nrrrrr�s"�rrc@seZdZdZdS)r�zY The exception type expected by a dispatcher when a handler wants
    to reject an event N)rr8r9r:rrrrr�sr�cCs|dkrt|��dS)NsOK)r�)r��responserrr�default_handlers�r�)r^r��supervisor.medusa.asyncore_25r�supervisor.compatr�supervisor.eventsrrrr�supervisor.statesrr	�
supervisorr
rrr;r�r�r�r�rr�	Exceptionr�r�rrrr�<module>s.4NG