ElasticSearch DiskSpace Check Function

JS
S
JavaScript

Check 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};
68

Created on 1/4/2022