LouisLam
4 years ago
6 changed files with 141 additions and 47 deletions
@ -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