| 
						
						
						
					 | 
				
				 | 
				
					@ -1,22 +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", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    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)', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    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 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -33,7 +44,27 @@ class Prometheus { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    update(heartbeat) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    update(heartbeat, tlsInfo) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (typeof tlsInfo !== "undefined") { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                let 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) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } catch (e) { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -41,7 +72,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?
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |