
    vg8                         d Z 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 ddl	mZ ddlmZ dd	lmZ dd
lmZ  G d d          Zd Zd ZddZd Zedk    r e             dS dS )a  supervisord -- run a set of applications as daemons.

Usage: %s [options]

Options:
-c/--configuration FILENAME -- configuration file path (searches if not given)
-n/--nodaemon -- run in the foreground (same as 'nodaemon=true' in config file)
-s/--silent -- no logs to stdout (maps to 'silent=true' in config file)
-h/--help -- print this usage message and exit
-v/--version -- print supervisord version number and exit
-u/--user USER -- run supervisord as this user (or numeric uid)
-m/--umask UMASK -- use this umask for daemon subprocess (default is 022)
-d/--directory DIRECTORY -- directory to chdir to when daemonized
-l/--logfile FILENAME -- use FILENAME as logfile path
-y/--logfile_maxbytes BYTES -- use BYTES to limit the max size of logfile
-z/--logfile_backups NUM -- number of backups to keep when max bytes reached
-e/--loglevel LEVEL -- use LEVEL as log level (debug,info,warn,error,critical)
-j/--pidfile FILENAME -- write a pid file for the daemon process to FILENAME
-i/--identifier STR -- identifier used for this instance of supervisord
-q/--childlogdir DIRECTORY -- the log directory for child process logs
-k/--nocleanup --  prevent the process from performing cleanup (removal of
                   old automatic child log files) at startup.
-a/--minfds NUM -- the minimum number of file descriptors for start success
-t/--strip_ansi -- strip ansi escape codes from process output
--minprocs NUM  -- the minimum number of processes available for start success
--profile_options OPTIONS -- run supervisord under profiler and output
                             results based on OPTIONS, which  is a comma-sep'd
                             list of 'cumulative', 'calls', and/or 'callers',
                             e.g. 'cumulative,callers')
    N)asyncore_25)	as_string)ServerOptions)decode_wait_status)signame)events)SupervisorStates)getProcessStateDescriptionc                   |    e 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 ZddZddZd Zd ZdS )
SupervisorFr   Nc                 0    || _         i | _        i | _        d S N)optionsprocess_groupsticks)selfr   s     S/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/supervisor/supervisord.py__init__zSupervisor.__init__6   s     


    c                 p   | j         j        s| j                                          | j                                          | j         j        r| j                                          | j                                          | j         j        s| j                                          |                                  d S r   )	r   firstcleanup_fdsset_uid_or_exitset_rlimits_or_exitmake_logger	nocleanupclear_autochildlogdirrunr   s    r   mainzSupervisor.main;   s    |! 	' L$$&&&$$&&&< 	/L,,... 	  """|% 	1L..000




r   c                 "   i | _         d | _        t          j                     	 | j        j        D ]}|                     |           | j                            |            | j                                         | j        j	        s%| j        j
        r| j                                         | j                                         |                                  | j                                         d S # | j                                         w xY wr   )r   stop_groupsr   clearr   process_group_configsadd_process_groupopenhttpservers
