Building a Cyclone Alert Monitoring System using Checkly, Playwright and Node.js

Building a Cyclone Alert Monitoring System using Checkly, Playwright and Node.js

how to build a real-time cyclone alert monitoring system using checkly and Node.js to receive timely notifications on potential natural disaster

In today's world, real-time information is crucial to keeping people safe and informed, especially when it comes to natural disasters. Cyclones, for example, can be particularly devastating, and receiving timely alerts is crucial.

In this article, we will build a simple Cyclone Alert Monitoring System using Playwright and Node.js that fetches alerts from the National Weather Service API filters out repeated alerts, and sends an email notification when a new alert is issued.

Prerequisites

Before we begin, make sure that you have the following installed on your machine:

  • Node.js v14 or above

  • A text editor of your choice

  • A working email account

Setting up the project

Create a new Node.js project by running the following commands in your terminal:

mkdir cyclone-alert-monitoring
cd cyclone-alert-monitoring
npm init -y

Next, install the required dependencies by running the following command:

npm install playwright axios dotenv nodemailer nodemailer-sendgrid-transport --save

This command installs Playwright, a Node.js library for automating web browsers, Axios, a promise-based HTTP client for making API requests, dotenv, for managing environment variables, nodemailer, a module for sending emails, and nodemailer-sendgrid-transport, a transport plugin for nodemailer to use SendGrid as a service.

Create a new file in the project directory and name it index.ts. This will be our entry point for the project.

Fetching Cyclone Alerts

The first thing we need to do is fetch Cyclone alerts from the National Weather Service API. We will use Axios to make a GET request to the API, which returns an array of alert objects.

const API_ENDPOINT = 'https://api.weather.gov/alerts/active?area={state}';
const STATE_CODE = 'IN'; // Replace with desired state code

const fetchAlerts = async () => {
  const response = await axios.get(API_ENDPOINT.replace('{state}', STATE_CODE));
  const data = await response.data;
  return data;
};

Here, we define the API endpoint and the state code for which we want to fetch alerts. We create a fetchAlerts function that sends a GET request to the API with the state code included in the URL. We then return the response data.

Checking for New Alerts

Next, we need to check for new alerts. We will use a checkAlerts function that compares the latest alert ID with the previous one. If a new alert is found, we will send an email notification using the sendAlertEmail function that we will define later.

let latestAlertId = null;

const checkAlerts = async () => {
  const alerts = await fetchAlerts();
  const newAlerts = alerts.features.filter((alert) => alert.id !== latestAlertId);
  if (newAlerts.length > 0) {
    latestAlertId = newAlerts[0].id;
    sendAlertEmail(newAlerts[0]);
  }
};

We create a variable latestAlertId and initialize it to null. This variable will store the ID of the latest alert that we fetch. We define a checkAlerts function that first calls the fetchAlerts function to get the latest alerts. We then use the filter method to remove any alerts that have the same ID as the latest alert. If there are any new alerts, we update the latestAlertId variable to the ID of the first new alert and call the sendAlertEmail function with the new alert object.

Sending Email Notifications

To send email notifications.

GitHub Repo