Files
djangohelper/__pycache__/gunicorn_tab.cpython-38.pyc

118 lines
13 KiB
Plaintext
Raw Normal View History

U
2025-08-28 22:30:17 +08:00
<00>f<EFBFBD>h<EFBFBD>L<00>@s<>ddlZddlmZddlmZmZmZmZmZm Z m
Z
2025-08-28 22:30:17 +08:00
m Z m Z m Z mZmZmZmZddlmZddlmZmZmZmZGdd<07>de<10>ZGdd <09>d e<04>ZdS)
<EFBFBD>N)<01>logger)<0E>QWidget<65> QVBoxLayout<75> QHBoxLayout<75>QLabel<65> QLineEdit<69> QPushButton<6F> QComboBox<6F> QMessageBox<6F> QTextEdit<69> QGroupBox<6F> QGridLayout<75> QProgressBar<61>QDialog<6F>QDialogButtonBox)<01>Qt)<04>GunicornInstallThread<61>GunicornTestThread<61>UploadGunicornServiceThread<61>ManageGunicornServiceThreadcs&eZdZd<06>fdd<03> Zdd<05>Z<04>ZS)<07>PasswordDialogNcs<>t<00><00>|<01>|<00>d<01>|<00>d<02>t<04>}t<05>}|<03>td<03><01>t<08>|_ |j <09>
tj <0B>|<03>|j <09>|<02> |<03>t t jt jB<00>}|j<10>|j<12>|j<13>|j<14>|<02>|<04>|<00>|<02>dS)Nu 输入密码i,u密码:)<16>super<65>__init__<5F>setWindowTitle<6C>setMinimumWidthrr<00> addWidgetrr<00>password_input<75> setEchoMode<64>Password<72> addLayoutr<00>Ok<4F>Cancel<65>accepted<65>connect<63>accept<70>rejected<65>reject<63> setLayout)<05>self<6C>parent<6E>layout<75>password_layoutZ
button_box<EFBFBD><01> __class__<5F><00>Oc:\Users\xiaji\Documents\个人文件夹\夏骥\web应用部署\gunicorn_tab.pyrs 

 

