HEX
Server: nginx/1.24.0
System: Linux prod-btpayments-io 6.14.0-1018-aws #18~24.04.1-Ubuntu SMP Mon Nov 24 19:46:27 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 8.3.19
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/supervisor/__pycache__/supervisorctl.cpython-312.pyc
�

���fb���$�dZddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddlm
Z
ddlmZddlmZddl
mZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZGd�d�ZGd�d�Zej4j6ej4j8ej4j:fZGd�dej>�Z Gd�dejB�Z"d�Z#Gd�d�Z$d�Z%d�Z&Gd�de$�Z'd d�Z(e)dk(re(�yy)!a�supervisorctl -- control applications run by supervisord from the cmd line.

Usage: %s [options] [action [arguments]]

Options:
-c/--configuration FILENAME -- configuration file path (searches if not given)
-h/--help -- print usage message and exit
-i/--interactive -- start an interactive shell after executing commands
-s/--serverurl URL -- URL on which supervisord server is listening
     (default "http://localhost:9001").
-u/--username USERNAME -- username to use for authentication with server
-p/--password PASSWORD -- password to use for authentication with server
-r/--history-file -- keep a readline history (if readline is available)

action [arguments] -- see below

Actions are commands like "tail" or "stop".  If -i is specified or no action is
specified on the command line, a "shell" interpreting actions typed
interactively is started.  Use the action "help" to find out about available
actions.
�N)�	xmlrpclib)�urlparse)�unicode)�	raw_input)�	as_string)�asyncore_25)�
ClientOptions��
make_namespec)�split_namespec)�xmlrpc)�states)�http_clientc�(�eZdZdZdZdZdZdZdZdZ	y)	�LSBInitExitStatusesr������N)
�__name__�
__module__�__qualname__�SUCCESS�GENERIC�INVALID_ARGS�UNIMPLEMENTED_FEATURE�INSUFFICIENT_PRIVILEGES�
NOT_INSTALLED�NOT_RUNNING���:/usr/lib/python3/dist-packages/supervisor/supervisorctl.pyrr/s'���G��G��L������M��Kr#rc��eZdZdZdZy)�LSBStatusExitStatusesrrN)rrrr!�UNKNOWNr"r#r$r&r&8s���K��Gr#r&c�:�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
y	)
�fgthreadz� A subclass of threading.Thread, with a kill() method.
    To be used for foreground output/error streaming.
    http://mail.python.org/pipermail/python-list/2004-May/260937.html
    c�&�tjj|�d|_||_||_t
j�|_t
j|j|j
jj|j
jj�|_
t
j|j|j
jj|j
jj�|_y)NF)�	threading�Thread�__init__�killed�program�ctlr�Listener�listener�HTTPHandler�options�username�password�output_handler�
error_handler)�selfr/r0s   r$r-zfgthread.__init__Fs������!�!�$�'����������#�,�,�.��
�)�5�5�d�m�m�6:�h�h�6F�6F�6O�6O�6:�h�h�6F�6F�6O�6O�Q���)�4�4�T�]�]�59�X�X�5E�5E�5N�5N�59�X�X�5E�5E�5N�5N�P��r#c��|j|_|j|_tjj|�y�N)�run�_fgthread__run_backup�_fgthread__runr+r,�start�r9s r$r?zfgthread.startSs-�� �H�H����:�:��������t�$r#c�H�|jj|jjjd|j
z�|jj|jjjd|j
z�tj�y)Nz/logtail/%s/stdoutz/logtail/%s/stderr)	r7�getr0r4�	serverurlr/r8�asyncore�loopr@s r$r<zfgthread.runYsq���������� 0� 0� :� :� 4�t�|�|� C�	E������t�x�x�/�/�9�9�3�d�l�l�B�	D��
�
�r#c��tj|j�|j�|j|_yr;)�sys�settrace�globaltracer=r<r@s r$�__runzfgthread.__run`s-�����T�%�%�&������$�$��r#c�&�|dk(r|jSy)N�call)�
localtrace�r9�frame�why�args    r$rIzfgthread.globaltracefs���&�=��?�?�"�r#c�P�|jr|dk(r
t��|jS)N�line)r.�
SystemExitrMrNs    r$rMzfgthread.localtracels"���;�;��f�}� �l�"����r#c�z�|jj�|jj�d|_y)NT)r7�closer8r.r@s r$�killz
fgthread.killrs-�����!�!�#���� � �"���r#N)rrr�__doc__r-r?r<r>rIrMrWr"r#r$r)r)@s+���
P�%��%���r#r)c��eZdZ		dd�Zd�Zd�Zd�Zdd�Zd�Zd�Z	d	�Z
d
�Zdd�Zd�Z
dd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zy)�
ControllerNc�P�||_|jjdz|_g|j_dg|_d|_t
j|_tjj||||�|jjD]�\}}}||fi|��}t|�D]H}	|	jd�s�tt||	��s�+|jj!|	dd��J|jjj!|�||_��y)Nz> �help�do_r)r4�prompt�plugins�vocab�_complete_inforr�
exitstatus�cmd�Cmdr-�plugin_factories�dir�
startswith�callable�getattr�append�name)
r9r4�completekey�stdin�stdoutrk�factory�kwargs�plugin�as
          r$r-zController.__init__ys�������l�l�)�)�D�0���!������X��
�"���-�5�5���������{�E�6�:�%)�\�\�%B�%B�	�!�D�'�6��T�,�V�,�F���[�
-���<�<��&�8�G�F�A�4F�+G��J�J�%�%�a���e�,�
-�
�L�L� � �'�'��/��F�K�
	r#c��yr;r"r@s r$�	emptylinezController.emptyline�s��r#c�V�|jd|z�tj|_y)Nz*** Unknown syntax: %s)�outputrrrb)r9rSs  r$�defaultzController.default�s!�����,�t�3�4�-�5�5��r#c����	ddl��j�}|jdd�}|jdd�}|jdd�}�j|��jr7	�j�j���fd�}ddl}|j|�	|jjd�|j�y#t$rY�SwxYw#t$rY�GwxYw#t$r|jd�YywxYw)Nr�:��*�-c�\��	�j�j�y#t$rYywxYwr;)�write_history_file�history_file�IOError)r4�readlines��r$�savez%Controller.exec_cmdloop.<locals>.save�s.���� �3�3�G�4H�4H�I��"����s��	+�+�status)r��get_completer_delims�replace�set_completer_delimsr�read_history_filer��atexit�register�ImportError�cmdqueuerj�cmdloop�KeyboardInterruptrv)r9�argsr4�delimsr�r�r�s  `   @r$�exec_cmdloopzController.exec_cmdloop�s����	���2�2�4�F��^�^�C��,�F��^�^�C��,�F��^�^�C��,�F��)�)�&�1��#�#���.�.�w�/C�/C�D�������%�	��M�M� � ��*��L�L�N��������	��	��
