
    AҐi63              	       0   d Z ddlZddlZddlZddlZddlmZmZmZ de	de
fdZde	de
fdZde	de
fdZde	de
fd	Zde	de
fd
Zde	de
fdZde	de
fdZde
de	de
fdZdde
de
dedefdZdde
dedefdZd Zedk(  r ej2                   e              yy)zv
gunicornc - Gunicorn control interface CLI

Interactive and single-command modes for controlling Gunicorn instances.
    N)ControlClientControlClientErrorparse_commanddatareturnc           
      "   | j                  dg       }|syg }|j                  dddddddd	dd
        |j                  d       |D ]t  }|j                  dd      }|j                  dd      }|j                  d      rdnd}|j                  d      }|| dnd}|j                  |dd|dd|d	d|        v |j                  d       |j                  d| j                  dt        |             d       dj                  |      S )z"Format workers output for display.workerszNo workers runningPID<10 AGE<6BOOTED<8	LAST_BEATz(----------------------------------------pid?agebootedyesnolast_heartbeats agon/a Total: countz workers
getappendlenjoin)	r   r	   lineswr   r   r   hbhb_strs	            I/var/www/descvideos/venv/lib/python3.12/site-packages/gunicorn/ctl/cli.pyformat_workersr)      s   hhy"%G#E	LLE#;abz8B-qFG	LL AeeE3eeE3%%/tUU#$!#B4uUCy#b6"+Qvh?@A 
LL	LL7488GS\:;8DE99U    c           
         | j                  d      syg }|j                  d| j                  d              |j                  d       | j                  dg       }|r|j                  d       |j                  dd	d
ddd
ddd
d        |j                  d       |D ]  }|j                  dd      }|j                  dd      }dj                  |j                  dg             dd }|j                  d      }|| dnd}|j                  |d	d
|dd
|dd
|         |j                  d       | j                  dg       }|r|j                  d       |j                  ddd
dd	d
d        |j                  d       |D ]d  }	|	j                  dd      dd }
|	j                  d d!      }|	j                  d"      }|t        |      nd#}|j                  |
dd
|d	d
|        f d$j                  |      S )%z(Format dirty workers output for display.enabledzDirty arbiter not runningzDirty arbiter PID: r   r   r	   zDIRTY WORKERS:r
   r   r   r   r   APPSz<30r   z<------------------------------------------------------------r   r   , appsN   r   r   r   zDIRTY APPS:APPWORKERSLIMIT2--------------------------------------------------import_pathcurrent_workersr   worker_countnoner   )r    r!   r#   str)r   r$   r	   r%   r   r   r/   r&   r'   apppathcurrentlimit	limit_strs                 r(   format_dirtyr?   ,   s   88I*E	LL&txx&789	LLhhy"%G%&c{!E":Qvcl!K=IJX 	DA%%s#C%%s#C99QUU62./4D'(B%'^t5\FLLC9Ac"XQtCj&BC	D 	R88FBD]#c{!Ic?!G9=>X 	BC77=#.s3Dgg/3GGGN+E&+&7E
VILLD:Qwsm1YK@A	B 99Ur*   c                    g }| j                  d      }|rLt        |dz        }t        |dz  dz        }t        |dz        }|r| d| d| d}n|r	| d| d}n| d}nd}|j                  d|        |j                  d	| j                  d
d              |j                  d| j                  dd              |j                  d| j                  dd              |j                  d| j                  dd              |j                  d| j                  dd              |j                  d| j                  dd              | j                  d      }|r|j                  d|        dj                  |      S )z Format stats output for display.uptimei  <   zh zm sunknownzUptime:           zPID:              r   zWorkers current:  workers_currentr   zWorkers target:   workers_targetzWorkers spawned:  workers_spawnedzWorkers killed:   workers_killedzReloads:          reloadsdirty_arbiter_pidzDirty arbiter:    r   )r    intr!   r#   )r   r$   rA   hoursminutesseconds
uptime_str	dirty_pids           r(   format_statsrQ   V   s   EXXhFFdN#v}+,frk"!7"WIRy:J#9Bwiq1J#9AJ
	LL%j\23	LL%dhhui&@%ABC	LL%dhh/@!&D%EFG	LL%dhh/?&C%DEF	LL%dhh/@!&D%EFG	LL%dhh/?&C%DEF	LL%dhhy!&<%=>?,-I))5699Ur*   c           	         | j                  dg       }|syg }|j                  ddddddd        |j                  d	       |D ]S  }|j                  d
d      }|j                  dd      }|j                  dd      }|j                  |dd|dd|        U |j                  d       |j                  d| j                  dt        |             d       dj                  |      S )z$Format listeners output for display.	listenerszNo listeners boundADDRESSz<40r   TYPEr   FDz7-------------------------------------------------------addressr   typefdr   r   r   z
 listenersr   r   )r   rS   r$   lnraddrltyperY   s          r(   format_listenersr]   w   s    b)I#E	LLIc?!F2;av67	LL 4wwy#&$WWT3Sz5*AbT23	4 