zPasswordDialog.__init__cCs
|j<00><01>S<00>N)r<00>text<78>r(r.r.r/<00> get_password%szPasswordDialog.get_password)N)<06>__name__<5F>
__module__<EFBFBD> __qualname__rr3<00> __classcell__r.r.r,r/r srcs<>eZdZd&<26>fdd<03> Zdd<05>Zdd<07>Zdd <09>Zd
d <0B>Zd d <0A>Zdd<0F>Z dd<11>Z
2025-08-28 22:30:17 +08:00
dd<13>Z dd<15>Z dd<17>Z dd<19>Zdd<1B>Zdd<1D>Zdd<1F>Zd d!<21>Zd"d#<23>Zd$d%<25>Z<14>ZS)'<27> GunicornTabNcsJt<00><00>|<01>||_|<00><03>|jrFt|jd<01>rF|jj<05>|j<07>t<08> d<02>dS)N<>server_changedu/Gunicorn标签已连接到服务器切换信号)
rrr)<00>init_ui<75>hasattrr9r#<00>on_server_changedr<00>info)r(r)r,r.r/r*s  zGunicornTab.__init__c
sjt<00>}td<01>}t<02>}|<03>td<02>dd<03>t<05><00>_<06>j<06>d<04>|<03><03>jdd<05>|<03>td<06>dd<03>td<07><01>_|<03><03>jdd<05>|<03>td<08>d d<03>td
<EFBFBD><01>_ |<03><03>j d d<05>|<03>td <0B>d d<03>td <0A><01>_
|<03><03>j
d d<05>t d<0E><01>_ <0C>j j <0A><0E>j<0F>|<03><03>j dd<05>|<02>|<03>|<01>|<02>td<10>}t<02>}t d<11><01>_<11>jj <0A><0E>j<12>|<05><03>jdd<03>t d<12><01>_<13>jj <0A><0E>j<14>|<05><03>jdd<05>t d<13><01>_<15>jj <0A><0E>j<16>|<05><03>jdd<03>t d<14><01>_<17>jj <0A><0E>fdd<16><08>|<05><03>jdd<05>t d<17><01>_<18>jj <0A><0E>fdd<16><08>|<05><03>jd d<03>t d<19><01>_<19>jj <0A><0E>fdd<16><08>|<05><03>jd d<05>t d<1B><01>_<1A>jj <0A><0E>fdd<16><08>|<05><03>jd d<03>t d<1D><01>_<1B>jj <0A><0E>fdd<16><08>|<05><03>jd d<05>|<04>|<05>|<01>|<04>td<1F>}t<00>}t<1C><00>_<1D>j<1D>d <20>|<07><03>j<1D>|<06>|<07>|<01>|<06>td!<21>}t<00>} t<1C><00>_<1E>j<1E>d"<22><00>j<1E>d#<23>| <09><03>j<1E>t <20><00>_!<21>j!<21>"d$<24>| <09><03>j!<21>|<08>| <09>|<01>|<08>|<01>#<23><00><00>|<01><00><00><0F>dS)%NuGunicorn配置uDjango项目路径:rz/home/user/django_project<63>u 服务名称:Zdjango_gunicornu端口:<3A><00>8000u工作进程数:<3A><00>3u 加载配置<E9858D>uGunicorn操作u安装Gunicornu测试Gunicornu上传服务文件u 启动服务cs
2025-08-28 22:30:17 +08:00
<00><00>d<01>S)N<>start<72><01>manage_servicer.r2r.r/<00><lambda>c<00>z%GunicornTab.init_ui.<locals>.<lambda>u 停止服务cs
<00><00>d<01>S)N<>stoprEr.r2r.r/rGgrHu 重启服务cs
<00><00>d<01>S)N<>restartrEr.r2r.r/rGkrHu查看服务状态cs
<00><00>d<01>S)N<>statusrEr.r2r.r/rGorHu启用开机自启cs
<00><00>d<01>S)N<>enablerEr.r2r.r/rGsrHuGunicorn服务文件u/Gunicorn服务文件内容将在这里显示...u 操作输出Tu!操作结果将在这里显示...F)$rr r rrr<00>django_path_input<75>setPlaceholderText<78>service_name_input<75>
port_inputZ workers_inputrZload_config_btn<74>clickedr#<00>load_gunicorn_configr'<00>install_gunicorn_btn<74>install_gunicorn<72>test_gunicorn_btn<74> test_gunicorn<72>upload_service_btn<74>upload_service_file<6C>start_service_btn<74>stop_service_btn<74>restart_service_btn<74>status_service_btn<74>enable_service_btnr <00>service_editor<6F> output_text<78> setReadOnlyr<00> progress_bar<61>
setVisible<EFBFBD>
addStretch)
2025-08-28 22:30:17 +08:00
r(r*<00> config_group<75> config_layoutZgunicorn_groupZgunicorn_layoutZ service_groupZservice_layout<75> output_group<75> output_layoutr.r2r/r:3s<> 















  

     


2025-08-28 22:30:17 +08:00
zGunicornTab.init_uic
Cs<><00>zj|jr<>t|jd<01>r<>|j<00><02>}|r<>|<01>dd<03>}|<01>dd<05>}|<01>dd<07>}|j<04>|<02>|j<06>|<03>|<00>|<01>}|j<08>|<05>t <09>
d|<02>d |<03><00><04>n
t <09> d
<EFBFBD>n<>t j <0A>t j <0A>t<10>d <0B>}t|d d d<0E><03>}t<12>|<07>}W5QRX|<01>rjd|k<06>rjt|d<00>dk<04>rj|dd}|<08>dd<03>}|<08>dd<05>}|<08>dd<07>}|j<04>|<02>|j<06>|<03>|<00>|<08>}|j<08>|<05>t <09>
d|<02>d |<03><00><04>Wn8tk
<EFBFBD>r<>} zt <09>dt| <09><01><00><02>W5d} ~ XYnXdS)u1加载Gunicorn配置使用config.json中的值<E79A84>get_current_config<69> django_path<74><00> project_name<6D> myproject<63>username<6D>www-datau:从当前服务器配置加载Gunicorn配置: django_path=z, project_name=u未找到当前服务器配置z config.json<6F>rzutf-8)<01>encoding<6E>serversr<00>remote_directoryu1从配置文件加载Gunicorn配置: django_path=u加载Gunicorn配置失败: N)r)r;rh<00>getrM<00>setTextrO<00>!generate_service_file_from_configr^rr=<00>warning<6E>os<6F>path<74>join<69>dirname<6D>__file__<5F>open<65>json<6F>load<61>len<65> Exception<6F>error<6F>str)
r(<00>configrirkrm<00>service_content<6E> config_path<74>f<> server_config<69>er.r.r/rR<00>s8
     
  "      
 z GunicornTab.load_gunicorn_configcCsn|<01>dd<02>}|<01>dd<04>}|<01>dd<06>}|<04>d<07><01>d|<03><00>}d|<03>d |<02>d
