mirror of
https://github.com/louislam/uptime-kuma.git
synced 2025-08-08 22:40:09 +08:00
Feat: Add database storage for TLS info
This commit is contained in:
@@ -79,8 +79,10 @@ class Monitor extends BeanModel {
|
||||
})
|
||||
bean.msg = `${res.status} - ${res.statusText}`
|
||||
bean.ping = dayjs().valueOf() - startTime;
|
||||
if (this.url.startsWith("https")) {
|
||||
Monitor.sendCertInfo(checkCertificate(res), io, this.id, this.user_id);
|
||||
|
||||
// Check certificate if https is used
|
||||
if (this.getUrl().protocol === "https:") {
|
||||
await this.updateTlsInfo(checkCertificate(res));
|
||||
}
|
||||
|
||||
if (this.type === "http") {
|
||||
@@ -197,10 +199,35 @@ class Monitor extends BeanModel {
|
||||
clearInterval(this.heartbeatInterval)
|
||||
}
|
||||
|
||||
// Helper Method:
|
||||
// returns URL object for further usage
|
||||
// returns null if url is invalid
|
||||
getUrl() {
|
||||
try {
|
||||
return new URL(this.url);
|
||||
} catch (_) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Store TLS info to database
|
||||
async updateTlsInfo(checkCertificateResult) {
|
||||
let tls_info_bean = await R.findOne("monitor_tls_info", "monitor_id = ?", [
|
||||
this.id
|
||||
]);
|
||||
if (tls_info_bean == null) {
|
||||
tls_info_bean = R.dispense("monitor_tls_info");
|
||||
tls_info_bean.monitor_id = this.id;
|
||||
}
|
||||
tls_info_bean.info_json = JSON.stringify(checkCertificateResult);
|
||||
R.store(tls_info_bean);
|
||||
}
|
||||
|
||||
static async sendStats(io, monitorID, userID) {
|
||||
Monitor.sendAvgPing(24, io, monitorID, userID);
|
||||
Monitor.sendUptime(24, io, monitorID, userID);
|
||||
Monitor.sendUptime(24 * 30, io, monitorID, userID);
|
||||
Monitor.sendCertInfo(io, monitorID, userID);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -221,12 +248,13 @@ class Monitor extends BeanModel {
|
||||
io.to(userID).emit("avgPing", monitorID, avgPing);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param checkCertificateResult : Object return result of checkCertificate
|
||||
*/
|
||||
static async sendCertInfo(checkCertificateResult, io, monitorID, userID) {
|
||||
io.to(userID).emit("certInfo", monitorID, checkCertificateResult);
|
||||
static async sendCertInfo(io, monitorID, userID) {
|
||||
let tls_info = await R.findOne("monitor_tls_info", "monitor_id = ?", [
|
||||
monitorID
|
||||
]);
|
||||
if (tls_info != null) {
|
||||
io.to(userID).emit("certInfo", monitorID, tls_info.info_json);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user