Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Issue with node.js app stopping on AWS

I have a node.js app that pings a url and then sends a message to Slack if it gets an error code. It works fine for two days but then it just stops working. I'm using Screen to keep it running but it still seems to stop. Any help would be greatly appreciated.

The code is below:

var request = require("request")
var Hapi = require('hapi');
var Slack = require('slack-node');
var h = 0;
var s = 0;
var e = 0;

function onlineBooking(){
request({
    url: "http://example.com",
    json: true
}, function (error, response, body) {

    if (!error && response.statusCode === 200) {

        // 'if/else' checks that it receives an up respsose four times in a row 
        // the variable e is increased by .25 for every 200(ok response) until e reaches 1
        // it will then send a message that the server is up
        if(e < 1  && response.statusCode === 200){
            setTimeout(function () {
           console.log(response.statusCode) // Print the response code
            e =e+0.25;
            }, 6000); // 6 seconds delay between each response 
        }

    else {
          while(h == 0){
        console.log(response.statusCode) // Print the response code
        console.log("********************")
        slackReviewBot("Website :robot_face: ", response.statusCode + " - OK", "http://example.com", "");
            h++;
            s = 0; 
          } 
        }// end of else
    }// end of if
    else {
        console.log(response.statusCode) // Print the response code
        e = 0;
        setTimeout(function () {  
        while(s == 0){

        console.log(response.statusCode) // Print the response code
        console.log("********************")
        slackReviewBot("Website :robot_face: ", response.statusCode, "http://example.com", "");
            s++;
            h=0;
        }}, 3000);
    } // end of else

})

}

// sets the loop for checking every 7 seconds

setInterval(function(){

    onlineBooking();

}, 7000); 


//  this function sends server name, a message and url to slack
function slackReviewBot(servername, body, urls, bod) {

var time = require('time');
// Create a new Date instance
var now = new time.Date();
now.setTimezone("Europe/London");

    var bo = body; 
    var bod = bod;
    var urls = urls;
    var sname = servername; 
    // you'll need to replace the slack webhook below
    // you'll find info on webhooks here https://api.slack.com/incoming-webhooks
    var webhook_url = 'https://hooks.slack.com/services/xxxxxxxxxxxxxxxxxxxxxx';
    slack = new Slack();
    slack.setWebhook(webhook_url);

        slack.webhook({
        channel: "#server-uptime",
        username: "Server:",
        icon_emoji: "http://4.bp.blogspot.com/-mYCTaPOu-60/VK98X5CJEyI/AAAAAAAAApM/0oplbclvnUY/s1600/unnamed.png",
        text: " " + "\n" + 
            "*" + sname + " * " + "\n" +
            "Status: " + bo + "\n" +
            now + "\n" +
            "Check the status here: " + urls + "\n" 

        }, function(err, response) {      
        console.log(response);
        }); 
}



// below is so you can send a test json object to the server
// http POST localhost:1337/jsonpost test=Test 
// you'll get a slack message letting you know the server is running
var server = new Hapi.Server();
server.connection({
    port: 1337
});

exports.add = function(i, j) {
    return i + j;
};

//  Slack function for sending the test reply
function slackReviewBot2(testserver) {
    testserver = testserver;
      // you'll need to replace the slack webhook below
    // you'll find info on webhooks here https://api.slack.com/incoming-webhooks
    var webhook_url = 'https://hooks.slack.com/services/xxxxxxxxxxxxxxxxxxxxxxxxxx';
    slack2 = new Slack();
    slack2.setWebhook(webhook_url);


        slack.webhook({
        channel: "#server-uptime",
        username: "Server-Test-Reply:",
        icon_emoji: "http://www.wonderfulwebsites.ie/logo.png",
        text: ":star: :star: :star: :star: :star:" + "\n" + 
            "\n" + 
            "Sever is up and running!!!"

        }, function(err, response) {

        console.log(response);
        });
}


// take the json object for testing
server.route({
  method: 'POST'
, path: '/jsonpost',
handler: function(req, reply) {

     var review = {
      userName: req.payload.userName
      }
            //passes the review to the slackbot function 
            slackReviewBot2(review.userName);
            reply("Received");
    } 
});

// prints a server running message 
server.start(function(){
    console.log('server running at: ', server.info.url);
});

You can find a post explaining how it works below http://codingyoda.com/slack-pinging-tool.php

like image 861
Derek MC Avatar asked Jul 06 '17 22:07

Derek MC


People also ask

Why is node js not running?

Make sure the node path is added, if not added it. After doing this restart Visual Studio or open a fresh command prompt. From the command prompt type 'node -v' to echo the node version installed. You can also add the path to node or any other application directly on the command line.

Is node JS compatible with AWS?

AWS Lambda now supports Node. js 16 as both a managed runtime and a container base image. Developers creating serverless applications in Lambda with Node. js 16 can take advantage of new features such as support for Apple silicon for local development, the timers promises API, and enhanced performance.

For which application NodeJS is not well suited for?

Not Suitable for Heavy-Computing Apps Node. js doesn't support multi-threaded programming yet. It is able to serve way more complicated applications than Ruby, but it's not suitable for performing long-running calculations. Heavy computations block the incoming requests, which can lead to decrease of performance .


1 Answers

i dont know why this happens, but you can fix this using forever it will restart the process if becomes inactive or crashes (this replaces the screen).

like image 188
Sebastián Espinosa Avatar answered Oct 24 '22 23:10

Sebastián Espinosa