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
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.
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.
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 .
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).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With