|<02>d |<05>d |<03>d |<05>d|<05>d|<03>d<10>S)u/根据config.json配置生成服务文件内容rmrnrkrlrrz
/home/user<65>/<2F>'[Unit]
Description=Gunicorn daemon for <20>&
After=network.target
[Service]
2025-08-28 22:30:17 +08:00
User=<3D>
Group=<3D>
WorkingDirectory=u<>
# 所有Gunicorn参数直接在这里配置
ExecStart=/usr/local/bin/gunicorn \
--bind 127.0.0.1:8000 \
--workers $(nproc --all * 2 + 1) \
--worker-class sync \
--timeout 60 \
--name <20> \
--access-logfile <20>7/logs/gunicorn_access.log \
--error-logfile <20>D/logs/gunicorn_error.log \
--log-level info \
<20>h.wsgi:application
Restart=on-failure
RestartSec=5s
PrivateTmp=true
[Install]
2025-08-28 22:30:17 +08:00
WantedBy=multi-user.target)rs<00>rstrip)r(r<>rmrkri<00> project_pathr.r.r/ru<00>s*   <02><02><02><02><02><02><02><02>z-GunicornTab.generate_service_file_from_configc Cs<>d}|jr"t|jd<02>r"|jj<02><03>}|r0|<00>|<05>Sd}|}|<02>d<04><01>d|<07><00>}d|<07>d|<06>d|<06>d|<08>d |<03>d
|<07>d |<08>d |<08>d |<07>d<0E>SdS)u保持向后兼容的方法N<E6B395>server_connection_tabrnr<>r<>r<>r<>r<>um
# 所有Gunicorn参数直接在这里配置
ExecStart=/usr/local/bin/gunicorn \
--bind 127.0.0.1:z~ \
--workers $(nproc --all * 2 + 1) \
--worker-class sync \
--timeout 60 \
--name r<>r<>r<>r<>)r)r;r<>rhrur<>) r(<00> service_nameri<00>portZworkersr<73>rmrkr<>r.r.r/<00>generate_service_file<6C>s6 
<02><02><02><02>
<02><02><02><02><02>z!GunicornTab.generate_service_filecCs$|jr|jjs t<02>|dd<02>dSdS)N<>警告u请先连接服务器FT)r)<00>
ssh_clientr
2025-08-28 22:30:17 +08:00
rvr2r.r.r/<00>check_ssh_connectionsz GunicornTab.check_ssh_connectioncCsrd}|jr$t|jd<01>r$|jjj<03><04>}|snt|<00>}|<02><06>tjkrj|<02> <09>}|jrnt|jd<01>rn|jjj<03>
|<01>ndS|S)Nr<4E>) r)r;r<>rr1r<00>exec_r<00>Acceptedr3rt)r(<00>passwordZdialogr.r.r/r3szGunicornTab.get_passwordcCs<>|<00><00>s dS|j<01>d<01>|j<03>d<02>|j<05>d<03>|j<05>d<04>|<00><08>}|dkrh|j<03>d<03>|j<05>d<02>dSt |j
j |<01>|_ |j j <0A>|j<0F>|j j<10>|j<11>|j <0C><12>dS)Nu正在安装Gunicorn...FTr)r<>r_<00>appendrS<00>
setEnabledrarb<00>setValuer3rr)r<>Zgunicorn_install_thread<61>progress_updatedr#<00>update_progress<73> result_ready<64>on_install_gunicorn_resultrD)r(r<>r.r.r/rT2s      zGunicornTab.install_gunicorncCs|j<00>|<01>dSr0)rar<>)r(<00>valuer.r.r/r<>GszGunicornTab.update_progresscCsf|j<00>d<01>|j<02>d<02>|r@|j<04>d|<02><00><02>t<06>d|<02><00><02>n"|j<04>d|<02><00><02>t<06>d|<02><00><02>dS)NTFuGunicorn安装成功: uGunicorn安装失败: ) rSr<>rarbr_r<>rr=r<><00>r(<00>success<73>messager.r.r/r<>Js  z&GunicornTab.on_install_gunicorn_resultcCs<>|<00><00>s dS|j<01><02><00><03>}|s0t<04>|dd<02>dS|j<06>d|<01>d<04><03>|j<08> d<05>|j
<EFBFBD> d<06>|j
2025-08-28 22:30:17 +08:00
<EFBFBD> d<07>t |jj|<01>|_|jj<11>|j<13>|jj<14>|j<15>|j<10><16>dS)Nr<4E>u请输入Django项目路径u正在测试Gunicorn <20>...FTr)r<>rMr1<00>stripr
rvr_r<>rUr<>rarbr<>rr)r<>Zgunicorn_test_threadr<64>r#r<>r<><00>on_test_gunicorn_resultrD)r(rir.r.r/rVTs   zGunicornTab.test_gunicorncCsf|j<00>d<01>|j<02>d<02>|r@|j<04>d|<02><00><02>t<06>d|<02><00><02>n"|j<04>d|<02><00><02>t<06>d|<02><00><02>dS)NTFuGunicorn测试成功: uGunicorn测试失败: ) rUr<>rarbr_r<>rr=r<>r<>r.r.r/r<>gs  z#GunicornTab.on_test_gunicorn_resultcCs<>|<00><00>s dSd}|jr.t|jd<01>r.|jj<03><04>}|r@|<01>dd<03>}nd}d|<02><00>}|j<06><07>}|r`|srt<08> |dd<06>dS|j
<EFBFBD> d|<03>d<08><03>|j <0C> d <09>|<00><0E>}|dkr<>|j <0C> d
<EFBFBD>dSt|jj|||<05>|_|jj<12>|j<14>|j<11><15>dS) Nr<4E>rk<00>django<67> gunicorn_r<5F>u请编辑服务文件内容u正在上传服务文件 r<>FT)r<>r)r;r<>rhrsr^<00> toPlainTextr
rvr_r<>rWr<>r3rr<><00> upload_threadr<64>r#<00>on_upload_service_resultrD)r(r<>rkr<>r<>r<>r.r.r/rXqs, 

  zGunicornTab.upload_service_filecCsZ|j<00>d<01>|r4|j<02>d|<02><00><02>t<04>d|<02><00><02>n"|j<02>d|<02><00><02>t<04>d|<02><00><02>dS)NTu服务文件上传成功: u服务文件上传失败: )rWr<>r_r<>rr=r<>r<>r.r.r/r<><00>s  z$GunicornTab.on_upload_service_resultcs<><00><01><00>s dSd}<02>jr.t<02>jd<01>r.<2E>jj<03><04>}|r@|<02>dd<03>}nd}d|<03><00>}<04>j<06>d|<01>d<06><03><00>j<08>j <09>j
