Expose check status and response time to Prometheus
This commit is contained in:
		
							parent
							
								
									7acb265559
								
							
						
					
					
						commit
						96242dce0d
					
				
					 1 changed files with 20 additions and 1 deletions
				
			
		| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
 | 
					const Prometheus = require('prom-client');
 | 
				
			||||||
const dayjs = require("dayjs");
 | 
					const dayjs = require("dayjs");
 | 
				
			||||||
const utc = require('dayjs/plugin/utc')
 | 
					const utc = require('dayjs/plugin/utc')
 | 
				
			||||||
var timezone = require('dayjs/plugin/timezone')
 | 
					var timezone = require('dayjs/plugin/timezone')
 | 
				
			||||||
| 
						 | 
					@ -10,6 +10,16 @@ const {R} = require("redbean-node");
 | 
				
			||||||
const {BeanModel} = require("redbean-node/dist/bean-model");
 | 
					const {BeanModel} = require("redbean-node/dist/bean-model");
 | 
				
			||||||
const {Notification} = require("../notification")
 | 
					const {Notification} = require("../notification")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const monitor_response_time = new Prometheus.Gauge({
 | 
				
			||||||
 | 
					    name: 'monitor_response_time',
 | 
				
			||||||
 | 
					    help: 'Monitor Response Time (ms)',
 | 
				
			||||||
 | 
					    labelNames: ['monitor_name']
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					const monitor_status = new Prometheus.Gauge({
 | 
				
			||||||
 | 
					    name: 'montor_status',
 | 
				
			||||||
 | 
					    help: 'Monitor Status (1 = UP, 0= DOWN)',
 | 
				
			||||||
 | 
					    labelNames: ['monitor_name']
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * status:
 | 
					 * status:
 | 
				
			||||||
 *      0 = DOWN
 | 
					 *      0 = DOWN
 | 
				
			||||||
| 
						 | 
					@ -143,12 +153,21 @@ class Monitor extends BeanModel {
 | 
				
			||||||
                bean.important = false;
 | 
					                bean.important = false;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            monitor_status.set({
 | 
				
			||||||
 | 
					                monitor_name: this.name
 | 
				
			||||||
 | 
					            }, bean.status)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (bean.status === 1) {
 | 
					            if (bean.status === 1) {
 | 
				
			||||||
                console.info(`Monitor #${this.id} '${this.name}': Successful Response: ${bean.ping} ms | Interval: ${this.interval} seconds | Type: ${this.type}`)
 | 
					                console.info(`Monitor #${this.id} '${this.name}': Successful Response: ${bean.ping} ms | Interval: ${this.interval} seconds | Type: ${this.type}`)
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                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}`)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            monitor_response_time.set({
 | 
				
			||||||
 | 
					                monitor_name: this.name
 | 
				
			||||||
 | 
					            }, bean.ping)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            io.to(this.user_id).emit("heartbeat", bean.toJSON());
 | 
					            io.to(this.user_id).emit("heartbeat", bean.toJSON());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            await R.store(bean)
 | 
					            await R.store(bean)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue