ElasticSearch DiskSpace Check Function
JS
S
JavaScriptCheck disk space w/ serverless
1#!/usr/bin/env node
2'use strict';
3const axios = require('axios');
4const processResult = async (rawResult) => {
5 return new Promise(async (resolve, reject) => {
6 console.log('processResult', rawResult);
7 const { nodes } = rawResult;
8 const allNodes = Object.keys(nodes);
9 let hasLimitedFreeSpace = false;
10 allNodes.forEach((node) => {
11 const nodeData = nodes[node];
12 const freeSpace = nodeData.fs.total.free_in_bytes;
13 console.log('freeSpace', freeSpace);
14 if (freeSpace < 15000000000) {
15 hasLimitedFreeSpace = true;
16 }
17 });
18 if (hasLimitedFreeSpace) {
19 await sendToSlack();
20 }
21 resolve(true);
22 });
23};
24
25const sendToSlack = async (errorsList) => {
26 const postBodyPayload = { text: 'Warning! Elastic Search is running out of space. Action Required! Action Required! Action Required!' };
27 const uri = `${process.env.slackHook}`;
28 return axios.post(uri, postBodyPayload);
29};
30
31module.exports.run = async (event) => {
32 const uri = `${process.env.elasticEndpoint}/_nodes/stats/fs`;
33 try {
34 console.log('uri', uri);
35 const response = await axios.get(uri, {
36 headers: {
37 Authorization: `Basic ${process.env.elasticUsernamePassword64}`,
38 },
39 });
40 console.log('called sucessfully', response.data);
41 await processResult(response.data);
42 return {
43 statusCode: 200,
44 body: JSON.stringify(
45 {
46 message: 'Health check complete',
47 input: event,
48 },
49 null,
50 2
51 ),
52 };
53 } catch (err) {
54 console.error(err);
55 return {
56 statusCode: 500,
57 body: JSON.stringify(
58 {
59 message: 'Failed doing health check!',
60 input: event,
61 },
62 null,
63 2
64 ),
65 };
66 }
67};
68Created on 1/4/2022