settings_process_management.mako
138 lines
| 3.8 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> | ||||
r2500 | <div class="pull-right"> | |||
<a id="autoRefreshEnable" href="#autoRefreshEnable" onclick="enableAutoRefresh(); return false">${_('start auto refresh')}</a> | ||||
<a id="autoRefreshDisable" href="#autoRefreshDisable" onclick="disableAutoRefresh(); return false" style="display: none">${_('stop auto refresh')}</a> | ||||
</div> | ||||
r1885 | </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() | ||||
%> | ||||
r2500 | <%include file='settings_process_management_data.mako'/> | |||
r1885 | </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'); | ||||
} | ||||
}) | ||||
r2500 | }; | |||
var intervalID = null; | ||||
var currentRequest = null; | ||||
autoRefresh = function(value) { | ||||
var url = pyroutes.url('admin_settings_process_management_data'); | ||||
var loadData = function() { | ||||
currentRequest = $.get(url) | ||||
.done(function(data) { | ||||
currentRequest = null; | ||||
$('#procList').html(data); | ||||
timeagoActivate(); | ||||
var beat = function(doCallback) { | ||||
var callback = function () {}; | ||||
if (doCallback){ | ||||
var callback = function () {beat(false)}; | ||||
} | ||||
$('#processTimeStamp').animate({ | ||||
opacity: $('#processTimeStamp').css('opacity') == '1' ? '0.3' : '1' | ||||
}, 500, callback); | ||||
}; | ||||
beat(true) | ||||
}); | ||||
}; | ||||
if (value) { | ||||
intervalID = setInterval(loadData, 5000); | ||||
} else { | ||||
clearInterval(intervalID); | ||||
} | ||||
}; | ||||
enableAutoRefresh = function() { | ||||
$('#autoRefreshEnable').hide(); | ||||
$('#autoRefreshDisable').show(); | ||||
autoRefresh(true) | ||||
}; | ||||
disableAutoRefresh = function() { | ||||
$('#autoRefreshEnable').show(); | ||||
$('#autoRefreshDisable').hide(); | ||||
autoRefresh(false) | ||||
}; | ||||
r1885 | ||||
r2503 | masterAction = function(pid, action) { | |||
$.ajax({ | ||||
url: pyroutes.url('admin_settings_process_management_master_signal'), | ||||
headers: { | ||||
"X-CSRF-Token": CSRF_TOKEN, | ||||
}, | ||||
data: JSON.stringify({'pid_data': {'pid': pid, 'action': action}}), | ||||
dataType: 'json', | ||||
type: 'POST', | ||||
contentType: "application/json; charset=utf-8", | ||||
success: function (data) { | ||||
}, | ||||
failure: function (data) { | ||||
}, | ||||
error: function (data) { | ||||
} | ||||
}) | ||||
}; | ||||
addWorker = function(pid) { | ||||
masterAction(pid, '+'); | ||||
}; | ||||
removeWorker = function(pid) { | ||||
masterAction(pid, '-'); | ||||
}; | ||||
r1885 | ||||
</script> | ||||