const PrometheusClient = require('prom-client');

const commonLabels = [
    'monitor_name',
    'monitor_type',
    'monitor_url',
    'monitor_hostname',
    'monitor_port',
]

const monitor_response_time = new PrometheusClient.Gauge({
    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)',
    labelNames: commonLabels
});

class Prometheus {
    monitorLabelValues = {}

    constructor(monitor) {
        this.monitorLabelValues = {
            monitor_name: monitor.name,
            monitor_type: monitor.type,
            monitor_url: monitor.url,
            monitor_hostname: monitor.hostname,
            monitor_port: monitor.port
        }
    }

    update(heartbeat) {
        try {
            monitor_status.set(this.monitorLabelValues, heartbeat.status)
        } catch (e) {
            console.error(e)
        }

        try {
            if (typeof heartbeat.ping === 'number') {
                monitor_response_time.set(this.monitorLabelValues, heartbeat.ping)
            } else {
                // Is it good?
                monitor_response_time.set(this.monitorLabelValues, -1)
            }
        } catch (e) {
            console.error(e)
        }
    }

}

module.exports = {
    Prometheus
}