!�	��K�K��O��	�sH�A'C�,C�C�#+C-�	C�C�C�C�	C*�)C*�-D
�	D
c��||tjjfvry|tvrtj
|_ytj|_yr;)r
�Faultsr�DEAD_PROGRAM_FAULTSrr!rbr)r9�	faultcode�ignored_faultcodes   r$� set_exitstatus_from_xmlrpc_faultz+Controller.set_exitstatus_from_xmlrpc_fault�s@���*�F�M�M�,A�,A�B�B��
�-�
-�1�=�=�D�O�1�9�9�D�Or#c	���|j|�\}}}|s|j�S|�|j|�Sd|_||_|dk(r|j|�S|j|�}|�|j|�S		||�S#tj$r�}|jdk(r�|jjr{|jd�td�}tjd��}|jd�||j_||j_|j!|�cYd}~S|jd�t"j$|_nt"j$|_�Yd}~nd}~wwxYw||�y#t($rTt+j,�\\}}	}}
}}d|
�d	|�d
|�d|��}
|j|
�t"j$|_YywxYw)z� Override the onecmd method to:
          - catch and print all exceptions
          - call 'do_foo' on plugins rather than ourself
        Nrzi�zServer requires authenticationz	Username:z	Password:)r^zerror: z, z: file: z line: )�	parselinertrwra�lastcmd�_get_do_funcr�
ProtocolError�errcoder4�interactivervr�getpassr5r6�onecmdrrrb�	ExceptionrD�compact_traceback)r9rSrcrQ�do_func�er5r6�file�fun�t�v�tbinfo�errors              r$r�zController.onecmd�s���
����-���S�$���>�>�#�#��;��<�<��%�%�"�������"�9��<�<��%�%��'�'��,�G����|�|�D�)�)�
>��"�3�<�'�� �.�.���y�y�C�'��<�<�3�3� �K�K�(H�I�'0��'=�H�'.���k�'J�H� �K�K��O�4<�D�L�L�1�4<�D�L�L�1�#'�;�;�t�#4�4� �K�K�(H�I�.A�.I�.I�D�O�*=�*E�*E����,���� �����
>�2:�2L�2L�2N�/�!��s�D�1�a��>?��D�$�O�����E�"�"5�"=�"=���	
>�sD�B
�
F� BF�:F�;F�=F�=F�F�F�AG0�/G0c��d|z}t||d�}|s-|jjD]}t||d�}|��|S|S)Nr])rir4r_)r9rc�	func_name�funcrqs     r$r�zController._get_do_func�sX���C�K�	��t�Y��-����,�,�.�.�
���v�y�$�7���#����	
��r#c��t|t�r|jd�}|jj	|dz�y)Nzutf-8�
)�
isinstancer�encodern�write)r9�messages  r$rvzController.output�s0���g�w�'��n�n�W�-�G������'�D�.�)r#c�$�|jd�S)N�
supervisor)�get_server_proxyr@s r$�get_supervisorzController.get_supervisor�s���$�$�\�2�2r#c�V�|jj�}|�|St||�Sr;)r4�getServerProxyri)r9�	namespace�proxys   r$r�zController.get_server_proxy�s,�����+�+�-�����L��5�)�,�,r#c���	|j�}|j�}ddlm}||jk7r8|jd|j�d|�d��tj|_y	y
#tj$rm}|jtjjk(r+|jd�tj|_Yd}~ytj |_�d}~wt"j$$r�}|j&dt(j*k(rB|jd|j,j.z�tj0|_Yd}~y|j&dt(j2k(rB|jd	|j,j.z�tj4|_Yd}~ytj |_�d}~wwxYw)Nr)�rpcinterfacezRSorry, this version of supervisorctl expects to talk to a server with API version z, but the remote version is �.Fz�Sorry, supervisord responded but did not recognize the supervisor namespace commands that supervisorctl uses to control it.  Please check that the [rpcinterface:supervisor] section is enabled in the configuration file (see sample.conf).z%s refused connectionz%s no such fileT)r��
getVersionr�r��API_VERSIONrvrr rbr�Fault�	faultCoder
r��UNKNOWN_METHODrr�socketr�r��errno�ECONNREFUSEDr4rCr�ENOENTr!)r9r��apir�r�s     r$�upcheckzController.upchecksn��!	��,�,�.�J��'�'�)�C�/��l�.�.�.����0<�/G�/G��N�O�#6�"C�"C����
/�<��/���	��{�{�f�m�m�:�:�:����<�=�#6�"K�"K����1�9�9�D�O����|�|�
	��v�v�a�y�E�.�.�.����3�d�l�l�6L�6L�L�M�"5�"M�"M���������e�l�l�*����-����0F�0F�F�G�"5�"A�"A����1�9�9�D�O���
	�s9�A,A1�1G!�A
C,�C,�,G!�AG�$AG�G�G!c��|�ddl}|j�}g}|j�s|j|�}n�|j	�}|d}t|�dk(r#|j
d�s|j|�}nA|dvr|j|�}n+|dvr|j|�}n|dvr|j|�}t|�|kDr||Sy)aaCompleter function that Cmd will register with readline using
        readline.set_completer().  This function will be called by readline
        as complete(text, state) where text is a fragment to complete and
        state is an integer (0..n).  Each call returns a string with a new
        completion.  When no more are available, None is returned.Nrr� r\)�add�remove�update)	�clear�fg�pid�restart�signalr?r��stop�tail)	r��get_line_buffer�strip�_complete_actions�split�len�endswith�_complete_groups�_complete_processes)r9�text�staterSr��matches�words�actions        r$�completezController.complete%s����<���+�+�-�D����z�z�|��,�,�T�2�G��J�J�L�E��1�X�F��5�z�Q��t�}�}�S�'9��0�0��6���F�#��0�0��6���6�6��/�/��5���?�?��2�2�4�8���w�<�%���5�>�!� r#c�j�|jD�cgc]}|j|�s�|dz��c}Scc}w)z5Build a completion list of action names matching textr�)r`rg)r9r�rrs   r$r�zController._complete_actionsFs)��"&�*�*�C�Q����T�0B��S��C�C��Cs�0�0c��g}|j�D]}|d|vs�|j|d�� |D�cgc]}|j|�s�|dz��c}Scc}w)z4Build a completion list of group names matching text�groupr���_get_complete_inforjrg)r9r��groups�info�gs     r$r�zController._complete_groupsJs`�����+�+�-�	-�D��G�}�F�*��
�
�d�7�m�,�	-�#)�@�Q�A�L�L��,>��S��@�@��@s�A�Ac�H�g}|j�D]d}d|vs|d|dk7r?|j|d�d|d���d|dz|vs�9|jd|dz��Q|j|d��f|D�cgc]}|j|�s�|dz��c}Scc}w)z6Build a completion list of process names matching textryrkr�z%s:*r�r�)r9r��	processesr��ps     r$r�zController._complete_processesRs����	��+�+�-�	/�D��d�{�d�6�l�d�7�m�;�� � �D��M�4��<�!H�I��D��M�)��:��$�$�V�d�7�m�%;�<�� � ��f��.�
	/�#,�C�Q�q�|�|�D�/A��S��C�C��Cs�>B�Bc�x�|j�#|j�j�|_|jS)z�Get all process info used for completion.  We cache this between
        commands to reduce XML-RPC calls because readline may call
        complete() many times if the user hits tab only once.)rar��getAllProcessInfor@s r$r�zController._get_complete_info^s6�����&�"&�"5�"5�"7�"I�"I�"K�D���"�"�"r#c��|j�dk(r|j�y|jjD]}|j	|��y)Nr\)r��	help_helpr4r_�do_help)r9rQrqs   r$r�zController.do_helpfs?���9�9�;�&� ��N�N���,�,�.�.�
$�����s�#�
$r#c�H�|jd�|jd�y)Nz'help		Print a list of available actionsz%help <action>	Print help for <action>�rvr@s r$r�zController.help_helpms�����?�@����<�=r#c�&�|jd�y)Nrzrr��r9rQs  r$�do_EOFzController.do_EOFqs�����B��r#c�&�|jd�y)Nz(To quit, type ^D or use the quit commandr�r@s r$�help_EOFzController.help_EOFus�����>�?r#)�tabNNr;)rrrr-rtrwr�r�r�r�rvr�r�r�r�r�r�r�r�r�r�r�r�r"r#r$rZrZwst��9=���"�6��@:�+>�Z�*�
3�-�#�J"�BD�A�
D�#�$�>��@r#rZc��g}|jg}|rF|jd�}|jr|t|j�z}|t	|�z}|r�F|S)Nr)�	__class__�pop�	__bases__�listrf)�inst�names�classes�aclasss    r$�	get_namesrxs[���E��~�~��G�
����Q��������V�%5�%5� 6�6�G���F��#��	�
�Lr#c�2�eZdZdZd�Zd�Zee�Zd�Zy)�ControllerPluginBase�unnamedc��||_yr;)r0)r9�
controllers  r$r-zControllerPluginBase.__init__�s	����r#c� �d|jzS)Nz %s commands (type help <topic>):)rkr@s r$�_doc_headerz ControllerPluginBase._doc_header�s��1�D�I�I�=�=r#c�(�|r	t|d|z�}|�yt
|�}g}g}i}|D]}|dddk(s�d||dd<�|j�d}	|D]j}|dddk(s�||	k(r�|}	|dd}
|
|vr|j|
�||
=�2t||�jr|j|
��Z|j|
��l|jj	d�|jj|j|dd�y#t$r	t|d|z�j}|r|jj	|�Yyn#t$rYnwxYw|jj	|jj
|fz�YywxYw)	N�help_r]rrrzr��P)ri�AttributeErrorrXr0rv�nohelpr�sortrj�print_topics�
doc_header)r9rQr��docr�cmds_doc�
cmds_undocr\rk�prevnamercs           r$r�zControllerPluginBase.do_help�s����
��t�W�s�]�3��
�F��d�O�E��H��J��D��
%�����8�w�&�#$�D��a�b��N�
%�
�J�J�L��H��
/�����8�u�$��x�'� �#�H��Q�R��C��d�{� ����,� ��I� ��t�,�4�4� ����,�"�)�)�#�.�
/�
�H�H�O�O�B���H�H�!�!�$�/�/�8�R��D��I"�	
��!�$����4�<�<�C��������,����&���������������3�&� 8�9��	
�s5�D	�		F�6E�F�	E�F�E�6F�FN)	rrrrkr-r�propertyrr�r"r#r$rr�s!���D��>��+�&�J�)Er#rc��ttjdd�xsd}|j�j	d�rdStjj
S)N�encodingrz�utf)rirGrn�lowerrgr)�encs r$�
not_all_langsr�sA��
�#�*�*�j�$�
/�
5�2�C��9�9�;�)�)�%�0�4�I�c�j�j�6I�6I�Ir#c�F�t�}|r|jd|z�yy)Nz�Warning: sys.stdout.encoding is set to %s, so Unicode output may fail. Check your LANG and PYTHONIOENCODING environment settings.)rrv)r0�problematic_encs  r$�check_encodingr"�s*��#�o�O���
�
�+�-<�=�	>�r#c�B�eZdZdZdZd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Ze
Zd
�Z
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd4d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d�Z"d �Z#d!�Z$d"�Z%d#�Z&d$�Z'd%�Z(d&�Z)d'�Z*d(�Z+d)�Z,d*�Z-d+�Z.d,�Z/d-�Z0d.�Z1d/�Z2d0�Z3d1�Z4d2�Z5d5d3�Z6y)6�DefaultControllerPluginrwNc�r�t|j�|jjd�|jjj}|jjj
}d}	|j�tj�}n|j}tj|||�}|j|jjj|�tj�y#t$r0|r|j�|jjd�YywxYw)N�==> Press Ctrl-C to exit <==rz)r"r0rvr4r5r6r2rr1r3rBrCrDrEr�rV)r9�pathr5r6�handlerr2s      r$�_tailfzDefaultControllerPlugin._tailf�s����t�x�x� ������6�7��8�8�#�#�,�,���8�8�#�#�,�,����	��}�}�$�&�/�/�1���=�=��!�-�-�h��(�K�G��K�K����(�(�2�2�D�9��M�M�O�� �	���
�
���H�H�O�O�B���		�s�4BC=�=6D6�5D6c��|jj�sy|j�}t|�dkrK|jj	d�t
j|j_|j�yt|�dkDrK|jj	d�t
j|j_|j�yd}|djd�r|jd�}t|�dk(r|d}d}n�|rZ|d}|dj�}|d	vry|jj	d
|z�t
j|j_y|jj	d�t
j|j_yd}|�|dd}|d
k(rd}n	t|�}|jj�}|�|jd|�d|���St|j�	|dk(r|j!||d�}	n|j#||d�}	|jj	|	�y#|jj	d|z�t
j|j_YyxYw#t$j&$�r}
t
j|j_d}|
j(t*j,j.k(r!|jj	||dfz�n�|
j(t*j,j0k(r!|jj	||dfz�nN|
j(t*j,j2k(r!|jj	||dfz�n�Yd}
~
yYd}
~
yYd}
~
yd}
~
wwxYw)NrzError: too few argumentsr�Error: too many argumentsrr|���rn)�stderrrnzError: bad channel %rz!Error: tail requires process name�@�f�Error: bad argument %sz	/logtail/�/�%s: ERROR (%s)�no log file�unknown error reading logzno such process name)r0r�r�r�rvrrrb�	help_tailrgr�r�intr�r)r"�readProcessStdoutLog�readProcessStderrLogrr�r�r
r��NO_FILE�FAILED�BAD_NAME)r9rQr��modifierrk�channel�bytes�whatr�rvr��templates            r$�do_tailzDefaultControllerPlugin.do_tail�s#���x�x���!���y�y�{���t�9�q�=��H�H�O�O�6�7�"5�"=�"=�D�H�H���N�N���
��Y��]��H�H�O�O�7�8�"5�"=�"=�D�H�H���N�N�������7���c�"��x�x��{�H��t�9��>���8�D��G���A�w���r�(�.�.�*���"6�6��H�H�O�O�$;�g�$E�F�*=�*E�*E�D�H�H�'������� C�D�&9�&A�&A����#�������A�B�<�D��s�{������I�E��X�X�,�,�.�
��=��;�;�4��A�B�B�
�4�8�8�$�
(��h�&�'�<�<�T�>C�V�Q�H�F�(�<�<�T�>C�V�Q�H�F� ������'��C��H�H�O�O�$<�x�$G�H�*=�*E�*E�D�H�H�'��� �?�?�
�&9�&A�&A����#�+���;�;�&�-�-�"7�"7�7��H�H�O�O�H��m�/D�$D�E��[�[�F�M�M�$8�$8�8��H�H�O�O�H��-H�0J�%J�K��[�[�F�M�M�$:�$:�:��H�H�O�O�H��-C�0E�%E�F��F�K�F��	
�s%�I"�.J&�"?J#�&O�:C:O�Oc�:�|jjd�y)Nz�tail [-f] <name> [stdout|stderr] (default stdout)
Ex:
tail -f <name>		Continuous tail of named process stdout
			Ctrl-C to exit.
tail -100 <name>	last 100 *bytes* of process stdout
tail <name> stderr	last 1600 *bytes* of process stderr�r0rvr@s r$r5z!DefaultControllerPlugin.help_tail3s�������
F�	r#c��|jj�sy|j�}t|�dkDrK|jj	d�t
j|j_|j�yt|�dk(r�|djd�r/|ddd}|dk(rd}|j|�S	t|�}|}nC|jj	d|dz�t
j|j_yd}|jj�}	|j|d�}|jj	|�y#|jj	d|dz�t
j|j_YyxYw#tj$r�}t
j|j_d	}	|j t"j$j&k(r|jj	|	d
z�nL|j t"j$j(k(r|jj	|	dz�n�Yd}~yYd}~yd}~wwxYw)Nrr+rr|r/z/mainlogtailr0r.r2)�supervisordr3)rEr4)r0r�r�r�rvrrrb�
help_maintailrgr)r6r��readLogrr�r�r
r�r9r:)
r9rQr�r?r'r>r�rvr�r@s
          r$�do_maintailz#DefaultControllerPlugin.do_maintail=s���x�x���!���y�y�{���t�9�q�=��H�H�O�O�7�8�"5�"=�"=�D�H�H����� ��
