banner how to make a health site bot

How to make a Health Site Bot

Marcelle Vargas

--

When we create a website be it for a client or personal, it’s important to guarantee the service is up. Thinking help with this, that’s the objective of this article. With that in mind, let’s create a bot using Node.js to let us know when our site responds to HTTP Status other than 200.

Step 1: Start the project

The first step of our project is to create the folder of our bot, so insert this line of code below on your terminal

mkdir health-site-bot && cd health-site-bot

Now we’ll run a command for Node.js to create the basic structure necessary to run the project

npm init -y

If everything is ok, now we’ll be creating the two files to define our bot.

touch config.js && touch server.js

Step 2: Install the Libraries

Run all the lines below on your terminal

npm i dotenv && npm i express && npm i nodemailer

Step 3: Editing Config.js

Let’s import the dotenv and path libraries, and export the global variables EMAIL and PASSWORD.

const dotenv = require("dotenv");
const path = require("path");

dotenv.config({
path: ".env",
});

module.exports = {
EMAIL: process.env.EMAIL,
PASS: process.env.SENHA
};

Step 4: Create a .env file

The .env file is a file that saves information like credentials. With this method, we can make configurations for the production and development environments just set what .env file I want to use.

#.env
EMAIL=email@teste.com
PASS=123456

How the .env file serves to store credentials it’s not so good if you save this on your repository. In the next step, we’ll configure the .gitignore to remove this file from our repository and prevent accidental commits.

Step 5: Configure .gitignore file

In this file we’ll add a name of two files for git not add when we make a commit.

touch .gitignore
node_modules
.env

Step 6: Create a serve.js file

The serve.js is a file we use to configure our bot. So, the first thing we’ll do is, import the necessary libraries.

//serve.js
const nodemailer = require("nodemailer");
const config = require("./config.js");
const moment = require("moment");
const https = require("https");

After that, we create a constant variable for storing the URL application we want to monitor.

const url = "https://www.google.com/"

With this URL defined, we can create a function for making requests HTTP to verify the status. If this status is not equal to 200, we’ll call a function to notify us.

function healthCheck() {
https.get(_url, function (res) {
if (res.statusCode !== 200) {
_sendMail();
}
});
}

In this tutorial, our bot notifies us by e-mail. So, let’s create a function called “_sendMail()”

function _sendMail(statusHTTP) {
var transporter = nodemailer.createTransport({
host: "HOST_EMAIL",
auth: {
user: config.EMAIL,
pass: config.SENHA,
},
});
}

In the above code, we use a function from nodemailer to create a connection with e-mail host. The username and password used in this file are imported from the .env file, they are the email account data we will use to send the notifications.

var mailOptions = {
from: "YOUR_EMAIL",
to: "EMAIL_RECEIVE",
subject: `ERROR WITH ${url}`,
text: `Oops! Your service is having problems.
Problem description:
Received code: ${statusHTTP}`,
};
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
}
});

The last part of our script is to create a function for call _sendMail if the website return status different than 200.

function healthCheck() {
https.get(_url, function (res) {
if (res.statusCode !== 200) {
_sendMail();
}
});
}

healthCheck();

At this moment, the serve.js file is like this

const nodemailer = require("nodemailer");
const config = require("./config.js");
const https = require("https");

const _url = 'URL_APP';

function _sendMail(statusHTTP) {
var transporter = nodemailer.createTransport({
host: "HOST_EMAIL",
auth: {
user: config.EMAIL,
pass: config.SENHA,
},
});
var mailOptions = {
from: "SEU_EMAIL",
to: "EMAIL_DO_REMETENTE",
subject: `ERROR WITH ${url}`,
text: `Oops! Your service is having problems.
Problem description:
Received code: ${statusHTTP}`,
};
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
}
});
}

function healthCheck() {
https.get(_url, function (res) {
if (res.statusCode !== 200) {
_sendMail();
}
});
}

healthCheck();

--

--

Marcelle Vargas

I have been a software developer since 2016, with a solid foundation in several programming languages, such as JavaScript, TypeScript, Python, PHP and Golang.