setsignalsnodaemonr   	daemonizewrite_pidfile
runforevercleanup)r   configs     r   r   zSupervisor.runP   s     	#,< / /&&v....L((...L##%%%L) )t|/A )&&((( L&&(((OOL  """""DL  """"s   B5C3 3Dc                 ^   | j         j        }d | j                                        D             }t	          t          d |D             |                    t	          t          d |D             |                    fd|D             }fd|D             }fd|D             }|||fS )Nc                     g | ]	}|j         
S  )r-   ).0groups     r   
<listcomp>z-Supervisor.diff_to_active.<locals>.<listcomp>d   s    FFFu|FFFr   c                     g | ]	}|j         
S r0   namer1   cfgs     r   r3   z-Supervisor.diff_to_active.<locals>.<listcomp>f       444CH444r   c                     g | ]	}|j         
S r0   r5   r7   s     r   r3   z-Supervisor.diff_to_active.<locals>.<listcomp>g   r9   r   c                 &    g | ]}|j         v|S r0   r5   r1   candcurdicts     r   r3   z-Supervisor.diff_to_active.<locals>.<listcomp>i   %    DDDD49G+C+C4+C+C+Cr   c                 &    g | ]}|j         v|S r0   r5   )r1   r=   newdicts     r   r3   z-Supervisor.diff_to_active.<locals>.<listcomp>j   r?   r   c                 R    g | ]#}|                     |j        |          k    !|$S r0   )getr6   r<   s     r   r3   z-Supervisor.diff_to_active.<locals>.<listcomp>l   s=     < < <Dgkk$)T:::: :::r   )r   r$   r   valuesdictzip)r   newcuraddedremovedchangedr>   rA   s         @@r   diff_to_activezSupervisor.diff_to_activeb   s    l0FF)<)C)C)E)EFFFs44444c::;;s44444c::;;DDDDCDDDDDDDCDDD< < < <C < < < gw&&r   c                     |j         }|| j        vrX|                                 |                                | j        |<   t	          j        t	          j        |                     dS dS )NTF)r6   r   after_setuid
make_groupr   notifyProcessGroupAddedEvent)r   r-   r6   s      r   r%   zSupervisor.add_process_groupq   sg    {t***!!!(.(9(9(;(;D%M&7==>>>4ur   c                     | j         |                                         rdS | j         |                                          | j         |= t          j        t          j        |                     dS )NFT)r   get_unstopped_processesbefore_remover   rP   ProcessGroupRemovedEvent)r   r6   s     r   remove_process_groupzSupervisor.remove_process_groupz   sh    t$<<>> 	5D!//111%f5d;;<<<tr   c                     i }| j                                         D ])}|                    |                                           *|S r   )r   rD   updateget_dispatchers)r   process_mapr2   s      r   get_process_mapzSupervisor.get_process_map   sN    (//11 	8 	8Eu44667777r   c                    g }| j                                         D ])}|                    |                                           *|rt	          j                    }|| j        dz   k    rd |D             }d                    |          }| j        j        	                    d|z             || _        |D ]Q}t          |                                          }| j        j                            |j        j        d|           R|S )N   c                 @    g | ]}t          |j        j                  S r0   )r   r-   r6   )r1   ps     r   r3   z.Supervisor.shutdown_report.<locals>.<listcomp>   s$    GGGq)AHM22GGGr   z, zwaiting for %s to diez state: )r   rD   extendrS   timelastshutdownreportjoinr   loggerinfor
   	get_stateblatherr-   r6   )r   	unstoppedr2   nownamesnamestrprocstates           r   shutdown_reportzSupervisor.shutdown_report   s#   	(//11 	> 	>EU::<<==== 	D)++Cd-122GGIGGG))E**#(()@7)JKKK*-'% D DD6t~~7G7GHHEL'//*.+*:*:*:EEBD D D Dr   c                 V    | j         r!| j         d                                          d S d S )N)r"   stop_allr   s    r   ordered_stop_groups_phase_1z&Supervisor.ordered_stop_groups_phase_1   s7     	,R ))+++++	, 	,r   c                     | j         rI| j                                         }|                                r| j                             |           d S d S d S r   )r"   poprS   append)r   r2   s     r   ordered_stop_groups_phase_2z&Supervisor.ordered_stop_groups_phase_2   sj      	/$((**E,,.. /
  ''.....	/ 	// /r   c                    t          j        t          j                               d}| j                                        }	 i }|                    |           |                    |                                            t          | j        	                                          }|
                                 | j        j        t          j        k     rv| j        s;d| _        |d d          | _        t          j        t          j                               |                                  |                                 st&          j        |                                D ]k\  }}|                                r| j        j                            |           |                                r| j        j                            |           l| j        j                            |          \  }}|D ]}||v r	 ||         }| j        j                            d|           |                                 |                                s| j        j                            |           x# t&          j        $ r   ||                                           Y xY w|D ]}||v r	 ||         }| j        j                            d|           |!                                 |                                s| j        j        "                    |           x# t&          j        $ r   ||                                           Y xY w|D ]}	|	#                                 | $                                 | %                                 | &                                 | j        j        t          j        k     r| '                                 | j        j(        rd S )N   Tz#read event caused by %(dispatcher)r)
dispatcherz$write event caused by %(dispatcher)r))r   rP   SupervisorRunningEventr   get_socket_maprX   r[   listr   rD   sortmoodr	   RUNNINGstoppingr"   SupervisorStoppingEventrr   rn   asyncoreExitNowitemsreadablepollerregister_readablewritableregister_writablepollrd   rg   handle_read_eventunregister_readablehandle_errorhandle_write_eventunregister_writable
transitionreaphandle_signaltickrv   test)
r   timeout
socket_mapcombined_mappgroupsfdry   rwr2   s
             r   r+   zSupervisor.runforever   s   f355666\0022
H	L
+++ 4 4 6 67774.557788GLLNNN| #3#;;;} D %)DM'.qqqzD$M&"@"B"BCCC00222++-- + #**"."4"4"6"6 > >J&&(( >L'99"===&&(( >L'99"===<&++G44DAq 8 8%%8%1"%5
+33A'1 4 3 3 3 #44666)2244 H L/CCBGGG#+   8$R(5577777 &  8 8%%8%1"%5
+33B'1 4 3 3 3 #55777)2244 H L/CCBGGG#+   8$R(5577777 & ! # #  """"IIKKK   IIKKK| #3#;;;00222|  QH	s   5A0I&&+J A0L+L>c                 D   |t          j                     }t          j        D ]}}|j        }| j                            |          }|t          ||          x}| j        |<   t          ||          }||k    r(|| j        |<   t          j         |||                      ~dS )zo Send one or more 'tick' events when the timeslice related to
        the period for the event type rolls over N)ra   r   TICK_EVENTSperiodr   rC   	timeslicerP   )r   ri   eventr   	last_tick	this_ticks         r   r   zSupervisor.tick   s     ;)++C' 		6 		6E\F
