settings_process_management.mako
141 lines
| 4.5 KiB
| application/x-mako
|
MakoHtmlLexer
r1885 | ||||
<div id="update_notice" style="display: none; margin: -40px 0px 20px 0px"> | ||||
<div>${_('Checking for updates...')}</div> | ||||
</div> | ||||
<div class="panel panel-default"> | ||||
<div class="panel-heading"> | ||||
<h3 class="panel-title">${_('Gunicorn process management')}</h3> | ||||
</div> | ||||
<div class="panel-body" id="app"> | ||||
<h3>List of Gunicorn processes on this machine</h3> | ||||
r2165 | <% | |||
r2166 | def get_name(proc): | |||
cmd = ' '.join(proc.cmdline()) | ||||
r2165 | if 'vcsserver.ini' in cmd: | |||
return 'VCSServer' | ||||
elif 'rhodecode.ini' in cmd: | ||||
return 'RhodeCode' | ||||
return proc.name() | ||||
%> | ||||
r1885 | <table> | |||
% for proc in c.gunicorn_processes: | ||||
<% mem = proc.memory_info()%> | ||||
r1887 | <% children = proc.children(recursive=True) %> | |||
% if children: | ||||
r1885 | ||||
<tr> | ||||
<td> | ||||
<code> | ||||
r2166 | ${proc.pid} - ${get_name(proc)} | |||
r1885 | </code> | |||
</td> | ||||
<td> | ||||
r1886 | <a href="#showCommand" onclick="$('#pid'+${proc.pid}).toggle();return false"> command </a> | |||
<code id="pid${proc.pid}" style="display: none"> | ||||
r2166 | ${' '.join(proc.cmdline())} | |||
r1886 | </code> | |||
</td> | ||||
r1888 | <td></td> | |||
r1886 | <td> | |||
r1885 | RSS:${h.format_byte_size_binary(mem.rss)} | |||
</td> | ||||
<td> | ||||
VMS:${h.format_byte_size_binary(mem.vms)} | ||||
</td> | ||||
<td> | ||||
r2304 | AGE: ${h.age_component(h.time_to_utcdatetime(proc.create_time()))} | |||
</td> | ||||
<td> | ||||
r1901 | MASTER | |||
r1887 | </td> | |||
</tr> | ||||
r1901 | <% mem_sum = 0 %> | |||
r1887 | % for proc_child in children: | |||
<% mem = proc_child.memory_info()%> | ||||
<tr> | ||||
<td> | ||||
<code> | ||||
r2166 | | ${proc_child.pid} - ${get_name(proc_child)} | |||
r1887 | </code> | |||
</td> | ||||
<td> | ||||
<a href="#showCommand" onclick="$('#pid'+${proc_child.pid}).toggle();return false"> command </a> | ||||
<code id="pid${proc_child.pid}" style="display: none"> | ||||
r1888 | ${' '.join(proc_child.cmdline())} | |||
r1887 | </code> | |||
</td> | ||||
<td> | ||||
r1888 | CPU: ${proc_child.cpu_percent()} % | |||
</td> | ||||
<td> | ||||
r1887 | RSS:${h.format_byte_size_binary(mem.rss)} | |||
r1901 | <% mem_sum += mem.rss %> | |||
r1887 | </td> | |||
<td> | ||||
VMS:${h.format_byte_size_binary(mem.vms)} | ||||
</td> | ||||
<td> | ||||
r2304 | AGE: ${h.age_component(h.time_to_utcdatetime(proc_child.create_time()))} | |||
</td> | ||||
<td> | ||||
r1887 | <a href="#restartProcess" onclick="restart(this, ${proc_child.pid});return false"> | |||
r1885 | restart | |||
</a> | ||||
r1887 | </td> | |||
</tr> | ||||
% endfor | ||||
r1901 | <tr> | |||
<td colspan="2"><code>| total processes: ${len(children)}</code></td> | ||||
<td></td> | ||||
<td><strong>RSS:${h.format_byte_size_binary(mem_sum)}</strong></td> | ||||
<td></td> | ||||
</tr> | ||||
r2165 | <tr><td> <code> -- </code> </td></tr> | |||
r1887 | ||||
% endif | ||||
r1885 | % endfor | |||
</table> | ||||
</div> | ||||
</div> | ||||
<script> | ||||
restart = function(elem, pid) { | ||||
if ($(elem).hasClass('disabled')){ | ||||
return; | ||||
} | ||||
$(elem).addClass('disabled'); | ||||
$(elem).html('processing...'); | ||||
$.ajax({ | ||||
url: pyroutes.url('admin_settings_process_management_signal'), | ||||
headers: { | ||||
"X-CSRF-Token": CSRF_TOKEN, | ||||
}, | ||||
data: JSON.stringify({'pids': [pid]}), | ||||
dataType: 'json', | ||||
type: 'POST', | ||||
contentType: "application/json; charset=utf-8", | ||||
success: function (data) { | ||||
$(elem).html(data.result); | ||||
$(elem).removeClass('disabled'); | ||||
}, | ||||
failure: function (data) { | ||||
$(elem).text('FAILED TO LOAD RESULT'); | ||||
$(elem).removeClass('disabled'); | ||||
}, | ||||
error: function (data) { | ||||
$(elem).text('FAILED TO LOAD RESULT'); | ||||
$(elem).removeClass('disabled'); | ||||
} | ||||
}) | ||||
} | ||||
</script> | ||||