parent
cc6f1d7487
commit
209fa83cff
@ -0,0 +1,40 @@
|
|||||||
|
const basicAuth = require('express-basic-auth')
|
||||||
|
const passwordHash = require('./password-hash');
|
||||||
|
const {R} = require("redbean-node");
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param username : string
|
||||||
|
* @param password : string
|
||||||
|
* @returns {Promise<Bean|null>}
|
||||||
|
*/
|
||||||
|
exports.login = async function (username, password) {
|
||||||
|
let user = await R.findOne("user", " username = ? AND active = 1 ", [
|
||||||
|
username
|
||||||
|
])
|
||||||
|
|
||||||
|
if (user && passwordHash.verify(password, user.password)) {
|
||||||
|
// Upgrade the hash to bcrypt
|
||||||
|
if (passwordHash.needRehash(user.password)) {
|
||||||
|
await R.exec("UPDATE `user` SET password = ? WHERE id = ? ", [
|
||||||
|
passwordHash.generate(password),
|
||||||
|
user.id
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
return user;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function myAuthorizer(username, password, callback) {
|
||||||
|
exports.login(username, password).then((user) => {
|
||||||
|
callback(null, user != null)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.basicAuth = basicAuth({
|
||||||
|
authorizer: myAuthorizer,
|
||||||
|
authorizeAsync: true,
|
||||||
|
challenge: true
|
||||||
|
});
|
@ -0,0 +1,59 @@
|
|||||||
|
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
|
||||||
|
}
|
Loading…
Reference in new issue