��Y�!�^��A�w�!�!�#�&��A�w�q�r�{���3�;�)�D��;�;�t�,�,�!��t�9�D�!�E������ 8�4��7� B�C�&9�&A�&A����#���E��X�X�,�,�.�
�
	$��'�'����2�F�
�H�H�O�O�F�#��;��H�H�O�O�$<�t�A�w�$F�G�*=�*E�*E�D�H�H�'������		�"5�"=�"=�D�H�H��'�H��{�{�f�m�m�3�3�3�������+I� I�J�����
�
� 4� 4�4�������,F�!F�G��G�K��			�s&�E#�4F*�#AF'�*I:�=B.I5�5I:c�:�|jjd�y)Nz�maintail -f 	Continuous tail of supervisor main log file (Ctrl-C to exit)
maintail -100	last 100 *bytes* of supervisord main log file
maintail	last 1600 *bytes* of supervisor main log file
rCr@s r$rFz%DefaultControllerPlugin.help_maintailps�������
H�	r#c�8�|jj|�Sr;)r0r�r�s  r$�do_quitzDefaultControllerPlugin.do_quitxs���x�x���s�#�#r#c�:�|jjd�y)Nzquit	Exit the supervisor shell.rCr@s r$�	help_quitz!DefaultControllerPlugin.help_quit{��������:�;r#c�:�|jjd�y)Nzexit	Exit the supervisor shell.rCr@s r$�	help_exitz!DefaultControllerPlugin.help_exit�rNr#c�\�gd}}t|�D]F\}}|jt|d|d��t||�|kDs�9t||�}�Hdt	|dz�zdz}t|�D]2\}}||||d|dd	�z}|j
j
|��4y)
N�r�rkz%(namespec)-rzs%(state)-10s%(desc)s�	statename�description)�namespecr��desc)�	enumeraterjrr��strr0rv)r9�
process_infos�	namespecs�maxlen�ir�r@rSs        r$�_show_statusesz&DefaultControllerPlugin._show_statuses�s�����6�	� ��/�	+�G�A�t����]�4��=�$�v�,�G�H��9�Q�<� �6�)��Y�q�\�*��	+�
"�C��q��M�1�4K�K�� ��/�	"�G�A�t��9�Q�<�(,�[�(9�'+�M�':�<�<�D�
�H�H�O�O�D�!�		"r#c���|jj�s tj|j_y|jj�}|j
�}t|�j�}|rd|vr|}n�g}|D]�}d}t|�\}}	|D].}
|
d|k(}|	�|xr|
d|	k(}|s�d}|j|
��0|s�I|	�d|z}nd|z}|jj|�tj|j_��|j|�|D]7}
|
dtjvs�tj|j_�9y)	N�allTr�rkF�%s: ERROR (no such group)z%s: ERROR (no such process)r�)r0r�r&r'rbr�r�rr�rrjrvr]r�STOPPED_STATESr!)
r9rQr��	all_infosr�matching_infosrk�bad_name�
group_name�process_namer��matched�msgs
             r$�	do_statusz!DefaultControllerPlugin.do_status�se���x�x���!�"7�"?�"?�D�H�H����X�X�,�,�.�
��0�0�2�	��#��$�$�&������&�N��N��
H����+9�$�+?�(�
�L�%�4�D�"�7�m�z�9�G�#�/�")�"J�d�6�l�l�.J���#(��&�-�-�d�3�4��#�+�9�J�F��;�d�B���H�H�O�O�C�(�*?�*G�*G�D�H�H�'�'
H�(	
���N�+�"�	H�D��G�}�� 5� 5�5�&;�&G�&G����#�	Hr#c���|jjd�|jjd�|jjd�|jjd�y)Nz.status <name>		Get status for a single processz8status <gname>:*	Get status for all processes in a groupz<status <name> <name>	Get status for multiple named processesz$status			Get all process status inforCr@s r$�help_statusz#DefaultControllerPlugin.help_status�sN�������J�K������/�	0������$�	%������A�Br#c�X�|jj�}|jj�sy|j�}|s5|j	�}|jjt
|��yd|vr=|j�D])}|jjt
|d���+y|D]b}	|j|�}|d}|jjt
|��|dk(s�Dtj|j_�dy#tj$rp}tj|j_|jt j"j$k(r|jjd|z�n�Yd}~��d}~wwxYw)Nr_r�rzNo such process %s)r0r�r�r��getPIDrvrXr��getProcessInforr!rbrr�rr�r
r�r;)r9rQr�rr�r�rkr�s        r$�do_pidzDefaultControllerPlugin.do_pid�sM���X�X�,�,�.�
��x�x���!���	�	�����#�#�%�C��H�H�O�O�C��H�%�
�e�^�"�4�4�6�
2��������D��K� 0�1�
2��

N��N�%�4�4�T�:�D��u�+�C��H�H�O�O�C��H�-��a�x�.A�.M�.M����+�

