| 
						
						
							
								
							
						
						
					 | 
					@ -80,6 +80,10 @@ class Monitor extends BeanModel { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        const beat = async () => { | 
					 | 
					 | 
					        const beat = async () => { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            // Expose here for prometheus update
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            // undefined if not https
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            let tlsInfo = undefined; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            if (! previousBeat) { | 
					 | 
					 | 
					            if (! previousBeat) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                previousBeat = await R.findOne("heartbeat", " monitor_id = ? ORDER BY time DESC", [ | 
					 | 
					 | 
					                previousBeat = await R.findOne("heartbeat", " monitor_id = ? ORDER BY time DESC", [ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    this.id, | 
					 | 
					 | 
					                    this.id, | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -133,7 +137,7 @@ class Monitor extends BeanModel { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    let certInfoStartTime = dayjs().valueOf(); | 
					 | 
					 | 
					                    let certInfoStartTime = dayjs().valueOf(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    if (this.getUrl()?.protocol === "https:") { | 
					 | 
					 | 
					                    if (this.getUrl()?.protocol === "https:") { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                        try { | 
					 | 
					 | 
					                        try { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                            await this.updateTlsInfo(checkCertificate(res)); | 
					 | 
					 | 
					                            tlsInfo = await this.updateTlsInfo(checkCertificate(res)); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					                        } catch (e) { | 
					 | 
					 | 
					                        } catch (e) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                            if (e.message !== "No TLS certificate in response") { | 
					 | 
					 | 
					                            if (e.message !== "No TLS certificate in response") { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                                console.error(e.message) | 
					 | 
					 | 
					                                console.error(e.message) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -255,7 +259,7 @@ class Monitor extends BeanModel { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                console.warn(`Monitor #${this.id} '${this.name}': Failing: ${bean.msg} | Type: ${this.type}`) | 
					 | 
					 | 
					                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()); | 
					 | 
					 | 
					            io.to(this.user_id).emit("heartbeat", bean.toJSON()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -290,7 +294,7 @@ class Monitor extends BeanModel { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    /** | 
					 | 
					 | 
					    /** | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					     * Store TLS info to database | 
					 | 
					 | 
					     * Store TLS info to database | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					     * @param checkCertificateResult | 
					 | 
					 | 
					     * @param checkCertificateResult | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					     * @returns {Promise<void>} | 
					 | 
					 | 
					     * @returns {Promise<object>} | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					     */ | 
					 | 
					 | 
					     */ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    async updateTlsInfo(checkCertificateResult) { | 
					 | 
					 | 
					    async updateTlsInfo(checkCertificateResult) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        let tls_info_bean = await R.findOne("monitor_tls_info", "monitor_id = ?", [ | 
					 | 
					 | 
					        let tls_info_bean = await R.findOne("monitor_tls_info", "monitor_id = ?", [ | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -302,6 +306,8 @@ class Monitor extends BeanModel { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        } | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        tls_info_bean.info_json = JSON.stringify(checkCertificateResult); | 
					 | 
					 | 
					        tls_info_bean.info_json = JSON.stringify(checkCertificateResult); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        await R.store(tls_info_bean); | 
					 | 
					 | 
					        await R.store(tls_info_bean); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        return checkCertificateResult; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    } | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    static async sendStats(io, monitorID, userID) { | 
					 | 
					 | 
					    static async sendStats(io, monitorID, userID) { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					
  |