
    vg^                        d dl Z d dl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 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 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$ G d d          Z% G d d          Z& G d de&          Z' G d d e&          Z( G d! d"          Z)d#e(d$d%e'd$de)d$d&Z* G d' d(          Z+dS ))    N)
templating)urllib)urlparse)as_bytes)	as_string)PY2)unicode)	producers)	http_date)
get_header)	collector)ProcessStatesNOT_DONE_YET)VERSION)make_namespec)split_namespec)SystemNamespaceRPCInterface)RootRPCInterface)Faults)RPCError)SupervisorNamespaceRPCInterfacec                   P    e Zd ZdZ ej        dej                  Zd Zd Z	d Z
dS )DeferredWebProducerz A medusa producer that implements a deferred callback; requires
    a subclass of asynchat.async_chat that handles NOT_DONE_YET sentinel zConnection: (.*)c                 b    || _         || _        d| _        t          |j                  | _        d S )NF)callbackrequestfinishedfloatdelay)selfr   r   s      K/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/supervisor/web.py__init__zDeferredWebProducer.__init__(   s,     8>**


    c                 b   | j         rdS 	 |                                 }|t          u rt          S d| _         |                     |          S #  t	          j                    }| j        j        j        j	        
                    d|           d| _         | j                            d           Y d S xY w)N TzWeb interface errori  )r   r   r   sendresponse	traceback
format_excr   channelserverloggerlogerror)r!   responsetbs      r"   morezDeferredWebProducer.more.   s    = 	2	$}}H<''## DM$$X...	$%''BL '.223H"MMM DMLs######s   #A A A B.c                 v   |                     di           }|D ]}||         | j        |<   d| j        vr
d| j        d<   |                     d          r&d| j        d<   | j                            d           d S |                     dd	          }t          |          | j        d<   | j                            |           t          | j        | j        j                  }d}d}| j        j        d
k    r1|dk    r(| j        	                    d          sd}nwd| j        d<   nld}ni| j        j        dk    rK|dk    rd}nPd| j        vr8d| j        v r| j        d         dk    sd}n*| j        j
        rd| j        d<   d}nd}n| j        j        d}t          j        | j                                                  }|r
d| j        d<   |rGt          j        t          j        | j        j                            }	t          j        ||	g          }	nt"          ret          | j        j                  dk    rH| j        j        d         }t%          |t&                    r!t          j        |          | j        j        d<   | j        j                            d|           t          j        | j        j                  }	| j        j                            t          j        t          j        |	| j        j                                       d | j        j        _        |r | j        j                                         d S d S )NheadersContent-Typez
text/plainLocationr   zContent-Lengthi-  bodyr&   z1.0z
keep-alive   z
Keep-Alive
Connectionz1.1closezTransfer-Encodingchunked)getr   r.   lenpushr   
CONNECTIONheaderversionhas_keyuse_chunkedr
   simple_producerbuild_reply_headerchunked_producercomposite_produceroutgoingr   
isinstancer	   insertr*   push_with_producerglobbing_producerhooked_producerr-   current_requestclose_when_done)
r!   r/   r3   r?   r6   
connectionclose_itwrap_in_chunkingoutgoing_headeroutgoing_producers
             r"   r'   z DeferredWebProducer.sendresponse@   sn   ,,y"-- 	3 	3F#*6?DL  --+7DL(;;z"" 	-.DL)*Ls###F||FB''),T%&$1DEE
