38 lines
1.0 KiB
JavaScript
38 lines
1.0 KiB
JavaScript
// A simple endpoint that does a single round trip to the database to check everything is working
|
|
|
|
const HealthCheckCollection = new Mongo.Collection('healthCheck');
|
|
|
|
// Don't use redis oplog optimization on this collection, we want to hit the database every time
|
|
HealthCheckCollection.disableRedis?.();
|
|
|
|
const healthCheckDoc = {
|
|
status: 'ok',
|
|
};
|
|
|
|
// Add the health check doc on startup if it's missing
|
|
// There should only be this single doc in the collection
|
|
// A capped collection would be marginally faster, but it's a pain to make one in Meteor
|
|
Meteor.startup(function () {
|
|
if (!HealthCheckCollection.findOne()) {
|
|
HealthCheckCollection.insert(healthCheckDoc);
|
|
}
|
|
});
|
|
|
|
Meteor.method('api-status', function () {
|
|
let dbHealthDoc;
|
|
try {
|
|
dbHealthDoc = HealthCheckCollection.findOne();
|
|
} catch (e) {
|
|
this.setHttpStatusCode(503);
|
|
}
|
|
if (dbHealthDoc?.status === 'ok') {
|
|
this.setHttpStatusCode(200);
|
|
} else {
|
|
this.setHttpStatusCode(500);
|
|
}
|
|
return dbHealthDoc || {};
|
|
}, {
|
|
httpMethod: 'GET',
|
|
url: 'api/status'
|
|
});
|