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