<5((\))|++,<== > HH1=DL..\!U**W$$!55&$,66<(;<	II#$\- !8ADL!45'($$ H\!)H#3L++--/ /  	1)0DL& 	' ) :0$,2GHH! ! !* < "34! !
  PDL122Q66|,Q/dG,, P/8/H$/O/ODL)!, L!((O<<< ) <%!' !' 	//+!1 1 $ 0" " 		 		 		 04, 	3L 0022222	3 	3r$   N)__name__
__module____qualname____doc__recompile
IGNORECASEr>   r#   r1   r'    r$   r"   r   r   #   sh        M M/??J+ + +$ $ $$X3 X3 X3 X3 X3r$   r   c                       e Zd Zd ZdS )ViewContextc                 :    | j                             |           d S N)__dict__update)r!   kws     r"   r#   zViewContext.__init__   s    R     r$   N)rT   rU   rV   r#   r[   r$   r"   r]   r]      s#        ! ! ! ! !r$   r]   c                   .    e Zd ZdZdZd Zd Zd Zd ZdS )MeldViewztext/html;charset=utf-8g      ?c                 l   || _         | j         j        }t          j                            |          sat          j                            t          j                            t                              }t          j                            ||          }t          j
        |          | _        d | _        d S r_   )contexttemplateospathisabsabspathdirname__file__joinr   	parse_xmlrootr   )r!   rf   rg   heres       r"   r#   zMeldView.__init__   s|    <(w}}X&& 	47??27??8#<#<==Dw||D(33H(22	r$   c                     |                                  }|t          u rt          S | j        j        }|d         }| j        |d<   d|d<   d|d<   t          j        d          |d<   t          |          |d<   |S )	Nr3   r4   zno-cachePragmazCache-Controlr   Expiresr6   )renderr   rf   r/   content_typer   build_http_dater   )r!   r6   r/   r3   s       r"   __call__zMeldView.__call__   s    {{}}<<(9%"&"3&#- &6q99	#D>>r$   c                     d S r_   r[   r!   s    r"   ru   zMeldView.render   s    r$   c                 4    | j                                         S r_   )rp   clonerz   s    r"   r|   zMeldView.clone   s    y   r$   N)	rT   rU   rV   rv   r    r#   rx   ru   r|   r[   r$   r"   rd   rd      sZ        ,LE      ! ! ! ! !r$   rd   c                       e Zd Zd ZdS )TailViewc                    | j         j        }| j         j        }d|vrd}d }n|d         }d}|                    dd          }t	          d|                                rt          |          dz  nd          }|sd}nkt          |          }	 |                    |||          }nC# t          $ r6}|j
        t          j        k    rd|z  }nd	|j
        |j        fz  }Y d }~nd }~ww xY w|                                 }	|	                    d
          }
|
                    d|z             |	                    d          }|                    |           |	                    d          }|[|                    dt%          j        |          dt%          j        t)          t+          |                                         n|                                 t/          |	                                          S )NprocessnamezNo process name foundr   limit1024i zNo file for %sz#ERROR: unexpected rpc fault [%d] %stitlezSupervisor tail of process %stailbodyrefresh_anchorztail.html?processname=z&limit=href)rf   supervisordformr;   minisdigitintr   readProcessStdoutLogr   coder   NO_FILEtextr|   findmeldcontent
attributesr   quotestrabsdeparentr   write_xhtmlstring)r!   r   r   tailr   offsetr   rpcinterfaceerp   r   r   r   s                r"   ru   zTailView.render   s   l.| $$*DKK}-KFHHWf--EJs5zz"}}UKKE ,.>{KK,'<<[=BFL LDD , , ,v///+=DFAFH,  ,	, zz||g&&5CDDD==,,'788"%%%L----v|CE

OO/L/L/L &     ##%%%//11222s   B% %
C%/,C  C%N)rT   rU   rV   ru   r[   r$   r"   r~   r~      s#        +3 +3 +3 +3 +3r$   r~   c                   &    e Zd Zd Zd Zd Zd ZdS )
StatusViewc                    |                                 }t          j        t          |j        j        j        |j        j                            }dd|z  d d}dd|z  d d}dd|z  d d}dd	|z  d d}d
d|z  dd}dd|z  dd}	|t          j        k    r|||||	g}
n4|t          j	        t          j
        t          j        fv r|d |||	g}
nd d |||	g}
|
S )NStartz*index.html?processname=%s&amp;action=start)namer   targetRestartz,index.html?processname=%s&amp;action=restartStopz)index.html?processname=%s&amp;action=stopz	Clear Logz-index.html?processname=%s&amp;action=clearlogzTail -f Stdoutz
logtail/%s_blankzTail -f Stderrzlogtail/%s/stderr)	get_stater   r   r   groupconfigr   r   RUNNINGSTOPPEDEXITEDFATAL)r!   processstater   startrestartstopclearlogtailf_stdouttailf_stderractionss              r"   actions_for_processzStatusView.actions_for_process   sY   !!##l=1E1J181D$F $F G G @;N
 
 B[P
 
 ?+M
 
  CkQ
 
 % ;.
 
 %'+5
 

 M)))hlKGG},m.B$*, , ,dHlLIGGT8\<HGr$   c                 b    |t           j        k    rdS |t           j        t           j        fv rdS dS )Nstatusrunningstatuserrorstatusnominal)r   r   r   BACKOFF)r!   r   s     r"   css_class_for_statezStatusView.css_class_for_state  s5    M)))"?}*M,ABBB ="?r$   c                    | j         j        }dt          |          f}dt          |g          f}t	          ||g          }|r|dk    rd }d|_        |S |dk    r'|j                                        fd}d|_        |S |dk    r.|j        	                    d	d