<EFBFBD>j <0B>j g<05><00>D]}|<05> d<07>q~<7E><01><0E>}|dkr<><72>D]}|<05> d<08>q<>dSt<0F>jj|||<06><04>_<11>jj<12><13><00>fd d
<EFBFBD><08><00>j<11><14>dS) Nr<4E>rkr<>r<>u正在执行服务 u
操作...FTcs<00><01>||<01><00>Sr0)<01>on_manage_service_result)<02>s<>m<><02>buttonsr(r.r/rG<00>rHz,GunicornTab.manage_service.<locals>.<lambda>)r<>r)r;r<>rhrsr_r<>rYrZr[r\r]r<>r3rr<>Z manage_threadr<64>r#rD)r(<00>actionr<6E>rkr<><00>btnr<6E>r.r<>r/rF<00>s0 
 <04>  zGunicornTab.manage_servicecCsb|D]}|<04>d<01>q|r<|j<01>d|<02><00><02>t<03>d|<02><00><02>n"|j<01>d|<02><00><02>t<03>d|<02><00><02>dS)NTu服务操作成功: u服务操作失败: )r<>r_r<>rr=r<>)r(r<>r<>r<>r<>r.r.r/r<><00>s z$GunicornTab.on_manage_service_resultcCs |<00><00>dSr0)rRr2r.r.r/r<<00>szGunicornTab.on_server_changedcCs\|<00><00>s dSd}|jr.t|jd<01>r.|jj<03><04>}|r@|<01>dd<03>}nd}d|<02><00>}|<00>d<05>dS)Nr<4E>rkr<>r<>rK)r<>r)r;r<>rhrsrF)r(r<>rkr<>r.r.r/<00>check_service_status<75>s 
z GunicornTab.check_service_status)N)r4r5r6rr:rRrur<>r<>r3rTr<>r<>rVr<>rXr<>rFr<>r<r<>r7r.r.r,r/r8)s$ h2#)

2025-08-28 22:30:17 +08:00
# $ r8)rw<00>logurur<00>PySide6.QtWidgetsrrrrrrr r
r r r rrr<00>PySide6.QtCorer<00>threadsrrrrrr8r.r.r.r/<00><module>s  @