LL	LL7488GS^<=ZHI99Ur*   c                     g }t        | j                               D ]E  }| |   }t        |t              rdj	                  d |D              }|j                  | d|        G dj	                  |      S )z!Format config output for display.r.   c              3   2   K   | ]  }t        |        y wN)r9   ).0vs     r(   	<genexpr>z format_config.<locals>.<genexpr>   s     4c!f4   z: r   )sortedkeys
isinstancelistr#   r!   )r   r$   keyvalues       r(   format_configrk      sr    E diik" (S	eT"II4e44EuBug&'	( 99Ur*   c                 X   | j                  di       }g }|j                  d       |j                  d       |r t        d |j                         D              nd}t	        |j                               D ]$  \  }}|j                  d|d|dz    dd	|        & d
j                  |      S )zFormat help output for display.commandszAvailable commands:r   c              3   2   K   | ]  }t        |        y wr`   )r"   )ra   cmds     r(   rc   zformat_help.<locals>.<genexpr>   s     6s#c(6rd   r     <   r   r   )r    r!   maxrf   re   itemsr#   )r   rm   r$   max_lenro   descs         r(   format_helprw      s    xx
B'HE	LL&'	LL ;Cc6hmmo66GHNN,- 7	Tr#a!}@_-Qtf567 99Ur*   c                 j   g }| j                  di       }|j                  d       |j                  d|j                  dd              |j                  d       | j                  dg       }|j                  d| j                  d	d
       d       |r|j                  ddddddddddd        |j                  dd        |D ]u  }|j                  dd      }|j                  dd      }|j                  d      rdnd}|j                  d      }|| dnd}	|j                  d|dd|dd|dd|	        w n|j                  d       |j                  d       | j                  d      }
|
r|j                  d        |j                  d|
j                  dd              |j                  d       | j                  d!g       }|j                  d"| j                  d#d
       d       |r|j                  dddddddd$        |j                  dd%        |D ]  }|j                  dd      }|j                  dd      }|j                  d&g       }|rn|d
   j                  d'      d(   }|j                  d|dd|dd|        |d)d D ]2  }|j                  d'      d(   }|j                  ddddddd|        4 |j                  d|dd|dd*        n4|j                  d       n"|j                  d        |j                  d+       d,j                  |      S )-z#Format show all output for display.arbiterzARBITER (master)z  PID: r   r   r   web_workerszWEB WORKERS (web_worker_countr   )rp   r
   r   r   r   r   r   r   r   z&--------------------------------------r   r   r   r   r   Nr   r   z  (none)dirty_arbiterzDIRTY ARBITERdirty_workerszDIRTY WORKERS (dirty_worker_countr-   r4   r/   :   z
 (no apps)z  (not running)r   )r    r!   splitr#   )r   r$   ry   rz   r%   r   r   r   r&   r'   r}   r~   r/   	first_appr:   app_names                   r(   
format_allr      sE   E hhy"%G	LL#$	LL77;;uc2345	LL ((="-K	LL=*<a!@ ACDr%AeBZq"Q{mLMr(_% 	GA%%s#C%%s#CeeHoU4F'(B%'^t5\FLL2c#YaBxq1VHEF	G 	Z 	LL HH_-M_%w}00<=>?R "5txx0Da'H&IKLLL2eC[%1VH=>LL2hZ)" DeeE3'eeE3'uuVR( $Qc 22 6ILL2c#YaBxq!DE#ABx G#&99S>"#5r"S2b'8*%EFG LL2c#YaBxz!BCD LL$_%&'99Ur*   commandc                 R   | j                         j                         }|dk(  rt        |      S |dk(  rt        |      S |dk(  rt	        |      S |dk(  rt        |      S |dk(  rt        |      S |dk(  rt        |      S |dk(  rt        |      S |rt        j                  |d	      S y
)z
    Format response data based on command.

    Args:
        command: Original command string
        data: Response data dictionary

    Returns:
        Formatted string for display
    zshow allzshow workersz
show dirtyz
show statszshow listenerszshow confighelprr   indentOK)lowerstripr   r)   r?   rQ   r]   rk   rw   jsondumps)r   r   	cmd_lowers      r(   format_responser      s     %%'I J$	n	$d##	l	"D!!	l	"D!!	&	&%%	m	#T""	f	4   ::d1--r*   socket_pathjson_outputc                    	 t        |       5 }t        |      \  }}|r$| ddj                  |       j                         n|}|j	                  |      }|r!t        t        j                  |d             nt        ||      }t        |       	 ddd       y# 1 sw Y   yxY w# t        $ r(}	t        d|	 t        j                         Y d}	~	yd}	~	wt        $ r Y y	w xY w)
z
    Execute single command and exit.

    Args:
        socket_path: Path to control socket
        command: Command to execute
        json_output: If True, output raw JSON

    Returns:
        Exit code (0 for success, 1 for error)
    r   rr   r   Nr   Error: filer      )r   r   r#   r   send_commandprintr   r   r   r   sysstderrKeyboardInterrupt)
r   r   r   clientro   argsfull_commandresultoutputes
             r(   run_commandr     s    ;' 	6%g.IC@DcU!CHHTN#34::<#L((6Fdjj23(f5f	 	 	  sm#**- s;   B% BBB% B"B% "B% %	C .CC C c                 <   	 ddl }d}	 t        |       }|j                          t        d|         t        d	       t                t        j                  j                  d
      }|r	 j                  |       d}	 	 	 t        d      j                         }|s|j!                         dv rn	 t#        |      \  }	}
|
r$|	 ddj%                  |
       j                         n|	}|j'                  |      }|r!t        t)        j*                  |d             nt-        |	|      }t        |       t                |j/                          |r	 j3                  |       |S |S # t        $ r d}Y iw xY w# t        $ r(}t        d| t        j                         Y d}~yd}~ww xY w# t        $ r Y ;w xY w# t        $ r t                Y w xY w# t        $ r[}t        d|        	 |j/                          |j                          n # t        $ r t        d       d}Y Y d}~w xY wY d}~d}~ww xY w# t0        $ r t                d}Y w xY w# t4        $ r Y |S w xY w# |j/                          |r"	 j3                  |       w # t4        $ r Y w w xY ww xY w)z
    Run interactive CLI with readline support.

    Args:
        socket_path: Path to control socket
        json_output: If True, output raw JSON

    Returns:
        Exit code
    r   NTFr   r   r   zConnected to z3Type 'help' for available commands, 'quit' to exit.z~/.gunicornc_historyz
gunicorn> )quitexitqr   rr   r   zConnection lost. Exiting.r   )readlineImportErrorr   connectr   r   r   r   osr;   
expanduserread_history_fileFileNotFoundErrorinputr   EOFErrorr   r   r#   r   r   r   r   closer   write_history_file	Exception)r   r   r   has_readliner   r   history_file	exit_codelinero   r   r   r   r   s                 r(   run_interactiver   -  s   {+
 
M+
'(	
?@	G 77%%&<=L	&&|4 I/\*002
 zz|44)$/	TDH#a'78>>@c,,\:$**VA67,S&9F&M GG R 	++L9 9S    sm#**- ! 		  * & 	sm$LLNNN$) 56 !I %	  	  	 	++L9  s  E# E5 )F) =H9 ?F9 H9 /BG 0H9 I #E21E25	F&>F!!F&)	F65F69GH9 GH9 	H6H1* H
H1H(!H1"H9 'H((H1+H9 1H66H9 9II% II% 	I"!I"%J9J
J	JJJJc                     t        j                  dt         j                  d      } | j                  dddd       | j                  d	d
d       | j                  dddd       | j                  dddd       | j	                         }|j
                  rddlm} t        d| d       y|j                  }t        j                  j                  |      s2t        j                  j                  t        j                         |      }|j                  r!t!        ||j                  |j"                        S t%        ||j"                        S )z#Main entry point for gunicornc CLI.zGunicorn control interfacea?  
Examples:
  gunicornc                      # Interactive mode (default socket)
  gunicornc -s /tmp/myapp.ctl    # Interactive mode with custom socket
  gunicornc -c "show workers"    # Single command mode
  gunicornc -c "worker add 2"    # Add 2 workers
  gunicornc -c "show stats" -j   # Output stats as JSON
        )descriptionformatter_classepilogz-sz--socketzgunicorn.ctlz@Control socket path (default: gunicorn.ctl in current directory))defaultr   z-cz	--commandzExecute single command and exit)r   z-jz--json
store_truezOutput raw JSON (for scripting))actionr   z-vz	--versionzShow version and exitr   )__version__zgunicornc (gunicorn r|   )argparseArgumentParserRawDescriptionHelpFormatteradd_argument
parse_argsversiongunicornr   r   socketr   r;   isabsr#   getcwdr   r   r   r   )parserr   r   r   s       r(   mainr     s3   $$0 <<F jO   k.  
 h.   k$   D||($[M34++K 77==%ggll299;<||;dii@@{DII66r*   __main__)F)__doc__r   r   r   r   gunicorn.ctl.clientr   r   r   dictr9   r)   r?   rQ   r]   rk   rw   r   r   boolrK   r   r   r   __name__r    r*   r(   <module>r      s'  
   	 
 P P # 2't ' 'Tt  B4 C ,  d s  ;T ;c ;| S      FS 3 T c BW W4 WC Wt67r zCHHTV r*   