N��!����*=�*E�*E�D�H�H�'��{�{�f�m�m�&<�&<�<������(<�t�(C�D��E���s�D&�&F)�9A&F$�$F)c��|jjd�|jjd�|jjd�y)Nz!pid			Get the PID of supervisord.z:pid <name>		Get the PID of a single child process by name.z;pid all			Get the PID of every child process, one per line.rCr@s r$�help_pidz DefaultControllerPlugin.help_pid�s=�������>�?������%�	&������%�	&r#c�J�t|d|d�}|d}d}|tjjk(r||dfzS|tjjk(r||dfzS|tjj
k(r||dfzS|tjjk(r||dfzS|tjjk(r||d	fzS|tjjk(r||d
fzS|tjjk(rd|zStd|�d
|����)Nr�rkr�r2�no such processzno such filezfile is not executablezalready startedzspawn errorzabnormal termination�%s: started�Unknown result code � for )rr
r�r;r9�NOT_EXECUTABLE�ALREADY_STARTED�SPAWN_ERROR�ABNORMAL_TERMINATIONr�
ValueError�r9�resultrk�coder@s     r$�_startresultz$DefaultControllerPlugin._startresult�s"���V�G�_�f�V�n�=���h���#���6�=�=�)�)�)��t�%6�7�7�7�
�V�]�]�*�*�
*��t�^�4�4�4�
�V�]�]�1�1�
1��t�%=�>�>�>�
�V�]�]�2�2�
2��t�%6�7�7�7�
�V�]�]�.�.�
.��t�]�3�3�3�
�V�]�]�7�7�
7��t�%;�<�<�<�
�V�]�]�*�*�
*� �4�'�'��D�$�G�H�Hr#c�H�|jj�sy|j�}|jj�}|sK|jj	d�t
j|j_|j�yd|vry|j�}|D]c}|jj	|j|��|jj|dtjj��ey|D]�}t|�\}}|�{	|j!|�}|D]c}|jj	|j|��|jj|dtjj��e��	|j-|�}t/||�}|jj	d|z���y#t"j$$r�}	|	j&tjj(k(r@d|z}
|jj	|
�t
j|j_n t
j*|j_�Yd}	~	��md}	~	wwxYw#t"j$$r�}	|	j&|||	j0d�}
|jj	|j|
��|jj|
dtjj�Yd}	~	��
d}	~	wwxYw)Nz$Error: start requires a process namer_r�r`rt�r�rkr�rT)r0r�r�r�rvrrrb�
help_start�startAllProcessesrr�r
r�rxr�startProcessGrouprr�r�r;r�startProcessr�faultString�r9rQrr��resultsr}rkrerfr�r�s           r$�do_startz DefaultControllerPlugin.do_start�sx���x�x���!���	�	����X�X�,�,�.�
���H�H�O�O�B�C�"5�"B�"B�D�H�H���O�O����E�>� �2�2�4�G�!�
k�������� 1� 1�&� 9�:����9�9�&��:J�F�M�M�Li�Li�j�
k��
>��+9�$�+?�(�
�L��'�"�",�">�">�z�"J��&-�w�F� �H�H�O�O�D�,=�,=�f�,E�F� �H�H�E�E�f�X�FV�X^�Xe�Xe�Xu�Xu�v�w�>�!+�!8�!8��!>�� -�Z��F�������
��(<�=�9
>��%�?�?�"��;�;�&�-�-�*@�*@�@�$?�*�$L�E� �H�H�O�O�E�2�2E�2R�2R�D�H�H�/�2E�2M�2M�D�H�H�/�!�0��	"��%�?�?�r�+,�;�;�*6�+5�12���!@��������(9�(9�%�(@�A����A�A�%��/�SY�S`�S`�Sp�Sp�q�q��
r�s3�&A9G�!J�J�2BI?�?J�L!�A<L�L!c���|jjd�|jjd�|jjd�|jjd�y)Nzstart <name>		Start a processz/start <gname>:*		Start all processes in a groupz6start <name> <name>	Start multiple processes or groupszstart all		Start all processesrCr@s r$r�z"DefaultControllerPlugin.help_start,sI�������9�:������K�L������E�	G������:�;r#c��t|d|d�}|d}|d}d}|tjjk(r||dfzS|tjjk(r||dfzS|tjj
k(r||dfzS|tjjk(r|�d	|��S|tjjk(r|Std
|�d|����)Nr�rkr�rTr2rszbad signal nameznot running�: rurv)	rr
r�r;�
BAD_SIGNALr!rr:r{)r9r}�successrkr~�fault_stringr@s       r$�
_signalresultz%DefaultControllerPlugin._signalresult3s����V�G�_�f�V�n�=���h����m�,��#���6�=�=�)�)�)��t�%6�7�7�7�
�V�]�]�-�-�
-��t�%6�7�7�7�
�V�]�]�.�.�
.��t�]�3�3�3�
�V�]�]�*�*�
*�#�W�-�-�
�V�]�]�)�)�
)����D�$�G�H�Hr#c�(�|j|d��S)N�stopped)r�)r�)r9r}s  r$�_stopresultz#DefaultControllerPlugin._stopresultEs���!�!�&�)�!�<�<r#c�
�|jj�sy|j�}|jj�}|sK|jj	d�t
j|j_|j�yd|vry|j�}|D]c}|jj	|j|��|jj|dtjj��ey|D]�}t|�\}}|�{	|j!|�}|D]c}|jj	|j|��|jj|dtjj��e��	|j+|�t-||�}|jj	d|z���y#t"j$$rs}	t
j|j_|	j&tjj(k(r!d|z}
|jj	|
�n�Yd}	~	��Nd}	~	wwxYw#t"j$$r�}	|	j&|||	j.d�}
|jj	|j|
��|jj|
dtjj�Yd}	~	���d}	~	wwxYw)Nz#Error: stop requires a process namer_r�r`z%s: stoppedr�)r0r�r�r�rvrrrb�	help_stop�stopAllProcessesr�r�r
r�r!r�stopProcessGrouprr�r�r;�stopProcessrr�r�s           r$�do_stopzDefaultControllerPlugin.do_stopHsc���x�x���!���	�	����X�X�,�,�.�
���H�H�O�O�A�B�"5�"=�"=�D�H�H���N�N����E�>� �1�1�3�G�!�
g�������� 0� 0�� 8�9����9�9�&��:J�F�M�M�Le�Le�f�
g��
>��+9�$�+?�(�
�L��'�"�",�"=�"=�j�"I��&-�s�F� �H�H�O�O�D�,<�,<�V�,D�E� �H�H�E�E�f�X�FV�X^�Xe�Xe�Xq�Xq�r�s�>�"�.�.�t�4� -�Z��F�������
��(<�=�9
>��%�?�?�"�.A�.I�.I����+��;�;�&�-�-�*@�*@�@�$?�*�$L�E� �H�H�O�O�E�2�!�3��	"��%�?�?�n�+,�;�;�)5�*4�/0�}�}�!>��������(8�(8��(?�@����A�A�%��/�SY�S`�S`�Sl�Sl�m�m��
n�s3�&A9G�!I(�I%�2A(I � I%�(L�;A<K=�=Lc���|jjd�|jjd�|jjd�|jjd�y)Nzstop <name>		Stop a processz-stop <gname>:*		Stop all processes in a groupz4stop <name> <name>	Stop multiple processes or groupszstop all		Stop all processesrCr@s r$r�z!DefaultControllerPlugin.help_stopysF�������7�8������I�J������O�P������8�9r#c��|jj�sy|j�}t|�dkrK|jj	d�|j�tj|j_y|d}|dd}|jj�}d|vra|j|�}|D]J}|jj	|j|��|jj|d��Ly|D]�}t|�\}	}
|
�c	|j|	|�}|D]J}|jj	|j|��|jj|d��L�v	|j+||�t-|	|
�}|jj	d|z���y#tj $rs}|j"t$j&j(k(r@d|	z}|jj	|�tj|j_n�Yd}~��7d}~wwxYw#tj $rn}|j"|
|	|j.d	�}|jj	|j|��|jj|d�Yd}~���d}~wwxYw)
Nrz7Error: signal requires a signal name and a process namerrr_r�r`z
%s: signalledr�)r0r�r�r�rv�help_signalrrrbr��signalAllProcessesr�r�r�signalProcessGrouprr�r�r
r�r;�
signalProcessrr�)
r9rQr��sigrr�r�r}rkrerfr�r�s
             r$�	do_signalz!DefaultControllerPlugin.do_signalsh���x�x���!���y�y�{���t�9�q�=��H�H�O�O�I�
K�����"5�"=�"=�D�H�H����1�g���Q�R����X�X�,�,�.�
��E�>� �3�3�C�8�G�!�
L�������� 2� 2�6� :�;����9�9�&��:J�K�
L��
@��+9�$�+?�(�
�L��'�
"�",�"?�"?�&��#��'.�X�F� �H�H�O�O�D�,>�,>�v�,F�G� �H�H�E�E�f�X�FV�W�X�@�"�0�0��s�;� -�Z��F��������$�(>�?�;
@��%�?�?�"��;�;�&�-�-�*@�*@�@�$?�*�$L�E� �H�H�O�O�E�2�2E�2M�2M�D�H�H�/�!�0��	"��%�?�?�S�+,�;�;�)5�*4�/0�}�}�!>��������(:�(:�5�(A�B����A�A�%��/�R�R��
S�s3�$A!G�I�I�A(I�I�K�"A#K�Kc���|jjd�|jjd�|jjd�|jjd�y)Nz-signal <signal name> <name>		Signal a processz?signal <signal name> <gname>:*		Signal all processes in a groupzFsignal <signal name> <name> <name>	Signal multiple processes or groupsz.signal <signal name> all		Signal all processesrCr@s r$r�z#DefaultControllerPlugin.help_signal�sF�������I�J������[�\������a�b������J�Kr#c�8�|jj�sy|j�}|sK|jjd�tj
|j_|j�y|j|�|j|�y)Nz&Error: restart requires a process name)
r0r�r�rvrrrb�help_restartr�r�)r9rQrs   r$�
do_restartz"DefaultControllerPlugin.do_restart�sm���x�x���!���	�	�����H�H�O�O�D�E�"5�"=�"=�D�H�H����������S���
�
�c�r#c��|jjd�|jjd�|jjd�|jjd�|jjd�y)Nz!restart <name>		Restart a processz2restart <gname>:*	Restart all processes in a groupz:restart <name> <name>	Restart multiple processes or groupsz"restart all		Restart all processeszLNote: restart does not reread config files. For that, see reread and update.rCr@s r$r�z$DefaultControllerPlugin.help_restart�s_�������=�>������M�N�������	������>�?������2�	3r#c���|rK|jjd�tj|j_|j�y|jjjr+td�}|j�jd�}nd}|rG|jj�}	|j�|jjd�yy#tj$rm}|jt j"j$k(r|jjd�n tj|j_�Yd}~yd}~wt&j($r�}tj|j_|j*dt,j.k(r?d}|jj||jjj0z�ne|j*dt,j2k(r?d	}|jj||jjj0z�n�Yd}~yYd}~yd}~wwxYw)
Nz$Error: shutdown accepts no argumentsz5Really shut the remote supervisord process down y/N? �yrz	Shut down�ERROR: already shutting downrz1ERROR: %s refused connection (already shut down?)z+ERROR: %s no such file (already shut down?))r0rvrrrb�
help_shutdownr4r�rrrgr��shutdownrr�r�r
r��SHUTDOWN_STATEr�r�r�r�r�rCr�)r9rQ�yesno�reallyr�r�rhs       r$�do_shutdownz#DefaultControllerPlugin.do_shutdown�s�����H�H�O�O�B�C�"5�"=�"=�D�H�H����� ���8�8���'�'��+�,�E��[�[�]�-�-�c�2�F��F�����0�0�2�J�
-��#�#�%�$������,�+���?�?�
��;�;�&�-�-�">�">�>��H�H�O�O�$B�C�*=�*E�*E�D�H�H�'��D���<�<�	
�&9�&A�&A����#��6�6�!�9�� 2� 2�2�M�C��H�H�O�O�C�$�(�(�*:�*:�*D�*D�$D�E��V�V�A�Y�%�,�,�.�G�C��H�H�O�O�C�$�(�(�*:�*:�*D�*D�$D�E��F�F��		
�s&�8C%�%I#�8A#E � I#�6CI�I#c�:�|jjd�y)Nz+shutdown 	Shut the remote supervisord down.rCr@s r$r�z%DefaultControllerPlugin.help_shutdown�s�������F�Gr#c���|rK|jjd�tj|j_|j�y|jjjr+td�}|j�jd�}nd}|rG|jj�}	|j�|jjd�yy#tj$rm}tj|j_|jt j"j$k(r|jjd�n�Yd}~yd}~wwxYw)Nz"Error: reload accepts no argumentsz3Really restart the remote supervisord process y/N? r�rzRestarted supervisordr�)r0rvrrrb�help_reloadr4r�rrrgr�r�rr�r�r
r�r�)r9rQr�r�r�r�s      r$�	do_reloadz!DefaultControllerPlugin.do_reload�s
����H�H�O�O�@�A�"5�"=�"=�D�H�H��������8�8���'�'��&�'�E��[�[�]�-�-�c�2�F��F�����0�0�2�J�	
9��"�"�$������ 7�8����?�?�
�&9�&A�&A����#��;�;�&�-�-�">�">�>��H�H�O�O�$B�C��D��
�s�8C%�%E%�8A#E � E%c�:�|jjd�y)Nz(reload 		Restart the remote supervisord.rCr@s r$r�z#DefaultControllerPlugin.help_reloads�������D�Er#c�~�|\}}}i}|df|df|dffD]6\}}|jtt||gt|�z����8|rTt	|j��}|j
�|D]%}	|jj|	�d||	����'y|jjd�y)N�	available�changed�disappearedr�zNo config updates to processes)	r��dict�zipr�r��keysrr0rv)
r9�added_changed_dropped_tuple�addedr��dropped�
changedict�nr�rrks
          r$�_formatChangesz&DefaultControllerPlugin._formatChangess���"=���w���
��[�)��y�)��}�-�/�	:�D�A�q�
���d�3�q�1�#��A��,�#7�8�9�	:�
�����*�+�E��J�J�L��
E�������D�*�T�2B� C�D�
E�
�H�H�O�O�<�=r#c��t|d|d�}d|i}|drd|d<nd|d<|drd|d<nd|d<|d	�d
|d��|d<d
}||zS)Nr�rk�inusezin use�avail�	autostart�auto�manual�
group_priory�process_prio�priorityz4%(name)-32s %(inuse)-9s %(autostart)-9s %(priority)sr
)r9�
configinfork�	formattedr@s     r$�_formatConfigInfoz)DefaultControllerPlugin._formatConfigInfo(s����Z��0�*�V�2D�E���d�$�	��g��!)�I�g��!(�I�g���k�"�%+�I�k�"�%-�I�k�"�+5�l�+C�+5�n�+E�!G�	�*��J���)�#�#r#c�\�|rK|jjd�tj|j_|j�y|jj
�}	|j�}|D],}|jj|j|���.y#tj$rm}tj|j_|jtjjk(r|jjd�n�Yd}~yd}~wwxYw)Nz!Error: avail accepts no arguments�ERROR: supervisor shutting down)r0rvrrrb�
help_availr��getAllConfigInfor�rr�r�r
r�r�)r9rQr�r��pinfor�s      r$�do_availz DefaultControllerPlugin.do_avail9s�����H�H�O�O�?�@�"5�"=�"=�D�H�H���O�O����X�X�,�,�.�
�
	?�#�4�4�6�J�$�
?�������� 6� 6�u� =�>�
?�����	�"5�"=�"=�D�H�H���{�{�f�m�m�:�:�:������ A�B��C��	�s�)B+�+D+�>A#D&�&D+c�:�|jjd�y)Nz(avail			Display all configured processesrCr@s r$r�z"DefaultControllerPlugin.help_availMs�������E�Fr#c���|rK|jjd�tj|j_|j�y|jj
�}	|j�}|j|d�y#tj$r�}tj|j_|jtjjk(r|jjd�nV|jtjjk(r)|jjd|j z�n�Yd}~yYd}~yd}~wwxYw)Nz"Error: reread accepts no argumentsrr�z	ERROR: %s)r0rvrrrb�help_rereadr��reloadConfigr�rr�r�r
r�r��CANT_REREADr�)r9rQr�r}r�s     r$�	do_rereadz!DefaultControllerPlugin.do_rereadPs�����H�H�O�O�@�A�"5�"=�"=�D�H�H��������X�X�,�,�.�
�	+��,�,�.�F�
����q�	�*�����	�"5�"=�"=�D�H�H���{�{�f�m�m�:�:�:������ A�B�����
�
� 9� 9�9�������a�m�m� ;�<��=�C��	�s�)B�E#�!B3E�E#c�:�|jjd�y)NzDreread 			Reload the daemon's configuration files without add/removerCr@s r$r�z#DefaultControllerPlugin.help_rereades�������a�br#c�^�|j�}|jj�}|D]2}	|j|�|jj	d|z��4y#t
j$�r5}|jtjjk(r;|jj	d�tj|j_
n�|jtjjk(r|jj	d�n�|jtjjk(r>|jj	d|z�tj|j_
n tj|j_
�Yd}~��zd}~wwxYw)Nz%s: added process groupzERROR: shutting downz#ERROR: process group already active� ERROR: no such process/group: %s)r�r0r��addProcessGrouprvrr�r�r
r�r�rrrb�
ALREADY_ADDEDr;�r9rQrr�rkr�s      r$�do_addzDefaultControllerPlugin.do_addhs&���	�	����X�X�,�,�.�
��	B�D�
B��*�*�4�0������ 9�D� @�A�!	B���?�?�
��;�;�&�-�-�">�">�>��H�H�O�O�$:�;�*=�*E�*E�D�H�H�'��[�[�F�M�M�$?�$?�?��H�H�O�O�$I�J��[�[�F�M�M�$:�$:�:��H�H�O�O�$F��$M�N�*=�*E�*E�D�H�H�'�*=�*E�*E�D�H�H�'����
�s�A#�#F,�7D*F'�'F,c�:�|jjd�y)NzBadd <name> [...]	Activates any updates in config for process/grouprCr@s r$�help_addz DefaultControllerPlugin.help_add~s�������,�	-r#c�^�|j�}|jj�}|D]2}	|j|�|jj	d|z��4y#t
j$r�}tj|j_	|jtjjk(r|jj	d|z�nG|jtjjk(r|jj	d|z�n�Yd}~��d}~wwxYw)Nz%s: removed process groupz&ERROR: process/group still running: %sr�)r�r0r��removeProcessGrouprvrr�rrrbr�r
r��
STILL_RUNNINGr;r�s      r$�	do_removez!DefaultControllerPlugin.do_remove�s����	�	����X�X�,�,�.�
��
	D�D�
D��-�-�d�3������ ;�d� B�C�
	D���?�?�
�&9�&A�&A����#��;�;�&�-�-�"=�"=�=��H�H�O�O�$L�(,�%-�.��[�[�F�M�M�$:�$:�:��H�H�O�O�$F��$M�N����
�s�A#�#D,�6B,D'�'D,c�:�|jjd�y)Nz<remove <name> [...]	Removes process/group from active configrCr@s r$�help_removez#DefaultControllerPlugin.help_remove�s�������(�	)r#c�N���fd�}�jj�}	|j�}|d\}}}t|j��}	d|	vr
t�}	|	r�t�}
|j�D]}|
j!|d��|
j#|�|	D]D}||
vs��jjd|z�t
j�j_�F|D]�}|	r||	vr�
|j%|�}
||d�|
D�cgc]$}|dtjj&k(r|��&}}|r@�jj|�d	d
���t
j�j_��|j)|�||d���|D]N}|	r||	vr�
|j%|�||d�|j)|�|j+|�||d��P|D]#}|	r||	vr�
|j+|�||d
��%y#tj$rl}t
j�j_|jtjjk(r �jjd�Yd}~y�d}~wwxYwcc}w)Nc�F���jj|�d|���y)Nr�rC)rkr�r9s  �r$�logz.DefaultControllerPlugin.do_update.<locals>.log�s����H�H�O�O��g�6�7r#r�rr_r�zERROR: no such group: %sr�r�r�zhas problems; not removingzremoved process groupzupdated process groupzadded process group)r0r�r�rr�rrrbr�r
r�r�rv�setr�r�r�r�r�r:r�r�)r9rQr�r�r}r�r�r��removed�valid_gnamesr�r��gnamer��res�failss`               r$�	do_updatez!DefaultControllerPlugin.do_update�s����	8��X�X�,�,�.�
�	��,�,�.�F�#)��)���w���3�9�9�;�'���L� ��5�L���U�F�"�4�4�6�
*���
�
�4��=�)�
*�
�M�M�%� �%�
F����&��H�H�O�O�$>��$F�G�*=�*E�*E�D�H�H�'�
F�
�
	0�E���\� 9�� �1�1�%�8�G���y�!�$+�?�S��H�
����)=�)=�=��?�E�?�������E�3O� P�Q�&9�&A�&A����#���)�)�%�0���.�/�
	0��	0�E���\� 9���'�'��.���y�!��)�)�%�0��&�&�u�-���.�/�	0��	.�E���\� 9���&�&�u�-���,�-�		.��o���	�"5�"=�"=�D�H�H���{�{�f�m�m�:�:�:������ >�?����
	��H?s$�H �)J"� J�3A!J�J�Jc��|jjd�|jjd�|jjd�y)NzVupdate			Reload config and add/remove as necessary, and will restart affected programszYupdate all		Reload config and add/remove as necessary, and will restart affected programsz+update <gname> [...]	Update specific groupsrCr@s r$�help_updatez#DefaultControllerPlugin.help_update�s5�������s�t������u�v������F�Gr#c�*�t|d|d�}|d}d}|tjjk(r||dfzS|tjjk(r||dfzS|tjj
k(rd|zSt
d|�d	|����)
Nr�rkr�r2rs�failed�%s: clearedrurv)rr
r�r;r:rr{r|s     r$�_clearresultz$DefaultControllerPlugin._clearresult�s����V�G�_�f�V�n�=���h���#���6�=�=�)�)�)��t�%6�7�7�7�
�V�]�]�)�)�
)��t�X�.�.�.�
�V�]�]�*�*�
*� �4�'�'��D�$�G�H�Hr#c��|jj�sy|j�}|sK|jjd�tj
|j_|j�y|jj�}d|vr`|j�}|D]J}|jj|j|��|jj|d��Ly|D]L}t|�\}}	|j|�t||�}|jjd|z��Ny#tj $rm}	|	j"|||	j$d�}
|jj|j|
��|jj|
d�Yd}	~	��d}	~	wwxYw)Nz$Error: clear requires a process namer_r�r�r�)r0r�r�rvrrrb�
help_clearr��clearAllProcessLogsr�r�r�clearProcessLogsrrr�r�r�r�s           r$�do_clearz DefaultControllerPlugin.do_clear�s|���x�x���!���	�	�����H�H�O�O�B�C�"5�"=�"=�D�H�H���O�O����X�X�,�,�.�
��E�>� �4�4�6�G�!�
L�������� 1� 1�&� 9�:����9�9�&��:J�K�
L��

:��+9�$�+?�(�
�L�:��/�/��5�)��\�B�D��H�H�O�O�M�D�$8�9�

:��!���O�'(�{�{�%1�&0�,-�M�M�;�E��H�H�O�O�D�$5�$5�e�$<�=��H�H�=�=�e�H�o�N�N��
O�s�E	�	G	�A#G�G	c��|jjd�|jjd�|jjd�y)Nz)clear <name>		Clear a process' log files.z5clear <name> <name>	Clear multiple process' log filesz'clear all		Clear all process' log filesrCr@s r$r�z"DefaultControllerPlugin.help_clears8�������E�F������D�	F������C�Dr#c�x�|j�}tj|�}|ddvr;|jjd�tj
|j_y||jj_|jj}|jd�||j_y)Nr)�unix�httpz%ERROR: url must be http:// or unix://rz)
r�rr0rvrrrbr4rCri)r9rQ�url�parts�old_exitstatuss     r$�do_openzDefaultControllerPlugin.do_opens����i�i�k���!�!�#�&����8�+�+��H�H�O�O�C�D�"5�"=�"=�D�H�H���%(������"����,�,�����r��,����r#c�p�|jjd�|jjd�y)Nz3open <url>	Connect to a remote supervisord process.z3		(for UNIX domain socket, use unix:///socket/path)rCr@s r$�	help_openz!DefaultControllerPlugin.help_open$s$�������N�O������O�Pr#c�Z�|rK|jjd�tj|j_|j�y|jj
�sy|jj�}|jj|j��y)Nz#Error: version accepts no arguments)	r0rvrrrb�help_versionr�r��getSupervisorVersion)r9rQr�s   r$�
do_versionz"DefaultControllerPlugin.do_version(su����H�H�O�O�A�B�"5�"=�"=�D�H�H��������x�x���!���X�X�,�,�.�
������
�7�7�9�:r#c�:�|jjd�y)Nz<version			Show the version of the remote supervisord processrCr@s r$r	z$DefaultControllerPlugin.help_version4s�������
�	r#c��|jj�sy|j�}|sK|jjd�tj
|j_|j�yt|�dkDr;|jjd�tj
|j_y|d}|jj�}	|j|�}|dt$j&j(k7r;|jjd�tj
|j_y|jjd	�d}	t+||j�}|j-�	t/�d
z}	|j1||�|j|�}|dt$j&j(k7rG|jjd�|jjd�|j5�y��#tj$r�}|jtjj k(r;|jjd�tj
|j_n'|jjdt#|�z�Yd}~yd}~wwxYw#tj$r�}|jtjj2k(r|jjd�n'|jjdt#|�z�|jjd�|j5�Yd}~yd}~wwxYw#t6t8f$r2|jjd�|r|j5�YyYywxYw)
NzERROR: no process name suppliedrz&ERROR: too many process names suppliedrz ERROR: bad process name suppliedzERROR: r�zERROR: process not runningr&r�zProcess got killedzExiting foreground)r0r�r�rvrrrb�help_fgr�r�rnrr�r�r
r�r;rXr�
ProcessStates�RUNNINGr)r?r�sendProcessStdinr!rWr��EOFError)	r9rQrrkr�r�r�rr�inps	         r$�do_fgzDefaultControllerPlugin.do_fg9s����x�x���!���	�	�����H�H�O�O�=�>�"5�"=�"=�D�H�H���L�L�N���u�:��>��H�H�O�O�D�E�"5�"=�"=�D�H�H����Q�x���X�X�,�,�.�
�	��,�,�T�2�D���=�F�0�0�8�8�8��H�H�O�O�8�9�"5�"=�"=�D�H�H��������6�7���	���t�x�x�(�A�
�G�G�I���k�D�(��	��/�/��c�:�"�0�0��6����=�F�$8�$8�$@�$@�@��H�H�O�O�$8�9��H�H�O�O�$8�9��F�F�H��%��-���	��{�{�f�m�m�4�4�4������ B�C�&9�&A�&A����#������	�C��F� 2�3���
	��4!�����{�{�f�m�m�&?�&?�?������(<�=������	�C��F�(:�;��H�H�O�O�$8�9��F�F�H�����"�8�,�	��H�H�O�O�0�1�������	�s]�"H,�,4N
�!K�3A7N
�+N
�,K�?B	K
�
K�N�(BN�=N
�N�N
�
<O�
Oc�p�|jjd�|jjd�y)Nz4fg <process>	Connect to a process in foreground modez		Ctrl-C to exitrC)r9r�s  r$rzDefaultControllerPlugin.help_fg{s$�������O�P������,�-r#)�	signalledr;)7rrrrkr2r)rAr5rHrFrKrM�do_exitrPr]rirkrorqrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr	rrr"r#r$r$r$�s&���D��H��6Q(�f�1$�f�$�<��G�<�"�)H�VC�N�6&�I�*/>�b<�I�$=�/>�b:�4@�lL�
�3�#-�JH�9�4F�>� $�"?�(G�+�*c�B�,-�D�&)�B.�HH�

I�!:�FE�-�Q�
;��
@�D.r#r$c�r�|�
t�}|j|t��t|�}|jrI|jdj
|j��tj|j�|jr(|j||�tjd�yy)N)rr�r)r	�realizerXrZr�r��joinrG�exitrbr�r�)r�r4�cs   r$�mainr�s�����/���O�O�D�g�O�&��7��A��|�|�	������'�,�,�'�(�����������	���t�W�%������r#�__main__)NN)*rXrcr�r�r�rGr+�supervisor.compatrrrrr�supervisor.medusarrD�supervisor.optionsr	rrr�r
rrrr&r�ryrzr!r�r,r)rdrZrrrr"r$rrr"r#r$�<module>r"s����,���
�
��'�&�%�'�'�5�,�,�-���"������}�}�0�0��}�}�9�9��}�}�0�0�2��5�y���5�n@����@�B�3E�3E�jJ�>�{.�2�{.�|
��z���F�r#