id	dig          fd}	d|	_        |	S rfd}
d|
_        t                    \  }}|j                            |          }||
S |j                            |          }||
S |dk    r	 |j                                      n# t          $ r}|j        t"          j        k    rdnq|j        t"          j        k    rdnY|j        t"          j        k    rdnA|j        t"          j        k    rdn)|j        t"          j        k    rdnd|j        |j        fz  fd}d|_        |cY d }~S d }~ww xY wt1                    rfd}d|_        |S fd}d|_        |S |dk    r~	 |j                                      n6# t          $ r)}d|j        |j        fz  fd}d|_        |cY d }~S d }~ww xY wt1                    rfd}d|_        |S fd}d|_        |S |dk    rR|j        	                    dgddgdg          }t1          |          r|fd }d|_        |S fd!}d|_        |S |d"k    r`	 |j                                      n6# t          $ r)}d|j        |j        fz  fd#}d|_        |cY d }~S d }~ww xY wfd$}d|_        |S t7          |          )%N
supervisorsystemrefreshc                  2    dt          j                    z  } | S )NzPage refreshed at %s)timectime)messages    r"   	donothingz+StatusView.make_callback.<locals>.donothing/  s    4tz||CG"Nr$   g?stopallc                  `                  t           u rt           S dt          j                    z  S )NzAll stopped at %sr   r   r   )r   s   r"   r   z)StatusView.make_callback.<locals>.stopall7  s+    xzz\11++2TZ\\AAr$   
restartall
methodNamezsupervisor.stopAllProcesseszsupervisor.startAllProcessesc                  d                 } | t           u rt           S dt          j                    z  S )NzAll restarted at %sr   )resultr   s    r"   r   z,StatusView.make_callback.<locals>.restartallC  s0    %XZZF--++04:<<??r$   c                      d z  S )NzNo such process named %sr[   namespecs   r"   wrongz'StatusView.make_callback.<locals>.wrongL  s    5@@r$   r   zno such filezfile not executablezalready startedspawn errorabnormal terminationunexpected rpc fault [%d] %sc                      dd S )NERROR: Process : r[   )msgr   s   r"   starterrz*StatusView.make_callback.<locals>.starterrj  s     >Fhh#LLr$   c                     	              } n`# t           $ rS}|j        t          j        k    rd}n)|j        t          j        k    rd}nd|j        |j        fz  }dd|cY d }~S d }~ww xY w| t          u rt          S dz  S )Nr   r   r   r   r   Process %s started)r   r   r   SPAWN_ERRORABNORMAL_TERMINATIONr   r   )r   r   r   bool_or_callbackr   s      r"   startprocessz.StatusView.make_callback.<locals>.startprocessp  s    
Q)9)9););#+ Q Q Q#$6V-?#?#?*7CC%&Vv/J%J%J*@CC*H()L8 +8CBJ((CC'P P P P P P PQ  &55'3 3#7(#BBs   
 
A+AA& A+&A+c                      d z  S )Nr   r[   r   s   r"   	startdonez+StatusView.make_callback.<locals>.startdone      #7(#BBr$   r   c                       S r_   r[   r   s   r"   stoperrz)StatusView.make_callback.<locals>.stoperr      #&Jr$   c                      	              } n(# t           $ r}d|j        |j        fz  cY d }~S d }~ww xY w| t          u rt          S dz  S )Nr   Process %s stopped)r   r   r   r   )r   r   r   r   s     r"   stopprocessz-StatusView.make_callback.<locals>.stopprocess  s    4)9)9););#+ 4 4 4'E$%FAFI4 (4 !4 !4 !4 !4 !4 !44  &55'3 3#7(#BBs   
 
