haproxy-wi/app/static/js/admin/server.js

512 lines
16 KiB
JavaScript

$( function() {
$('#add-server-button').click(function() {
addServerDialog.dialog('open');
});
let server_tabel_title = $( "#server-add-table-overview" ).attr('title');
let addServerDialog = $( "#server-add-table" ).dialog({
autoOpen: false,
resizable: false,
height: "auto",
width: 600,
modal: true,
title: server_tabel_title,
show: {
effect: "fade",
duration: 200
},
hide: {
effect: "fade",
duration: 200
},
buttons: [{
text: add_word,
click: function () {
addServer(this);
}
}, {
text: cancel_word,
click: function () {
$(this).dialog("close");
clearTips();
}
}]
});
$( "#ajax-servers input" ).change(function() {
let id = $(this).attr('id').split('-');
updateServer(id[1])
});
$( "#ajax-servers select" ).on('selectmenuchange',function() {
let id = $(this).attr('id').split('-');
updateServer(id[1])
});
$( "#scan_server" ).change(function() {
if ($('#scan_server').is(':checked')) {
$('.services_for_scan').hide();
} else {
$('.services_for_scan').show();
}
});
});
function addServer(dialog_id) {
toastr.clear()
let valid = true;
let servername = $('#new-server-add').val();
let ip = $('#new-ip').val();
let server_group = $('#new-server-group-add').val();
let cred = $('#credentials').val();
let scan_server = 0;
let type_ip = 0;
let enable = 0;
let haproxy = 0;
let nginx = 0;
let apache = 0;
let firewall = 0;
let add_to_smon = 0;
if ($('#scan_server').is(':checked')) {
scan_server = '1';
}
if ($('#typeip').is(':checked')) {
type_ip = '1';
}
if ($('#enable').is(':checked')) {
enable = '1';
}
if ($('#haproxy').is(':checked')) {
haproxy = '1';
}
if ($('#nginx').is(':checked')) {
nginx = '1';
}
if ($('#apache').is(':checked')) {
apache = '1';
}
if ($('#firewall').is(':checked')) {
firewall = '1';
}
if ($('#add_to_smon').is(':checked')) {
add_to_smon = '1';
}
let allFields = $([]).add($('#new-server-add')).add($('#new-ip')).add($('#new-port'))
allFields.removeClass("ui-state-error");
valid = valid && checkLength($('#new-server-add'), "Hostname", 1);
valid = valid && checkLength($('#new-ip'), "IP", 1);
valid = valid && checkLength($('#new-port'), "Port", 1);
if (cred == null) {
toastr.error('First select credentials');
return false;
}
if (server_group === '------') {
toastr.error('First select a group');
return false;
}
if (server_group === undefined || server_group === null) {
server_group = $('#new-sshgroup').val();
}
if (valid) {
let json_data = {
"name": servername,
"ip": ip,
"port": $('#new-port').val(),
"group": server_group,
"type_ip": type_ip,
"haproxy": haproxy,
'nginx': nginx,
"apache": apache,
"firewall": firewall,
"add_to_smon": add_to_smon,
"enable": enable,
"slave": $('#slavefor').val(),
"cred": cred,
"desc": $('#desc').val(),
"protected": 0
}
$.ajax({
url: "/app/server",
type: "POST",
data: JSON.stringify(json_data),
contentType: "application/json; charset=utf-8",
success: function (data) {
if (data.status === 'failed') {
toastr.error(data.error);
} else {
common_ajax_action_after_success(dialog_id, 'newserver', 'ajax-servers', data.data);
$("input[type=submit], button").button();
$("input[type=checkbox]").checkboxradio();
$(".controlgroup").controlgroup();
$("select").selectmenu();
let id = data.id;
$('select:regex(id, git-server)').append('<option value=' + id + '>' + servername + '</option>').selectmenu("refresh");
$('select:regex(id, backup-server)').append('<option value=' + ip + '>' + servername + '</option>').selectmenu("refresh");
$('select:regex(id, haproxy_exp_addserv)').append('<option value=' +ip + '>' + servername + '</option>').selectmenu("refresh");
$('select:regex(id, nginx_exp_addserv)').append('<option value=' + ip + '>' + servername + '</option>').selectmenu("refresh");
$('select:regex(id, apache_exp_addserv)').append('<option value=' + ip + '>' + servername + '</option>').selectmenu("refresh");
$('select:regex(id, node_exp_addserv)').append('<option value=' + ip + '>' + servername + '</option>').selectmenu("refresh");
$('select:regex(id, geoipserv)').append('<option value=' + ip + '>' + servername + '</option>').selectmenu("refresh");
$('select:regex(id, haproxyaddserv)').append('<option value=' + ip + '>' + servername + '</option>').selectmenu("refresh");
$('select:regex(id, nginxaddserv)').append('<option value=' + ip + '>' + servername + '</option>').selectmenu("refresh");
$('select:regex(id, apacheaddserv)').append('<option value=' + ip + '>' + servername + '</option>').selectmenu("refresh");
after_server_creating(servername, ip, scan_server);
}
}
});
}
}
function after_server_creating(servername, ip, scan_server) {
let json_data = {
"name": servername,
"ip": ip,
"scan_server": scan_server
}
$.ajax({
url: "/app/server",
data: JSON.stringify(json_data),
contentType: "application/json; charset=utf-8",
type: "PATCH",
success: function (data) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('You should install lshw on the server') != '-1') {
toastr.error(data);
} else if (data.indexOf('error:') != '-1') {
toastr.error(data);
}
}
});
}
function updateServer(id) {
toastr.clear();
let type_ip = 0;
let enable = 0;
let firewall = 0;
let protected_serv = 0;
if ($('#typeip-' + id).is(':checked')) {
type_ip = '1';
}
if ($('#enable-' + id).is(':checked')) {
enable = '1';
}
if ($('#firewall-' + id).is(':checked')) {
firewall = '1';
}
if ($('#protected-' + id).is(':checked')) {
protected_serv = '1';
}
let group = $('#servergroup-' + id + ' option:selected').val();
if (group === undefined || group === null) {
group = $('#new-sshgroup').val();
}
let json_data = {
"name": $('#hostname-' + id).val(),
"port": $('#port-' + id).val(),
"group": group,
"type_ip": type_ip,
"firewall": firewall,
"enable": enable,
"slave": $('#slavefor-' + id + ' option:selected').val(),
"cred": $('#credentials-' + id + ' option:selected').val(),
"id": id,
"desc": $('#desc-' + id).val(),
"protected": protected_serv
}
$.ajax({
url: "/app/server",
type: 'PUT',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(json_data),
success: function (data) {
if (data.status === 'failed') {
toastr.error(data.error);
} else {
toastr.clear();
$("#server-" + id).addClass("update", 1000);
setTimeout(function () {
$("#server-" + id).removeClass("update");
}, 2500);
}
}
});
}
function confirmDeleteServer(id) {
$( "#dialog-confirm" ).dialog({
resizable: false,
height: "auto",
width: 400,
modal: true,
title: delete_word + " " + $('#hostname-' + id).val() + "?",
buttons: [{
text: delete_word,
click: function () {
$(this).dialog("close");
removeServer(id);
}
},{
text: cancel_word,
click: function () {
$(this).dialog("close");
}
}]
});
}
function cloneServer(id) {
$( "#add-server-button" ).trigger( "click" );
if ($('#enable-'+id).is(':checked')) {
$('#enable').prop('checked', true)
} else {
$('#enable').prop('checked', false)
}
if ($('#typeip-'+id).is(':checked')) {
$('#typeip').prop('checked', true)
} else {
$('#typeip').prop('checked', false)
}
if ($('#haproxy-'+id).is(':checked')) {
$('#haproxy').prop('checked', true)
} else {
$('#haproxy').prop('checked', false)
}
if ($('#nginx-'+id).is(':checked')) {
$('#nginx').prop('checked', true)
} else {
$('#nginx').prop('checked', false)
}
$('#enable').checkboxradio("refresh");
$('#typeip').checkboxradio("refresh");
$('#haproxy').checkboxradio("refresh");
$('#nginx').checkboxradio("refresh");
$('#new-server-add').val($('#hostname-'+id).val())
$('#new-ip').val($('#ip-'+id).val())
$('#new-port').val($('#port-'+id).val())
$('#desc').val($('#desc-'+id).val())
$('#slavefor').val($('#slavefor-'+id+' option:selected').val()).change()
$('#slavefor').selectmenu("refresh");
$('#credentials').val($('#credentials-'+id+' option:selected').val()).change()
$('#credentials').selectmenu("refresh");
if (cur_url[0].indexOf('admin') != '-1') {
$('#new-server-group-add').val($('#servergroup-'+id+' option:selected').val()).change()
$('#new-server-group-add').selectmenu("refresh");
}
}
function removeServer(id) {
$("#server-" + id).css("background-color", "#f2dede");
$.ajax({
url: "/app/server",
type: "DELETE",
data: JSON.stringify({'id': id}),
contentType: "application/json; charset=utf-8",
success: function (data) {
if (data.status === 'failed') {
toastr.error(data.error);
} else {
$("#server-" + id).remove();
}
}
});
}
function viewFirewallRules(ip) {
$.ajax({
url: "/app/server/firewall/" + ip,
success: function (data) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('danger') != '-1' || data.indexOf('unique') != '-1' || data.indexOf('error: ') != '-1') {
toastr.error(data);
} else {
toastr.clear();
$("#firewall_rules_body").html(data);
$("#firewall_rules" ).dialog({
resizable: false,
height: "auto",
width: 860,
modal: true,
title: "Firewall rules",
buttons: {
Close: function() {
$( this ).dialog( "close" );
$("#firewall_rules_body").html('');
}
}
});
}
}
} );
}
function updateServerInfo(ip, id) {
$.ajax({
url: "/app/server/system_info/update/" + ip + "/" + id,
success: function (data) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1' || data.indexOf('error_code') != '-1') {
toastr.error(data);
} else {
$("#server-info").html(data);
$('#server-info').show();
$.getScript(awesome);
}
}
});
}
function showServerInfo(id, ip) {
let server_info = translate_div.attr('data-server_info');
$.ajax({
url: "/app/server/system_info/get/" + ip + "/" +id,
success: function (data) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1' || data.indexOf('error_code') != '-1') {
toastr.error(data);
} else {
$("#server-info").html(data);
$("#dialog-server-info").dialog({
resizable: false,
height: "auto",
width: 1000,
modal: true,
title: server_info + " (" + ip + ")",
buttons: [{
text: close_word,
click: function () {
$(this).dialog("close");
}
}]
});
$.getScript(awesome);
}
}
});
}
function serverIsUp(server_id) {
const source = new EventSource(`/app/server/check/server/${server_id}`);
let server_div = $('#server_status-' + server_id);
source.onmessage = function (event) {
let data = JSON.parse(event.data);
if (data.status === 'up') {
server_div.removeClass('serverNone');
server_div.removeClass('serverDown');
server_div.addClass('serverUp');
// server_div.attr('title', 'Server is reachable');
} else if (data.status === 'down') {
server_div.removeClass('serverNone');
server_div.removeClass('serverUp');
server_div.addClass('serverDown');
// server_div.attr('title', 'Server is unreachable');
} else {
server_div.removeClass('serverDown');
server_div.removeClass('serverUp');
server_div.addClass('serverNone');
// server_div.attr('title', 'Cannot get server status');
}
$('#hostname-' + server_id).val(data.name);
$('#ip-' + server_id).val(data.ip);
$('#port-' + server_id).val(data.port);
$('#desc-' + server_id).val(data.desc);
if (data.enabled === 1) {
$('#enable-' + server_id).prop('checked', true);
} else {
$('#enable-' + server_id).prop('checked', false);
}
if (data.protected === 1) {
$('#protected-' + server_id).prop('checked', true);
} else {
$('#protected-' + server_id).prop('checked', false);
}
if (data.type_ip === 1) {
$('#typeip-' + server_id).prop('checked', true);
} else {
$('#typeip-' + server_id).prop('checked', false);
}
$('#typeip-' + server_id).checkboxradio("refresh");
$('#protected-' + server_id).checkboxradio("refresh");
$('#enable-' + server_id).checkboxradio("refresh");
$('#servergroup-' + server_id).val(data.group_id).change();
$('#credentials-' + server_id).val(data.creds_id).change();
$('#slavefor-' + server_id).val(data.creds_id).change();
$('#servergroup-' + server_id).selectmenu("refresh");
$('#credentials-' + server_id).selectmenu("refresh");
$('#slavefor-' + server_id).selectmenu("refresh");
}
source.onerror = function (event) {
server_div.remove();
}
}
function openChangeServerServiceDialog(server_id) {
let user_groups_word = translate_div.attr('data-user_groups');
let hostname = $('#hostname-' + server_id).val();
$.ajax({
url: "/app/server/services/" + server_id,
success: function (data) {
$("#groups-roles").html(data);
$("#groups-roles").dialog({
resizable: false,
height: "auto",
width: 700,
modal: true,
title: user_groups_word + ' ' + hostname,
buttons: [{
text: save_word,
click: function () {
changeServerServices(server_id);
$(this).dialog("close");
}
}, {
text: cancel_word,
click: function () {
$(this).dialog("close");
}
}]
});
}
});
}
function addServiceToServer(service_id) {
let service_name = $('#add_service-'+service_id).attr('data-service_name');
let length_tr = $('#checked_services tbody tr').length;
let tr_class = 'odd';
if (length_tr % 2 != 0) {
tr_class = 'even';
}
let html_tag = '<tr class="'+tr_class+'" id="remove_service-'+service_id+'" data-service_name="'+service_name+'">' +
'<td class="padding20" style="width: 100%;">'+service_name+'</td>' +
'<td><span class="add_user_group" onclick="removeServiceFromUser('+service_id+')" title="'+delete_word+' '+service_word+'">-</span></td></tr>';
$('#add_service-'+service_id).remove();
$("#checked_services tbody").append(html_tag);
}
function removeServiceFromServer(service_id) {
let service_name = $('#remove_service-'+service_id).attr('data-service_name');
let length_tr = $('#all_services tbody tr').length;
let tr_class = 'odd';
if (length_tr % 2 != 0) {
tr_class = 'even';
}
let html_tag = '<tr class="'+tr_class+'" id="add_service-'+service_id+'" data-service_name="'+service_name+'">' +
'<td class="padding20" style="width: 100%;">'+service_name+'</td>' +
'<td><span class="add_user_group" onclick="addServiceToUser('+service_id+')" title="'+add_word+' '+service_word+'">+</span></td></tr>';
$('#remove_service-'+service_id).remove();
$("#all_services tbody").append(html_tag);
}
function changeServerServices(server_id) {
let jsonData = {};
$('#checked_services tbody tr').each(function () {
let this_id = $(this).attr('id').split('-')[1];
jsonData[this_id] = 1
});
$('#all_services tbody tr').each(function () {
let this_id = $(this).attr('id').split('-')[1];
jsonData[this_id] = 0
});
$.ajax({
url: "/app/server/services/" + server_id,
data: {
jsonDatas: JSON.stringify(jsonData),
changeServerServicesServer: $('#hostname-' + server_id).val(),
},
type: "POST",
success: function (data) {
if (data.indexOf('error:') != '-1' || data.indexOf('Failed') != '-1') {
toastr.error(data);
} else {
$("#server-" + server_id).addClass("update", 1000);
setTimeout(function () {
$("#server-" + server_id).removeClass("update");
}, 2500);
}
}
});
}