🚸 可以使指定服务器不参与服务监控

This commit is contained in:
naiba
2021-04-22 21:53:31 +08:00
parent 6f565ba022
commit 585cf538d0
10 changed files with 419 additions and 292 deletions

View File

@@ -1,278 +1,368 @@
function readableBytes(bytes) {
var i = Math.floor(Math.log(bytes) / Math.log(1024)),
sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
return (bytes / Math.pow(1024, i)).toFixed(0) + ' ' + sizes[i];
var i = Math.floor(Math.log(bytes) / Math.log(1024)),
sizes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
return (bytes / Math.pow(1024, i)).toFixed(0) + " " + sizes[i];
}
const confirmBtn = $('.mini.confirm.modal .positive.button')
const confirmBtn = $(".mini.confirm.modal .positive.button");
function showConfirm(title, content, callFn, extData) {
const modal = $('.mini.confirm.modal')
modal.children('.header').text(title)
modal.children('.content').text(content)
if (confirmBtn.hasClass('loading')) {
return false
}
modal.modal({
closable: true,
onApprove: function () {
confirmBtn.toggleClass('loading')
callFn(extData)
return false
}
}).modal('show')
const modal = $(".mini.confirm.modal");
modal.children(".header").text(title);
modal.children(".content").text(content);
if (confirmBtn.hasClass("loading")) {
return false;
}
modal
.modal({
closable: true,
onApprove: function () {
confirmBtn.toggleClass("loading");
callFn(extData);
return false;
},
})
.modal("show");
}
function showFormModal(modelSelector, formID, URL, getData) {
$(modelSelector).modal({
closable: true,
onApprove: function () {
let success = false
const btn = $(modelSelector + ' .positive.button')
const form = $(modelSelector + ' form')
if (btn.hasClass('loading')) {
return success
}
form.children('.message').remove()
btn.toggleClass('loading')
const data = getData ? getData() : $(formID).serializeArray().reduce(function (obj, item) {
$(modelSelector)
.modal({
closable: true,
onApprove: function () {
let success = false;
const btn = $(modelSelector + " .positive.button");
const form = $(modelSelector + " form");
if (btn.hasClass("loading")) {
return success;
}
form.children(".message").remove();
btn.toggleClass("loading");
const data = getData
? getData()
: $(formID)
.serializeArray()
.reduce(function (obj, item) {
// ID 类的数据
if ((item.name.endsWith('_id') ||
item.name === 'id' || item.name === 'ID' ||
item.name === 'RequestType' || item.name === 'RequestMethod' ||
item.name === 'DisplayIndex' || item.name === 'Type')) {
obj[item.name] = parseInt(item.value);
if (
item.name.endsWith("_id") ||
item.name === "id" ||
item.name === "ID" ||
item.name === "RequestType" ||
item.name === "RequestMethod" ||
item.name === "DisplayIndex" ||
item.name === "Type"
) {
obj[item.name] = parseInt(item.value);
} else {
obj[item.name] = item.value;
obj[item.name] = item.value;
}
if (item.name == 'ServersRaw') {
if (item.value.length > 2) {
obj[item.name] = '[' + item.value.substr(3, item.value.length - 1) + ']'
}
if (item.name.endsWith("ServersRaw")) {
if (item.value.length > 2) {
obj[item.name] =
"[" + item.value.substr(3, item.value.length - 1) + "]";
}
}
return obj;
}, {});
$.post(URL, JSON.stringify(data)).done(function (resp) {
if (resp.code == 200) {
if (resp.message) {
$.suiAlert({
title: '操作成功',
type: 'success',
description: resp.message,
time: '3',
position: 'top-center',
});
}
window.location.reload()
} else {
form.append(`<div class="ui negative message"><div class="header">操作失败</div><p>` + resp.message + `</p></div>`)
}
}).fail(function (err) {
form.append(`<div class="ui negative message"><div class="header">网络错误</div><p>` + err.responseText + `</p></div>`)
}).always(function () {
btn.toggleClass('loading')
});
return success
}
}).modal('show')
}, {});
$.post(URL, JSON.stringify(data))
.done(function (resp) {
if (resp.code == 200) {
if (resp.message) {
$.suiAlert({
title: "操作成功",
type: "success",
description: resp.message,
time: "3",
position: "top-center",
});
}
window.location.reload();
} else {
form.append(
`<div class="ui negative message"><div class="header">操作失败</div><p>` +
resp.message +
`</p></div>`
);
}
})
.fail(function (err) {
form.append(
`<div class="ui negative message"><div class="header">网络错误</div><p>` +
err.responseText +
`</p></div>`
);
})
.always(function () {
btn.toggleClass("loading");
});
return success;
},
})
.modal("show");
}
function addOrEditAlertRule(rule) {
const modal = $('.rule.modal')
modal.children('.header').text((rule ? '修改' : '添加') + '报警规则')
modal.find('.positive.button').html(rule ? '修改<i class="edit icon"></i>' : '添加<i class="add icon"></i>')
modal.find('input[name=ID]').val(rule ? rule.ID : null)
modal.find('input[name=Name]').val(rule ? rule.Name : null)
modal.find('textarea[name=RulesRaw]').val(rule ? rule.RulesRaw : null)
if (rule && rule.Enable) {
modal.find('.ui.rule-enable.checkbox').checkbox('set checked')
} else {
modal.find('.ui.rule-enable.checkbox').checkbox('set unchecked')
}
showFormModal('.rule.modal', '#ruleForm', '/api/alert-rule')
const modal = $(".rule.modal");
modal.children(".header").text((rule ? "修改" : "添加") + "报警规则");
modal
.find(".positive.button")
.html(
rule ? '修改<i class="edit icon"></i>' : '添加<i class="add icon"></i>'
);
modal.find("input[name=ID]").val(rule ? rule.ID : null);
modal.find("input[name=Name]").val(rule ? rule.Name : null);
modal.find("textarea[name=RulesRaw]").val(rule ? rule.RulesRaw : null);
if (rule && rule.Enable) {
modal.find(".ui.rule-enable.checkbox").checkbox("set checked");
} else {
modal.find(".ui.rule-enable.checkbox").checkbox("set unchecked");
}
showFormModal(".rule.modal", "#ruleForm", "/api/alert-rule");
}
function addOrEditNotification(notification) {
const modal = $('.notification.modal')
modal.children('.header').text((notification ? '修改' : '添加') + '通知方式')
modal.find('.positive.button').html(notification ? '修改<i class="edit icon"></i>' : '添加<i class="add icon"></i>')
modal.find('input[name=ID]').val(notification ? notification.ID : null)
modal.find('input[name=Name]').val(notification ? notification.Name : null)
modal.find('input[name=URL]').val(notification ? notification.URL : null)
modal.find('textarea[name=RequestBody]').val(notification ? notification.RequestBody : null)
modal.find('select[name=RequestMethod]').val(notification ? notification.RequestMethod : 1)
modal.find('select[name=RequestType]').val(notification ? notification.RequestType : 1)
if (notification && notification.VerifySSL) {
modal.find('.ui.nf-ssl.checkbox').checkbox('set checked')
} else {
modal.find('.ui.nf-ssl.checkbox').checkbox('set unchecked')
}
showFormModal('.notification.modal', '#notificationForm', '/api/notification')
const modal = $(".notification.modal");
modal.children(".header").text((notification ? "修改" : "添加") + "通知方式");
modal
.find(".positive.button")
.html(
notification
? '修改<i class="edit icon"></i>'
: '添加<i class="add icon"></i>'
);
modal.find("input[name=ID]").val(notification ? notification.ID : null);
modal.find("input[name=Name]").val(notification ? notification.Name : null);
modal.find("input[name=URL]").val(notification ? notification.URL : null);
modal
.find("textarea[name=RequestBody]")
.val(notification ? notification.RequestBody : null);
modal
.find("select[name=RequestMethod]")
.val(notification ? notification.RequestMethod : 1);
modal
.find("select[name=RequestType]")
.val(notification ? notification.RequestType : 1);
if (notification && notification.VerifySSL) {
modal.find(".ui.nf-ssl.checkbox").checkbox("set checked");
} else {
modal.find(".ui.nf-ssl.checkbox").checkbox("set unchecked");
}
showFormModal(
".notification.modal",
"#notificationForm",
"/api/notification"
);
}
function addOrEditServer(server) {
const modal = $('.server.modal')
modal.children('.header').text((server ? '修改' : '添加') + '服务器')
modal.find('.positive.button').html(server ? '修改<i class="edit icon"></i>' : '添加<i class="add icon"></i>')
modal.find('input[name=id]').val(server ? server.ID : null)
modal.find('input[name=name]').val(server ? server.Name : null)
modal.find('input[name=Tag]').val(server ? server.Tag : null)
modal.find('input[name=DisplayIndex]').val(server ? server.DisplayIndex : null)
modal.find('textarea[name=Note]').val(server ? server.Note : null)
if (server) {
modal.find('.secret.field').attr('style', '')
modal.find('input[name=secret]').val(server.Secret)
} else {
modal.find('.secret.field').attr('style', 'display:none')
modal.find('input[name=secret]').val('')
}
showFormModal('.server.modal', '#serverForm', '/api/server')
const modal = $(".server.modal");
modal.children(".header").text((server ? "修改" : "添加") + "服务器");
modal
.find(".positive.button")
.html(
server ? '修改<i class="edit icon"></i>' : '添加<i class="add icon"></i>'
);
modal.find("input[name=id]").val(server ? server.ID : null);
modal.find("input[name=name]").val(server ? server.Name : null);
modal.find("input[name=Tag]").val(server ? server.Tag : null);
modal
.find("input[name=DisplayIndex]")
.val(server ? server.DisplayIndex : null);
modal.find("textarea[name=Note]").val(server ? server.Note : null);
if (server) {
modal.find(".secret.field").attr("style", "");
modal.find("input[name=secret]").val(server.Secret);
} else {
modal.find(".secret.field").attr("style", "display:none");
modal.find("input[name=secret]").val("");
}
showFormModal(".server.modal", "#serverForm", "/api/server");
}
function addOrEditMonitor(monitor) {
const modal = $('.monitor.modal')
modal.children('.header').text((monitor ? '修改' : '添加') + '监控')
modal.find('.positive.button').html(monitor ? '修改<i class="edit icon"></i>' : '添加<i class="add icon"></i>')
modal.find('input[name=ID]').val(monitor ? monitor.ID : null)
modal.find('input[name=Name]').val(monitor ? monitor.Name : null)
modal.find('input[name=Target]').val(monitor ? monitor.Target : null)
modal.find('select[name=Type]').val(monitor ? monitor.Type : 1)
if (monitor && monitor.Notify) {
modal.find(".ui.nb-notify.checkbox").checkbox("set checked");
} else {
modal.find(".ui.nb-notify.checkbox").checkbox("set unchecked");
const modal = $(".monitor.modal");
modal.children(".header").text((monitor ? "修改" : "添加") + "监控");
modal
.find(".positive.button")
.html(
monitor ? '修改<i class="edit icon"></i>' : '添加<i class="add icon"></i>'
);
modal.find("input[name=ID]").val(monitor ? monitor.ID : null);
modal.find("input[name=Name]").val(monitor ? monitor.Name : null);
modal.find("input[name=Target]").val(monitor ? monitor.Target : null);
modal.find("select[name=Type]").val(monitor ? monitor.Type : 1);
if (monitor && monitor.Notify) {
modal.find(".ui.nb-notify.checkbox").checkbox("set checked");
} else {
modal.find(".ui.nb-notify.checkbox").checkbox("set unchecked");
}
var servers;
if (monitor) {
servers = monitor.SkipServersRaw || "[]";
const serverList = JSON.parse(servers);
const node = modal.find("i.dropdown.icon");
for (let i = 0; i < serverList.length; i++) {
node.after(
'<a class="ui label transition visible" data-value="' +
serverList[i] +
'" style="display: inline-block !important;">ID:' +
serverList[i] +
'<i class="delete icon"></i></a>'
);
}
showFormModal('.monitor.modal', '#monitorForm', '/api/monitor')
}
modal
.find("input[name=SkipServersRaw]")
.val(monitor ? "[]," + servers.substr(1, servers.length - 2) : "[]");
showFormModal(".monitor.modal", "#monitorForm", "/api/monitor");
}
function addOrEditCron(cron) {
const modal = $('.cron.modal')
modal.children('.header').text((cron ? '修改' : '添加') + '计划任务')
modal.find('.positive.button').html(cron ? '修改<i class="edit icon"></i>' : '添加<i class="add icon"></i>')
modal.find('input[name=ID]').val(cron ? cron.ID : null)
modal.find('input[name=Name]').val(cron ? cron.Name : null)
modal.find('input[name=Scheduler]').val(cron ? cron.Scheduler : null)
modal.find('a.ui.label.visible').each((i, el) => {
el.remove()
})
var servers
if (cron) {
servers = cron.ServersRaw
serverList = JSON.parse(servers)
const node = modal.find('i.dropdown.icon')
for (let i = 0; i < serverList.length; i++) {
node.after('<a class="ui label transition visible" data-value="' + serverList[i] + '" style="display: inline-block !important;">ID:' + serverList[i] + '<i class="delete icon"></i></a>')
}
const modal = $(".cron.modal");
modal.children(".header").text((cron ? "修改" : "添加") + "计划任务");
modal
.find(".positive.button")
.html(
cron ? '修改<i class="edit icon"></i>' : '添加<i class="add icon"></i>'
);
modal.find("input[name=ID]").val(cron ? cron.ID : null);
modal.find("input[name=Name]").val(cron ? cron.Name : null);
modal.find("input[name=Scheduler]").val(cron ? cron.Scheduler : null);
modal.find("a.ui.label.visible").each((i, el) => {
el.remove();
});
var servers;
if (cron) {
servers = cron.ServersRaw;
const serverList = JSON.parse(servers);
const node = modal.find("i.dropdown.icon");
for (let i = 0; i < serverList.length; i++) {
node.after(
'<a class="ui label transition visible" data-value="' +
serverList[i] +
'" style="display: inline-block !important;">ID:' +
serverList[i] +
'<i class="delete icon"></i></a>'
);
}
modal.find('input[name=ServersRaw]').val(cron ? '[],' + servers.substr(1, servers.length - 2) : '[]')
modal.find('textarea[name=Command]').val(cron ? cron.Command : null)
if (cron && cron.PushSuccessful) {
modal.find('.ui.push-successful.checkbox').checkbox('set checked')
} else {
modal.find('.ui.push-successful.checkbox').checkbox('set unchecked')
}
showFormModal('.cron.modal', '#cronForm', '/api/cron')
}
modal
.find("input[name=ServersRaw]")
.val(cron ? "[]," + servers.substr(1, servers.length - 2) : "[]");
modal.find("textarea[name=Command]").val(cron ? cron.Command : null);
if (cron && cron.PushSuccessful) {
modal.find(".ui.push-successful.checkbox").checkbox("set checked");
} else {
modal.find(".ui.push-successful.checkbox").checkbox("set unchecked");
}
showFormModal(".cron.modal", "#cronForm", "/api/cron");
}
function deleteRequest(api) {
$.ajax({
url: api,
type: 'DELETE',
}).done(resp => {
if (resp.code == 200) {
if (resp.message) {
alert(resp.message)
} else {
alert('删除成功')
}
window.location.reload()
$.ajax({
url: api,
type: "DELETE",
})
.done((resp) => {
if (resp.code == 200) {
if (resp.message) {
alert(resp.message);
} else {
alert('删除失败 ' + resp.code + '' + resp.message)
confirmBtn.toggleClass('loading')
alert("删除成功");
}
}).fail(err => {
alert('网络错误:' + err.responseText)
window.location.reload();
} else {
alert("删除失败 " + resp.code + "" + resp.message);
confirmBtn.toggleClass("loading");
}
})
.fail((err) => {
alert("网络错误:" + err.responseText);
});
}
function manualTrigger(btn, cronId) {
$(btn).toggleClass('loading')
$.ajax({
url: '/api/cron/' + cronId + '/manual',
type: 'GET',
}).done(resp => {
$(btn).toggleClass('loading')
if (resp.code == 200) {
$.suiAlert({
title: '触发成功,等待执行结果',
type: 'success',
description: resp.message,
time: '3',
position: 'top-center',
});
} else {
$.suiAlert({
title: '触发失败 ',
type: 'error',
description: resp.code + '' + resp.message,
time: '3',
position: 'top-center',
});
}
}).fail(err => {
$(btn).toggleClass('loading')
$(btn).toggleClass("loading");
$.ajax({
url: "/api/cron/" + cronId + "/manual",
type: "GET",
})
.done((resp) => {
$(btn).toggleClass("loading");
if (resp.code == 200) {
$.suiAlert({
title: '触发失败 ',
type: 'error',
description: '网络错误:' + err.responseText,
time: '3',
position: 'top-center',
title: "触发成功,等待执行结果",
type: "success",
description: resp.message,
time: "3",
position: "top-center",
});
} else {
$.suiAlert({
title: "触发失败 ",
type: "error",
description: resp.code + "" + resp.message,
time: "3",
position: "top-center",
});
}
})
.fail((err) => {
$(btn).toggleClass("loading");
$.suiAlert({
title: "触发失败 ",
type: "error",
description: "网络错误:" + err.responseText,
time: "3",
position: "top-center",
});
});
}
function logout(id) {
$.post('/api/logout', JSON.stringify({ id: id })).done(function (resp) {
if (resp.code == 200) {
$.suiAlert({
title: '注销成功',
type: 'success',
description: '如需继续访问请使用 GitHub 再次登录',
time: '3',
position: 'top-center',
});
window.location.reload()
} else {
$.suiAlert({
title: '注销失败',
description: resp.code + '' + resp.message,
type: 'error',
time: '3',
position: 'top-center',
});
}
}).fail(function (err) {
$.post("/api/logout", JSON.stringify({ id: id }))
.done(function (resp) {
if (resp.code == 200) {
$.suiAlert({
title: '网络错误',
description: err.responseText,
type: 'error',
time: '3',
position: 'top-center',
title: "注销成功",
type: "success",
description: "如需继续访问请使用 GitHub 再次登录",
time: "3",
position: "top-center",
});
window.location.reload();
} else {
$.suiAlert({
title: "注销失败",
description: resp.code + "" + resp.message,
type: "error",
time: "3",
position: "top-center",
});
}
})
.fail(function (err) {
$.suiAlert({
title: "网络错误",
description: err.responseText,
type: "error",
time: "3",
position: "top-center",
});
});
}
$(document).ready(() => {
try {
$('.ui.servers.search.dropdown').dropdown({
clearable: true,
apiSettings: {
url: '/api/search-server?word={query}',
cache: false,
},
})
} catch (error) {
}
})
try {
$(".ui.servers.search.dropdown").dropdown({
clearable: true,
apiSettings: {
url: "/api/search-server?word={query}",
cache: false,
},
});
} catch (error) {}
});