3.33c                      d z  S )Nr   r[   r   s   r"   stopdonez*StatusView.make_callback.<locals>.stopdone  r   r$   r   zsupervisor.stopProcess)r   paramszsupervisor.startProcessc                  B                 } | t           u rt           S dz  S NzProcess %s restartedr   )resultsr   r   s    r"   restartprocessz0StatusView.make_callback.<locals>.restartprocess  s*    &.hjjG&,66'3 3#9H#DDr$   c                      d z  S r   r[   r   s   r"   restartdonez-StatusView.make_callback.<locals>.restartdone  s    #9H#DDr$   r   c                       S r_   r[   r   s   r"   clearerrz*StatusView.make_callback.<locals>.clearerr  r   r$   c                      d z  S )NzLog for %s clearedr[   r   s   r"   r   z*StatusView.make_callback.<locals>.clearlog  s    3h>>r$   )rf   r   r   r   r   r    r   stopAllProcessesr   	multicallr   process_groupsr;   	processesstartProcessr   r   r   r   NOT_EXECUTABLEALREADY_STARTEDr   r   r   callablestopProcessclearProcessLogs
ValueError)r!   r   actionr   mainr   r   r   r   r   r   
group_nameprocess_namer   r   r   r   r   r   r   r   r   results_or_callbackr   r   r   r   r   r   r   s    `                         @@@r"   make_callbackzStatusView.make_callback"  s   l.  ? L LM7??@'v77 _	$""# # # #'	  9$$'2CCEEB B B B B
 !%<'''.88#$AB#$BCFH H@ @ @ @ @
 $(
 !! @$A A A A A"+9(+C+C(
L#266zBB= L/--l;;? LW$$((3@@JJ )( $ ( ( (6V^33"0CCVv'<<<"7CCVv'==="3CCVv'999"/CCVv'BBB"8CC"@ !D0 #0CM M M M M M)-'#(&   011 )C C C C C C  .2*++C C C C C*.	((v%%	'(3??II )( $ ' ' '<?OO' ' ' ' '(,&'   011 (C C C C C C -1)**C C C C C)-'y((*6*=*G*G(@&.Z1 1(A&.Z1 1+ +'   344 +#6E E E E E E
 04,--E E E E E,0)**z))(#/#:#K#K$$& $&# ( ( (<?OO' ' ' ' ')-'(? ? ? ? ?%)HN#O   s[   D: :
G&BG!G&!G&H7 7
I*I%I*%I*8L 
MM;MMc           
      F
   | j         j        }| j         j        }|                    d          }|                    d          }|                    d          }|r| j        s"|                     ||          | _        t          S |                                 }|t          u rt          S |0|d         }|dz   dt          j        |          z  z   }||d         d<   | j         j	        }t          d	t          |          fg          }	g }
|j                                        D ]?}|j                                        D ]#}|
                    |j        j        |f           $@|
                                 g }|
D ]\  }}|                     |j        |         j        |                   }t+          ||          }|	j                            |          }|                    |d
         ||||d         |d         d           |                                 }|4|                    d          }d|j        d<   |                    |           |r|                    d                              |          }d}|D ]\  }}|                    d          }|                    |d                                                    |                     |d                   |j        d<   |                    d          }|                    |d                    |                    d          }t+          |d         |d                   }|                    dt          j        |          z             |                    |           |d         }|                    d          }|                    |          D ]\  }}|                    d          }|d|j        d<   '|                    |d         |d                     |                    |d                    |d!         r|                    |d!         "           |r
d#|j        d<   | }n*|                    d$          }|                     d%           |                    d&                              tB                     tE          tF          j$        %                                j&                  }|                    d'                              |           tO          |(                                          S )(Nr   r  r   
SERVER_URL/z?message=%sr3   r5   r   	statenamer   description)statusr   r   r   r   r  statusmessage
status_msgclasstrFstatus_textr  	info_textname_anchorr   r   ztail.html?processname=%sr   r   actionitem_tdactionitem_anchorhiddenr   )r   r   r   )r   shadestatustablezNo programs to managesupervisor_versioncopyright_date))rf   r   r/   r;   r   r  r   r   r   r   r   r   r   valuesr   keysappendr   r   sortr   r   r   getProcessInfor|   r   attribr   repeatlowerr   r   replacer   r   datetimedatetodayyearr   r   ) r!   r   r/   r   r  r   
server_urllocationr   r   processnamesr   	gprocnamedata	groupnamer   	sent_nameinforp   
statusareaiterator	shaded_tr
tr_elementitemr  r  anchorr  
li_element
actionitemtablecopyright_years                                    r"   ru   zStatusView.render  sY   | <(hh}--(##((9%% 	?= ? $ 2 2; G G##  ==??l**''&!%l!3J)C/-&,C! C! 3!  !H6>HY'
3l.'-k::< = 
  /6688 	D 	DE"_1133 D D	##U\%6	$BCCCCD 	&2 	 	"I{..*95?LN NG%i==I*99)DDDKKk*"!!W"=1      zz||77J)5Jg&w''' %	3}}T**11$77HI$, * * 
D(11-@@##DN$8$8$:$:;;;.2.F.FM/# /#"7+ '//<<	!!$}"5666#,,];;+DM4<HH!!'A"(,{";";(<! = = ={+++y/ * 3 3O D D.;.B.B7.K.K 	K 	K*J
'001DEEF!)19g..))z&/A/9&/A * C C Cz&'9:::%h/ K"--Z5I-JJJ 918J%g. )M		=*@ MM-00EMM1222*++33G<<<X]0022788&''//???//11222r$   N)rT   rU   rV   r   r   r  ru   r[   r$   r"   r   r      sZ        ) ) )V# # #k! k! k!Zd3 d3 d3 d3 d3r$   r   c                       e Zd ZdZd Zd ZdS )OKViewr   c                     || _         d S r_   )rf   )r!   rf   s     r"   r#   zOKView.__init__7  s    r$   c                 
    ddiS )Nr6   OKr[   rz   s    r"   rx   zOKView.__call__:  s    t}r$   N)rT   rU   rV   r    r#   rx   r[   r$   r"   r;  r;  5  s7        E      r$   r;  zui/status.html)rg   viewzui/tail.html)
index.htmlz	tail.htmlzok.htmlc                   *    e Zd ZdZd Zd Zd Zd ZdS )supervisor_ui_handlerz&Supervisor Web UI HTTP Request Handlerc                     || _         d S r_   )r   )r!   r   s     r"   r#   zsupervisor_ui_handler.__init__P  s    &r$   c                    |j         dvrdS |                                \  }}}}|                    d          r|dd          }|                    d          |sd}t                                          D ]}||k    r dS d S )N)POSTGETFr	  r7   r@  T)command	split_uri
startswithVIEWSr  )r!   r   ri   r   queryfragmentviewnames          r"   matchzsupervisor_ui_handler.matchS  s    ?/115(/(9(9(;(;%feXooc"" 	8D ooc"" 	  	 D

 	 	H4tt  	 	r$   c                 v    |j         dk    rt          | |          |_        d S |                     d|           d S )NrE  r&   )rG  r   continue_request)r!   r   s     r"   handle_requestz$supervisor_ui_handler.handle_requestc  sC    ?f$$ )$ 8 8G!!"g.....r$   c                    i }|                                 }|                    |           d|vrd|d<   |d         }t          j        |          }t          j        |          }|                                D ]\  }}	|	d         ||<   |D ]
\  }}	|	||<   |                                |d<   |d         }
|
r$|
d         dk    r|
dd          }
|
r|
d         dk    |
sd}
t                              |
          }|d S d	i i}|d
         }|d         }t          ||||| j
                  } ||          }|j        j        } |t          ||                     d S )NQUERY_STRINGr&   r   r  	PATH_INFOr	  r7   r@  r3   r?  rg   )rg   r   r   r/   r   )cgi_environmentra   r   	parse_qslparse_qsitemsget_server_urlrJ  r;   r]   r   r*   rJ   r   )r!   r,  r   r   cgi_envrK  form_urlencoded
query_datakvri   viewinfor/   	viewclassviewtemplaterf   r?  pushproducers                     r"   rP  z&supervisor_ui_handler.continue_requesti  s   ))++G%%#%D ^$ #,T22&u--
$$&& 	 	DAqdDGG# 	 	DAqDGG$3355\K  	tAw#~~8D  	tAw#~~ 	 D99T??Fr?V$	
+|(/%))1*.*:	< < <
 y!!9($7788888r$   N)rT   rU   rV   IDENTr#   rN  rQ  rP  r[   r$   r"   rB  rB  M  sU        4E' ' '   / / /.9 .9 .9 .9 .9r$   rB  ),rh   rX   r   r(   r$  r   r   supervisor.compatr   r   r   r   r   r	   supervisor.medusar
   supervisor.medusa.http_serverr   r    supervisor.medusa.xmlrpc_handlerr   supervisor.processr   supervisor.httpr   supervisor.optionsr   r   r   supervisor.xmlrpcr   r   r   r   supervisor.rpcinterfacer   r   r]   rd   r~   r   r;  rJ  rB  r[   r$   r"   <module>rm     s5   				 				       ! ! ! ! ! ! $ $ $ $ $ $ & & & & & & & & & & & & ' ' ' ' ' ' ! ! ! ! ! ! % % % % % % ' ' ' ' ' ' 3 3 3 3 3 3 4 4 4 4 4 4 6 6 6 6 6 6 , , , , , , ( ( ( ( ( ( & & & & & & , , , , , , - - - - - - 9 9 9 9 9 9 . . . . . . $ $ $ $ $ $ & & & & & & C C C C C Cu3 u3 u3 u3 u3 u3 u3 u3n! ! ! ! ! ! ! ! !  !  !  !  !  !  !  !D,3 ,3 ,3 ,3 ,3x ,3 ,3 ,3\E3 E3 E3 E3 E3 E3 E3 E3N
        & 
 % 
  	 	 J9 J9 J9 J9 J9 J9 J9 J9 J9 J9r$   