async healthy(timeoutMs = 90000, status = 'green') { await this.client.cluster.health({ level: 'cluster', waitForStatus: status, requestTimeout: timeoutMs }); this.logElastic('info', `[HEALTHCHECK] status [${status}] is OK!`); }
/** Check the ES connection status */ async function checkConnection () { let isConnected = false while (!isConnected) { console.log('Connecting to ES') try { const health = await client.cluster.health({}) console.log(health) isConnected = true } catch (err) { console.log('Connection Failed, Retrying...', err) } } }
async start() { try { const result = await this.client.cluster.health(); result.alert = `${this.config.url} is '${result.status}'.`; switch(result.status) { case GREEN: this.ok(); break; case YELLOW: this.warn(result.alert, result); break; case RED: default: this.crit(result.alert, result); break; } } catch (err) { this.error = err; this.crit(); } setTimeout(this.start.bind(this), this.interval); return this; }
const connect = async () => { if (!connected) { if (delayed) { await delayed; } try { await client.cluster.health({}); connected = true; console.info('Elasticsearch connected.'); } catch (e) { console.info('Elasticsearch not ready, waiting 3 seconds...'); delayed = delay(3000); await connect(); } } }