From 5eb4f55dfd56051a2343c4524abdee837f5dbaab Mon Sep 17 00:00:00 2001 From: Matthew Macdonald-Wallace Date: Tue, 10 Aug 2021 07:55:06 +0100 Subject: [PATCH 1/4] Add the new gauges to the prometheus handler --- server/prometheus.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/server/prometheus.js b/server/prometheus.js index f60ec45a6..a6b4d7aac 100644 --- a/server/prometheus.js +++ b/server/prometheus.js @@ -8,6 +8,17 @@ const commonLabels = [ 'monitor_port', ] +const monitor_cert_days_remaining = new PrometheusClient.Gauge({ + name: 'monitor_cert_days_remaining', + help: 'The number of days remaining until the certificate expires', + labelNames: commonLabels +}); + +const monitor_cert_is_valid = new PrometheusClient.Gauge({ + name: 'monitor_cert_is_valid', + help: 'Is the certificate still valid? (1 = Yes, 0= No)', + labelNames: commonLabels +}); const monitor_response_time = new PrometheusClient.Gauge({ name: 'monitor_response_time', help: 'Monitor Response Time (ms)', From 692a11e51e8f93672659d6d066c9ccbdda97234d Mon Sep 17 00:00:00 2001 From: LouisLam Date: Tue, 10 Aug 2021 17:51:30 +0800 Subject: [PATCH 2/4] pass tls info to prometheus.update --- server/model/monitor.js | 12 +++++++++--- server/prometheus.js | 36 ++++++++++++++++++++---------------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index 2520c282e..ce8a249c6 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -79,6 +79,10 @@ class Monitor extends BeanModel { const beat = async () => { + // Expose here for prometheus update + // undefined if not https + let tlsInfo = undefined; + if (! previousBeat) { previousBeat = await R.findOne("heartbeat", " monitor_id = ? ORDER BY time DESC", [ this.id, @@ -132,7 +136,7 @@ class Monitor extends BeanModel { let certInfoStartTime = dayjs().valueOf(); if (this.getUrl()?.protocol === "https:") { try { - await this.updateTlsInfo(checkCertificate(res)); + tlsInfo = await this.updateTlsInfo(checkCertificate(res)); } catch (e) { if (e.message !== "No TLS certificate in response") { console.error(e.message) @@ -254,7 +258,7 @@ class Monitor extends BeanModel { console.warn(`Monitor #${this.id} '${this.name}': Failing: ${bean.msg} | Type: ${this.type}`) } - prometheus.update(bean) + prometheus.update(bean, tlsInfo) io.to(this.user_id).emit("heartbeat", bean.toJSON()); @@ -289,7 +293,7 @@ class Monitor extends BeanModel { /** * Store TLS info to database * @param checkCertificateResult - * @returns {Promise} + * @returns {Promise} */ async updateTlsInfo(checkCertificateResult) { let tls_info_bean = await R.findOne("monitor_tls_info", "monitor_id = ?", [ @@ -301,6 +305,8 @@ class Monitor extends BeanModel { } tls_info_bean.info_json = JSON.stringify(checkCertificateResult); await R.store(tls_info_bean); + + return checkCertificateResult; } static async sendStats(io, monitorID, userID) { diff --git a/server/prometheus.js b/server/prometheus.js index a6b4d7aac..21b83b342 100644 --- a/server/prometheus.js +++ b/server/prometheus.js @@ -1,33 +1,33 @@ -const PrometheusClient = require('prom-client'); +const PrometheusClient = require("prom-client"); const commonLabels = [ - 'monitor_name', - 'monitor_type', - 'monitor_url', - 'monitor_hostname', - 'monitor_port', + "monitor_name", + "monitor_type", + "monitor_url", + "monitor_hostname", + "monitor_port", ] const monitor_cert_days_remaining = new PrometheusClient.Gauge({ - name: 'monitor_cert_days_remaining', - help: 'The number of days remaining until the certificate expires', + name: "monitor_cert_days_remaining", + help: "The number of days remaining until the certificate expires", labelNames: commonLabels }); const monitor_cert_is_valid = new PrometheusClient.Gauge({ - name: 'monitor_cert_is_valid', - help: 'Is the certificate still valid? (1 = Yes, 0= No)', + name: "monitor_cert_is_valid", + help: "Is the certificate still valid? (1 = Yes, 0= No)", labelNames: commonLabels }); const monitor_response_time = new PrometheusClient.Gauge({ - name: 'monitor_response_time', - help: 'Monitor Response Time (ms)', + name: "monitor_response_time", + help: "Monitor Response Time (ms)", labelNames: commonLabels }); const monitor_status = new PrometheusClient.Gauge({ - name: 'monitor_status', - help: 'Monitor Status (1 = UP, 0= DOWN)', + name: "monitor_status", + help: "Monitor Status (1 = UP, 0= DOWN)", labelNames: commonLabels }); @@ -44,7 +44,11 @@ class Prometheus { } } - update(heartbeat) { + update(heartbeat, tlsInfo) { + + // TODO: TLS Info here + console.log(tlsInfo) + try { monitor_status.set(this.monitorLabelValues, heartbeat.status) } catch (e) { @@ -52,7 +56,7 @@ class Prometheus { } try { - if (typeof heartbeat.ping === 'number') { + if (typeof heartbeat.ping === "number") { monitor_response_time.set(this.monitorLabelValues, heartbeat.ping) } else { // Is it good? From 268dd33792a022f64cf92dff97664e5736950755 Mon Sep 17 00:00:00 2001 From: Matthew Macdonald-Wallace Date: Tue, 10 Aug 2021 12:14:13 +0100 Subject: [PATCH 3/4] Add TLS Info to Prometheus metric output --- server/prometheus.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/server/prometheus.js b/server/prometheus.js index 21b83b342..ef3b0352d 100644 --- a/server/prometheus.js +++ b/server/prometheus.js @@ -47,7 +47,26 @@ class Prometheus { update(heartbeat, tlsInfo) { // TODO: TLS Info here - console.log(tlsInfo) + + if (typeof tlsInfo !== "undefined"){ + try { + var is_valid = 0 + if (tlsInfo.valid == true){ + is_valid = 1 + } else { + is_valid = 0 + } + monitor_cert_is_valid.set(this.monitorLabelValues, is_valid) + } catch (e) { + console.error(e) + } + + try { + monitor_cert_days_remaining.set(this.monitorLabelValues, tlsInfo.daysRemaining) + } catch (e) { + console.error(e) + } + } try { monitor_status.set(this.monitorLabelValues, heartbeat.status) From debcac4924a88ebad51d559733d6ed006541a1fd Mon Sep 17 00:00:00 2001 From: LouisLam Date: Tue, 10 Aug 2021 20:00:59 +0800 Subject: [PATCH 4/4] run eslint --- server/prometheus.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/server/prometheus.js b/server/prometheus.js index ef3b0352d..3e4767b3d 100644 --- a/server/prometheus.js +++ b/server/prometheus.js @@ -45,13 +45,10 @@ class Prometheus { } update(heartbeat, tlsInfo) { - - // TODO: TLS Info here - - if (typeof tlsInfo !== "undefined"){ + if (typeof tlsInfo !== "undefined") { try { - var is_valid = 0 - if (tlsInfo.valid == true){ + let is_valid = 0 + if (tlsInfo.valid == true) { is_valid = 1 } else { is_valid = 0