express-status-monitor
Version:
Realtime Monitoring for Express-based Node applications
55 lines (42 loc) • 1.12 kB
JavaScript
const axios = require('axios');
function allSettled (promises) {
const wrappedPromises = promises.map(p => Promise.resolve(p)
.then(
val => ({ state: 'fulfilled', value: val }),
err => ({ state: 'rejected', reason: err })
)
);
return Promise.all(wrappedPromises);
}
module.exports = async healthChecks => {
const checkPromises = [];
(healthChecks || []).forEach(healthCheck => {
let uri = `${healthCheck.protocol}://${healthCheck.host}`;
if (healthCheck.port) {
uri += `:${healthCheck.port}`;
}
uri += healthCheck.path;
checkPromises.push(axios({
url: uri,
method: 'GET'
}));
});
const checkResults = [];
return allSettled(checkPromises).then(results => {
results.forEach((result, index) => {
if (result.state === 'rejected') {
checkResults.push({
path: healthChecks[index].path,
status: 'failed'
});
} else {
checkResults.push({
path: healthChecks[index].path,
status: 'ok'
});
}
});
return checkResults;
});
};
;