mirror of
https://github.com/louislam/uptime-kuma.git
synced 2024-10-01 01:25:45 -04:00
Compare commits
14 Commits
21523db08e
...
d35cef9743
Author | SHA1 | Date | |
---|---|---|---|
|
d35cef9743 | ||
|
416ba88f6b | ||
|
39f3e6311d | ||
|
de48fe78ad | ||
|
59aea398b7 | ||
|
cb1b414365 | ||
|
043f1a2ed9 | ||
|
b0281e44b8 | ||
|
a81317fa0e | ||
|
96a1010b30 | ||
|
bb499e2aa1 | ||
|
ae7f01b3ea | ||
|
32f2fe140d | ||
|
84f261c81b |
@ -72,31 +72,22 @@ class Monitor extends BeanModel {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an object that ready to parse to JSON
|
* Return an object that ready to parse to JSON
|
||||||
|
* @param {object} preloadData Include precalculate data in
|
||||||
* @param {boolean} includeSensitiveData Include sensitive data in
|
* @param {boolean} includeSensitiveData Include sensitive data in
|
||||||
* JSON
|
* JSON
|
||||||
* @returns {Promise<object>} Object ready to parse
|
* @returns {Promise<object>} Object ready to parse
|
||||||
*/
|
*/
|
||||||
async toJSON(includeSensitiveData = true) {
|
toJSON(preloadData = {}, includeSensitiveData = true) {
|
||||||
|
|
||||||
let notificationIDList = {};
|
|
||||||
|
|
||||||
let list = await R.find("monitor_notification", " monitor_id = ? ", [
|
|
||||||
this.id,
|
|
||||||
]);
|
|
||||||
|
|
||||||
for (let bean of list) {
|
|
||||||
notificationIDList[bean.notification_id] = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
const tags = await this.getTags();
|
|
||||||
|
|
||||||
|
const tags = preloadData.tags.get(this.id) || [];
|
||||||
|
const notificationIDList = preloadData.notifications.get(this.id) || {};
|
||||||
let screenshot = null;
|
let screenshot = null;
|
||||||
|
|
||||||
if (this.type === "real-browser") {
|
if (this.type === "real-browser") {
|
||||||
screenshot = "/screenshots/" + jwt.sign(this.id, UptimeKumaServer.getInstance().jwtSecret) + ".png";
|
screenshot = "/screenshots/" + jwt.sign(this.id, UptimeKumaServer.getInstance().jwtSecret) + ".png";
|
||||||
}
|
}
|
||||||
|
|
||||||
const path = await this.getPath();
|
const path = preloadData.paths.get(this.id) || [];
|
||||||
const pathName = path.join(" / ");
|
const pathName = path.join(" / ");
|
||||||
|
|
||||||
let data = {
|
let data = {
|
||||||
@ -106,15 +97,15 @@ class Monitor extends BeanModel {
|
|||||||
path,
|
path,
|
||||||
pathName,
|
pathName,
|
||||||
parent: this.parent,
|
parent: this.parent,
|
||||||
childrenIDs: await Monitor.getAllChildrenIDs(this.id),
|
childrenIDs: preloadData.childrenIDs.get(this.id) || [],
|
||||||
url: this.url,
|
url: this.url,
|
||||||
method: this.method,
|
method: this.method,
|
||||||
hostname: this.hostname,
|
hostname: this.hostname,
|
||||||
port: this.port,
|
port: this.port,
|
||||||
maxretries: this.maxretries,
|
maxretries: this.maxretries,
|
||||||
weight: this.weight,
|
weight: this.weight,
|
||||||
active: await this.isActive(),
|
active: preloadData.activeStatus.get(this.id),
|
||||||
forceInactive: !await Monitor.isParentActive(this.id),
|
forceInactive: preloadData.forceInactive.get(this.id),
|
||||||
type: this.type,
|
type: this.type,
|
||||||
timeout: this.timeout,
|
timeout: this.timeout,
|
||||||
interval: this.interval,
|
interval: this.interval,
|
||||||
@ -135,8 +126,8 @@ class Monitor extends BeanModel {
|
|||||||
docker_host: this.docker_host,
|
docker_host: this.docker_host,
|
||||||
proxyId: this.proxy_id,
|
proxyId: this.proxy_id,
|
||||||
notificationIDList,
|
notificationIDList,
|
||||||
tags: tags,
|
tags,
|
||||||
maintenance: await Monitor.isUnderMaintenance(this.id),
|
maintenance: preloadData.maintenanceStatus.get(this.id),
|
||||||
mqttTopic: this.mqttTopic,
|
mqttTopic: this.mqttTopic,
|
||||||
mqttSuccessMessage: this.mqttSuccessMessage,
|
mqttSuccessMessage: this.mqttSuccessMessage,
|
||||||
mqttCheckType: this.mqttCheckType,
|
mqttCheckType: this.mqttCheckType,
|
||||||
@ -202,16 +193,6 @@ class Monitor extends BeanModel {
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the monitor is active based on itself and its parents
|
|
||||||
* @returns {Promise<boolean>} Is the monitor active?
|
|
||||||
*/
|
|
||||||
async isActive() {
|
|
||||||
const parentActive = await Monitor.isParentActive(this.id);
|
|
||||||
|
|
||||||
return (this.active === 1) && parentActive;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all tags applied to this monitor
|
* Get all tags applied to this monitor
|
||||||
* @returns {Promise<LooseObject<any>[]>} List of tags on the
|
* @returns {Promise<LooseObject<any>[]>} List of tags on the
|
||||||
@ -1197,6 +1178,18 @@ class Monitor extends BeanModel {
|
|||||||
return checkCertificateResult;
|
return checkCertificateResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the monitor is active based on itself and its parents
|
||||||
|
* @param {number} monitorID ID of monitor to send
|
||||||
|
* @param {boolean} active is active
|
||||||
|
* @returns {Promise<boolean>} Is the monitor active?
|
||||||
|
*/
|
||||||
|
static async isActive(monitorID, active) {
|
||||||
|
const parentActive = await Monitor.isParentActive(monitorID);
|
||||||
|
|
||||||
|
return (active === 1) && parentActive;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send statistics to clients
|
* Send statistics to clients
|
||||||
* @param {Server} io Socket server instance
|
* @param {Server} io Socket server instance
|
||||||
@ -1333,7 +1326,10 @@ class Monitor extends BeanModel {
|
|||||||
for (let notification of notificationList) {
|
for (let notification of notificationList) {
|
||||||
try {
|
try {
|
||||||
const heartbeatJSON = bean.toJSON();
|
const heartbeatJSON = bean.toJSON();
|
||||||
|
const monitorData = [{ id: monitor.id,
|
||||||
|
active: monitor.active
|
||||||
|
}];
|
||||||
|
const preloadData = await Monitor.preparePreloadData(monitorData);
|
||||||
// Prevent if the msg is undefined, notifications such as Discord cannot send out.
|
// Prevent if the msg is undefined, notifications such as Discord cannot send out.
|
||||||
if (!heartbeatJSON["msg"]) {
|
if (!heartbeatJSON["msg"]) {
|
||||||
heartbeatJSON["msg"] = "N/A";
|
heartbeatJSON["msg"] = "N/A";
|
||||||
@ -1344,7 +1340,7 @@ class Monitor extends BeanModel {
|
|||||||
heartbeatJSON["timezoneOffset"] = UptimeKumaServer.getInstance().getTimezoneOffset();
|
heartbeatJSON["timezoneOffset"] = UptimeKumaServer.getInstance().getTimezoneOffset();
|
||||||
heartbeatJSON["localDateTime"] = dayjs.utc(heartbeatJSON["time"]).tz(heartbeatJSON["timezone"]).format(SQL_DATETIME_FORMAT);
|
heartbeatJSON["localDateTime"] = dayjs.utc(heartbeatJSON["time"]).tz(heartbeatJSON["timezone"]).format(SQL_DATETIME_FORMAT);
|
||||||
|
|
||||||
await Notification.send(JSON.parse(notification.config), msg, await monitor.toJSON(false), heartbeatJSON);
|
await Notification.send(JSON.parse(notification.config), msg, monitor.toJSON(preloadData, false), heartbeatJSON);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log.error("monitor", "Cannot send notification to " + notification.name);
|
log.error("monitor", "Cannot send notification to " + notification.name);
|
||||||
log.error("monitor", e);
|
log.error("monitor", e);
|
||||||
@ -1507,6 +1503,111 @@ class Monitor extends BeanModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets monitor notification of multiple monitor
|
||||||
|
* @param {Array} monitorIDs IDs of monitor to get
|
||||||
|
* @returns {Promise<LooseObject<any>>} object
|
||||||
|
*/
|
||||||
|
static async getMonitorNotification(monitorIDs) {
|
||||||
|
return await R.getAll(`
|
||||||
|
SELECT monitor_notification.monitor_id, monitor_notification.notification_id
|
||||||
|
FROM monitor_notification
|
||||||
|
WHERE monitor_notification.monitor_id IN (?)
|
||||||
|
`, [
|
||||||
|
monitorIDs,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets monitor tags of multiple monitor
|
||||||
|
* @param {Array} monitorIDs IDs of monitor to get
|
||||||
|
* @returns {Promise<LooseObject<any>>} object
|
||||||
|
*/
|
||||||
|
static async getMonitorTag(monitorIDs) {
|
||||||
|
return await R.getAll(`
|
||||||
|
SELECT monitor_tag.monitor_id, tag.name, tag.color
|
||||||
|
FROM monitor_tag
|
||||||
|
JOIN tag ON monitor_tag.tag_id = tag.id
|
||||||
|
WHERE monitor_tag.monitor_id IN (?)
|
||||||
|
`, [
|
||||||
|
monitorIDs,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* prepare preloaded data for efficient access
|
||||||
|
* @param {Array} monitorData IDs & active field of monitor to get
|
||||||
|
* @returns {Promise<LooseObject<any>>} object
|
||||||
|
*/
|
||||||
|
static async preparePreloadData(monitorData) {
|
||||||
|
|
||||||
|
const notificationsMap = new Map();
|
||||||
|
const tagsMap = new Map();
|
||||||
|
const maintenanceStatusMap = new Map();
|
||||||
|
const childrenIDsMap = new Map();
|
||||||
|
const activeStatusMap = new Map();
|
||||||
|
const forceInactiveMap = new Map();
|
||||||
|
const pathsMap = new Map();
|
||||||
|
|
||||||
|
if (monitorData.length > 0) {
|
||||||
|
const monitorIDs = monitorData.map(monitor => monitor.id);
|
||||||
|
const notifications = await Monitor.getMonitorNotification(monitorIDs);
|
||||||
|
const tags = await Monitor.getMonitorTag(monitorIDs);
|
||||||
|
const maintenanceStatuses = await Promise.all(monitorData.map(monitor => Monitor.isUnderMaintenance(monitor.id)));
|
||||||
|
const childrenIDs = await Promise.all(monitorData.map(monitor => Monitor.getAllChildrenIDs(monitor.id)));
|
||||||
|
const activeStatuses = await Promise.all(monitorData.map(monitor => Monitor.isActive(monitor.id, monitor.active)));
|
||||||
|
const forceInactiveStatuses = await Promise.all(monitorData.map(monitor => Monitor.isParentActive(monitor.id)));
|
||||||
|
const paths = await Promise.all(monitorData.map(monitor => Monitor.getAllPath(monitor.id, monitor.name)));
|
||||||
|
|
||||||
|
notifications.forEach(row => {
|
||||||
|
if (!notificationsMap.has(row.monitor_id)) {
|
||||||
|
notificationsMap.set(row.monitor_id, {});
|
||||||
|
}
|
||||||
|
notificationsMap.get(row.monitor_id)[row.notification_id] = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
tags.forEach(row => {
|
||||||
|
if (!tagsMap.has(row.monitor_id)) {
|
||||||
|
tagsMap.set(row.monitor_id, []);
|
||||||
|
}
|
||||||
|
tagsMap.get(row.monitor_id).push({
|
||||||
|
name: row.name,
|
||||||
|
color: row.color
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
monitorData.forEach((monitor, index) => {
|
||||||
|
maintenanceStatusMap.set(monitor.id, maintenanceStatuses[index]);
|
||||||
|
});
|
||||||
|
|
||||||
|
monitorData.forEach((monitor, index) => {
|
||||||
|
childrenIDsMap.set(monitor.id, childrenIDs[index]);
|
||||||
|
});
|
||||||
|
|
||||||
|
monitorData.forEach((monitor, index) => {
|
||||||
|
activeStatusMap.set(monitor.id, activeStatuses[index]);
|
||||||
|
});
|
||||||
|
|
||||||
|
monitorData.forEach((monitor, index) => {
|
||||||
|
forceInactiveMap.set(monitor.id, !forceInactiveStatuses[index]);
|
||||||
|
});
|
||||||
|
|
||||||
|
monitorData.forEach((monitor, index) => {
|
||||||
|
pathsMap.set(monitor.id, paths[index]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
notifications: notificationsMap,
|
||||||
|
tags: tagsMap,
|
||||||
|
maintenanceStatus: maintenanceStatusMap,
|
||||||
|
childrenIDs: childrenIDsMap,
|
||||||
|
activeStatus: activeStatusMap,
|
||||||
|
forceInactive: forceInactiveMap,
|
||||||
|
paths: pathsMap,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets Parent of the monitor
|
* Gets Parent of the monitor
|
||||||
* @param {number} monitorID ID of monitor to get
|
* @param {number} monitorID ID of monitor to get
|
||||||
@ -1539,16 +1640,18 @@ class Monitor extends BeanModel {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the full path
|
* Gets the full path
|
||||||
|
* @param {number} monitorID ID of the monitor to get
|
||||||
|
* @param {string} name of the monitor to get
|
||||||
* @returns {Promise<string[]>} Full path (includes groups and the name) of the monitor
|
* @returns {Promise<string[]>} Full path (includes groups and the name) of the monitor
|
||||||
*/
|
*/
|
||||||
async getPath() {
|
static async getAllPath(monitorID, name) {
|
||||||
const path = [ this.name ];
|
const path = [ name ];
|
||||||
|
|
||||||
if (this.parent === null) {
|
if (this.parent === null) {
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
let parent = await Monitor.getParent(this.id);
|
let parent = await Monitor.getParent(monitorID);
|
||||||
while (parent !== null) {
|
while (parent !== null) {
|
||||||
path.unshift(parent.name);
|
path.unshift(parent.name);
|
||||||
parent = await Monitor.getParent(parent.id);
|
parent = await Monitor.getParent(parent.id);
|
||||||
|
@ -726,7 +726,7 @@ let needSetup = false;
|
|||||||
|
|
||||||
await updateMonitorNotification(bean.id, notificationIDList);
|
await updateMonitorNotification(bean.id, notificationIDList);
|
||||||
|
|
||||||
await server.sendMonitorList(socket);
|
await server.sendUpdateMonitorIntoList(socket, bean.id);
|
||||||
|
|
||||||
if (monitor.active !== false) {
|
if (monitor.active !== false) {
|
||||||
await startMonitor(socket.userID, bean.id);
|
await startMonitor(socket.userID, bean.id);
|
||||||
@ -879,11 +879,11 @@ let needSetup = false;
|
|||||||
|
|
||||||
await updateMonitorNotification(bean.id, monitor.notificationIDList);
|
await updateMonitorNotification(bean.id, monitor.notificationIDList);
|
||||||
|
|
||||||
if (await bean.isActive()) {
|
if (await Monitor.isActive(bean.id, bean.active)) {
|
||||||
await restartMonitor(socket.userID, bean.id);
|
await restartMonitor(socket.userID, bean.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
await server.sendMonitorList(socket);
|
await server.sendUpdateMonitorIntoList(socket, bean.id);
|
||||||
|
|
||||||
callback({
|
callback({
|
||||||
ok: true,
|
ok: true,
|
||||||
@ -923,14 +923,17 @@ let needSetup = false;
|
|||||||
|
|
||||||
log.info("monitor", `Get Monitor: ${monitorID} User ID: ${socket.userID}`);
|
log.info("monitor", `Get Monitor: ${monitorID} User ID: ${socket.userID}`);
|
||||||
|
|
||||||
let bean = await R.findOne("monitor", " id = ? AND user_id = ? ", [
|
let monitor = await R.findOne("monitor", " id = ? AND user_id = ? ", [
|
||||||
monitorID,
|
monitorID,
|
||||||
socket.userID,
|
socket.userID,
|
||||||
]);
|
]);
|
||||||
|
const monitorData = [{ id: monitor.id,
|
||||||
|
active: monitor.active
|
||||||
|
}];
|
||||||
|
const preloadData = await Monitor.preparePreloadData(monitorData);
|
||||||
callback({
|
callback({
|
||||||
ok: true,
|
ok: true,
|
||||||
monitor: await bean.toJSON(),
|
monitor: monitor.toJSON(preloadData),
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -981,7 +984,7 @@ let needSetup = false;
|
|||||||
try {
|
try {
|
||||||
checkLogin(socket);
|
checkLogin(socket);
|
||||||
await startMonitor(socket.userID, monitorID);
|
await startMonitor(socket.userID, monitorID);
|
||||||
await server.sendMonitorList(socket);
|
await server.sendUpdateMonitorIntoList(socket, monitorID);
|
||||||
|
|
||||||
callback({
|
callback({
|
||||||
ok: true,
|
ok: true,
|
||||||
@ -1001,7 +1004,7 @@ let needSetup = false;
|
|||||||
try {
|
try {
|
||||||
checkLogin(socket);
|
checkLogin(socket);
|
||||||
await pauseMonitor(socket.userID, monitorID);
|
await pauseMonitor(socket.userID, monitorID);
|
||||||
await server.sendMonitorList(socket);
|
await server.sendUpdateMonitorIntoList(socket, monitorID);
|
||||||
|
|
||||||
callback({
|
callback({
|
||||||
ok: true,
|
ok: true,
|
||||||
@ -1047,8 +1050,7 @@ let needSetup = false;
|
|||||||
msg: "successDeleted",
|
msg: "successDeleted",
|
||||||
msgi18n: true,
|
msgi18n: true,
|
||||||
});
|
});
|
||||||
|
await server.sendDeleteMonitorFromList(socket, monitorID);
|
||||||
await server.sendMonitorList(socket);
|
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
callback({
|
callback({
|
||||||
@ -1678,13 +1680,13 @@ async function afterLogin(socket, user) {
|
|||||||
|
|
||||||
await StatusPage.sendStatusPageList(io, socket);
|
await StatusPage.sendStatusPageList(io, socket);
|
||||||
|
|
||||||
|
const monitorPromises = [];
|
||||||
for (let monitorID in monitorList) {
|
for (let monitorID in monitorList) {
|
||||||
await sendHeartbeatList(socket, monitorID);
|
monitorPromises.push(sendHeartbeatList(socket, monitorID));
|
||||||
|
monitorPromises.push(Monitor.sendStats(io, monitorID, user.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let monitorID in monitorList) {
|
await Promise.all(monitorPromises);
|
||||||
await Monitor.sendStats(io, monitorID, user.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set server timezone from client browser if not set
|
// Set server timezone from client browser if not set
|
||||||
// It should be run once only
|
// It should be run once only
|
||||||
|
@ -205,24 +205,69 @@ class UptimeKumaServer {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update Monitor into list
|
||||||
|
* @param {Socket} socket Socket to send list on
|
||||||
|
* @param {number} monitorID update or deleted monitor id
|
||||||
|
* @returns {Promise<object>} List of monitors
|
||||||
|
*/
|
||||||
|
async sendUpdateMonitorIntoList(socket, monitorID) {
|
||||||
|
let list = await this.getMonitorJSONList(socket.userID, monitorID);
|
||||||
|
this.io.to(socket.userID).emit("updateMonitorIntoList", list);
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete Monitor from list
|
||||||
|
* @param {Socket} socket Socket to send list on
|
||||||
|
* @param {number} monitorID update or deleted monitor id
|
||||||
|
* @returns {number} deletion monitor id
|
||||||
|
*/
|
||||||
|
async sendDeleteMonitorFromList(socket, monitorID) {
|
||||||
|
this.io.to(socket.userID).emit("deleteMonitorFromList", monitorID);
|
||||||
|
return monitorID;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list of monitors for the given user.
|
* Get a list of monitors for the given user.
|
||||||
* @param {string} userID - The ID of the user to get monitors for.
|
* @param {string} userID - The ID of the user to get monitors for.
|
||||||
|
* @param {number} monitorID - The ID of monitor for.
|
||||||
* @returns {Promise<object>} A promise that resolves to an object with monitor IDs as keys and monitor objects as values.
|
* @returns {Promise<object>} A promise that resolves to an object with monitor IDs as keys and monitor objects as values.
|
||||||
*
|
*
|
||||||
* Generated by Trelent
|
* Generated by Trelent
|
||||||
*/
|
*/
|
||||||
async getMonitorJSONList(userID) {
|
async getMonitorJSONList(userID, monitorID = null) {
|
||||||
let result = {};
|
let result = {};
|
||||||
|
|
||||||
let monitorList = await R.find("monitor", " user_id = ? ORDER BY weight DESC, name", [
|
let query = " user_id = ? ";
|
||||||
userID,
|
let queryParams = [ userID ];
|
||||||
]);
|
|
||||||
|
|
||||||
for (let monitor of monitorList) {
|
if (monitorID) {
|
||||||
result[monitor.id] = await monitor.toJSON();
|
query += "AND id = ? ";
|
||||||
|
queryParams.push(monitorID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let monitorList = await R.find("monitor", query + "ORDER BY weight DESC, name", queryParams);
|
||||||
|
|
||||||
|
const monitorData = monitorList.map(monitor => ({
|
||||||
|
id: monitor.id,
|
||||||
|
active: monitor.active,
|
||||||
|
name: monitor.name,
|
||||||
|
}));
|
||||||
|
const preloadData = await Monitor.preparePreloadData(monitorData);
|
||||||
|
|
||||||
|
const monitorPromises = monitorList.map(monitor => {
|
||||||
|
const json = monitor.toJSON(preloadData);
|
||||||
|
return { id: monitor.id,
|
||||||
|
json
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const monitors = await Promise.all(monitorPromises);
|
||||||
|
|
||||||
|
monitors.forEach(monitor => {
|
||||||
|
result[monitor.id] = monitor.json;
|
||||||
|
});
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -520,3 +565,4 @@ const { DnsMonitorType } = require("./monitor-types/dns");
|
|||||||
const { MqttMonitorType } = require("./monitor-types/mqtt");
|
const { MqttMonitorType } = require("./monitor-types/mqtt");
|
||||||
const { SNMPMonitorType } = require("./monitor-types/snmp");
|
const { SNMPMonitorType } = require("./monitor-types/snmp");
|
||||||
const { MongodbMonitorType } = require("./monitor-types/mongodb");
|
const { MongodbMonitorType } = require("./monitor-types/mongodb");
|
||||||
|
const Monitor = require("./model/monitor");
|
||||||
|
@ -141,19 +141,20 @@ export default {
|
|||||||
});
|
});
|
||||||
|
|
||||||
socket.on("monitorList", (data) => {
|
socket.on("monitorList", (data) => {
|
||||||
// Add Helper function
|
this.assignMonitorUrlParser(data);
|
||||||
Object.entries(data).forEach(([ monitorID, monitor ]) => {
|
console.log(data);
|
||||||
monitor.getUrl = () => {
|
|
||||||
try {
|
|
||||||
return new URL(monitor.url);
|
|
||||||
} catch (_) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
||||||
this.monitorList = data;
|
this.monitorList = data;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
socket.on("updateMonitorIntoList", (data) => {
|
||||||
|
this.assignMonitorUrlParser(data);
|
||||||
|
this.monitorList = this.updateMonitorList(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on("deleteMonitorFromList", (monitorID) => {
|
||||||
|
this.monitorList = this.deleteMonitorList(monitorID);
|
||||||
|
});
|
||||||
|
|
||||||
socket.on("monitorTypeList", (data) => {
|
socket.on("monitorTypeList", (data) => {
|
||||||
this.monitorTypeList = data;
|
this.monitorTypeList = data;
|
||||||
});
|
});
|
||||||
@ -289,6 +290,46 @@ export default {
|
|||||||
location.reload();
|
location.reload();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* parse all urls from list.
|
||||||
|
* @param {object} data Monitor data to modify
|
||||||
|
* @returns {object} list
|
||||||
|
*/
|
||||||
|
assignMonitorUrlParser(data) {
|
||||||
|
Object.entries(data).forEach(([ monitorID, monitor ]) => {
|
||||||
|
monitor.getUrl = () => {
|
||||||
|
try {
|
||||||
|
return new URL(monitor.url);
|
||||||
|
} catch (_) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return data;
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* update into existing list
|
||||||
|
* @param {object} list add, updated, pause & resume list
|
||||||
|
* @returns {object} list
|
||||||
|
*/
|
||||||
|
updateMonitorList(list) {
|
||||||
|
Object.entries(list).forEach(([ monitorID, updatedMonitor ]) => {
|
||||||
|
this.monitorList[monitorID] = updatedMonitor;
|
||||||
|
});
|
||||||
|
return this.monitorList;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* delete from existing list
|
||||||
|
* @param {number} monitorID deleted monitorID
|
||||||
|
* @returns {object} list
|
||||||
|
*/
|
||||||
|
deleteMonitorList(monitorID) {
|
||||||
|
if (this.monitorList[monitorID]) {
|
||||||
|
delete this.monitorList[monitorID];
|
||||||
|
}
|
||||||
|
return this.monitorList;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The storage currently in use
|
* The storage currently in use
|
||||||
|
@ -1689,7 +1689,6 @@ message HealthCheckResponse {
|
|||||||
await this.startParentGroupMonitor();
|
await this.startParentGroupMonitor();
|
||||||
}
|
}
|
||||||
this.processing = false;
|
this.processing = false;
|
||||||
this.$root.getMonitorList();
|
|
||||||
this.$router.push("/dashboard/" + res.monitorID);
|
this.$router.push("/dashboard/" + res.monitorID);
|
||||||
} else {
|
} else {
|
||||||
this.processing = false;
|
this.processing = false;
|
||||||
|
@ -83,6 +83,7 @@ exports.CONSOLE_STYLE_BgMagenta = "\x1b[45m";
|
|||||||
exports.CONSOLE_STYLE_BgCyan = "\x1b[46m";
|
exports.CONSOLE_STYLE_BgCyan = "\x1b[46m";
|
||||||
exports.CONSOLE_STYLE_BgWhite = "\x1b[47m";
|
exports.CONSOLE_STYLE_BgWhite = "\x1b[47m";
|
||||||
exports.CONSOLE_STYLE_BgGray = "\x1b[100m";
|
exports.CONSOLE_STYLE_BgGray = "\x1b[100m";
|
||||||
|
|
||||||
const consoleModuleColors = [
|
const consoleModuleColors = [
|
||||||
exports.CONSOLE_STYLE_FgCyan,
|
exports.CONSOLE_STYLE_FgCyan,
|
||||||
exports.CONSOLE_STYLE_FgGreen,
|
exports.CONSOLE_STYLE_FgGreen,
|
||||||
|
Loading…
Reference in New Issue
Block a user