v..I 1:631G1GG	DJv.!&#..II%%%.
6"eeIt44555		6 		6r   c                    |dk    rd S | j                                         \  }}|r| j         j                            |d           }|9t	          |          \  }}| j         j                            d|d|d           n#|                    ||           | j         j        |= |s|                     d|dz              d S d S d S )Nd   zreaped unknown pid z ()Frx   )oncerecursionguard)	r   waitpid
pidhistoryrC   r   rd   re   finishr   )r   r   r   pidstsprocess_msgs           r   r   zSupervisor.reap  s    S  F<''))S 	Gl-11#t<<G+C003#(((ccc)RSSSSsC(((L+C0 G 		u^A5E	FFFFF	G 	GG Gr   c                 R   | j                                         }|r
|t          j        t          j        t          j        fv rG| j         j                            dt          |          z             t          j
        | j         _        d S |t          j        k    r| j         j        t          j
        k    r1| j         j                            dt          |          z             d S | j         j                            dt          |          z             t          j        | j         _        d S |t          j        k    r1| j         j                            dt          |          z             d S |t          j        k    rz| j         j                            dt          |          z             | j                                          | j                                        D ]}|                                 d S | j         j                            dt          |          z             d S d S )Nz#received %s indicating exit requestz<ignored %s indicating restart request (shutdown in progress)z&received %s indicating restart requestz#received %s indicating a child quitz)received %s indicating log reopen requestzreceived %s indicating nothing)r   
get_signalsignalSIGTERMSIGINTSIGQUITrd   warnr   r	   SHUTDOWNr~   SIGHUP
RESTARTINGSIGCHLDdebugSIGUSR2re   
reopenlogsr   rD   rg   )r   sigr2   s      r   r   zSupervisor.handle_signal   s4   l%%'' 	Ev~v}fnEEE#((9GCLLHJ J J$4$=!!!%%<$(8(AAAL',,VY`adYeYeeg g g g g L',,@73<<OQ Q Q(8(CDL%%%&&#))9GCLLHJ J J J J&&#((?'#,,NP P P'')))!07799 ' 'E$$&&&&' ' #++4ws||CE E E E E/	E 	Er   c                     | j         j        S r   )r   r~   r   s    r   rf   zSupervisor.get_state<  s    |  r   r   )Fr   )__name__
__module____qualname__r   rb   r   r"   r   r    r   rL   r%   rV   r[   rn   rr   rv   r+   r   r   r   rf   r0   r   r   r   r   0   s       HNK  
  *# # #$' ' '        (, , ,
/ / /N N N`6 6 6 6"G G G G"E E E8! ! ! ! !r   r   c                 ,    t          ||| z  z
            S r   )int)r   whens     r   r   r   ?  s    ttf}%&&&r   c                    	 dd l }n# t          $ r dd l}Y nw xY wdd l}dd l}|                                \  }}		 |                    | |||	           |                    |	          }
|
                                  |
j	        |pd  |r|

                    d           n|
                    d           t          j        |	           d S # t          j        |	           w xY w)Nr   )
cumulativecallsra   g333333?)cProfileImportErrorprofilepstatstempfilemkstemprunctxStats
strip_dirs
sort_statsprint_callersprint_statsosremove)cmdglobalslocals
sort_ordercallersr   r   r   r   fnstatss              r   r   r   C  s   """""   MMMOOOFBsGVR000R  *G(GHH 	"####b!!!
	"	"s    A:C C!Fc                    t           j        dk    s
J d            d}	 t                      }|                    | t                     ||_        ||_        |j        r6|j        \  }}t          dt                      t                      ||           nt          |           |                                 |                                 d}|s|j        t          j        k     rd S )Nposixz)This code makes Unix-specific assumptionsTrx   )doczgo(options)F)r   r6   r   realize__doc__r   r   profile_optionsr   r   r   goclose_httpserversclose_loggerr~   r	   r   )argsr   r   r   r   r   s         r   r    r    Z  s    7gJE//'***" 	")"9JM799fhh
GLLLLwKKK!!### 	GL#3#>>>Er   c                 z    t          |           }	 |                                 d S # t          j        $ r Y d S w xY wr   )r   r    r   r   )r   ds     r   r   r   n  sJ    7A	   s   ' ::__main__)NF)r   r   ra   r   supervisor.medusar   r   supervisor.compatr   supervisor.optionsr   r   r   
supervisorr   supervisor.statesr	   r
   r   r   r   r    r   r   r0   r   r   <module>r      sR   > 
			   5 5 5 5 5 5 ' ' ' ' ' ' , , , , , , 1 1 1 1 1 1 & & & & & &       . . . . . . 8 8 8 8 8 8M! M! M! M! M! M! M! M!^' ' '  .   (   zDFFFFF r   