Skip to content

This package provide monitoring websites over http for availability. You can configure website address, path, timeout and keyword check. Monitor script check for response code 200. Optionally it can check for keyword in page body.

License

Notifications You must be signed in to change notification settings

feldsam/server-monitor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Server-Monitor

This package provide monitoring websites over http for availability. You can configure website address, path, timeout and keyword check. Monitor script check for response code which have to be 200. Optionally it can check for keyword in page body.

Main function returns JSON with two keys: errors and cleared. When outage occured, data appeared in errors key in this format:

errors: {
	'www.domain.tld': {
		message: 'Host www.domain.tld is down! Server doesn\'t response within 15 seconds',
	    count: 1,
	    outageAt: 1457297987597
	}
}

If outage continue in next monitoring cycle, count is incremented and lastUpdatedAt is added.

errors: {
	'www.domain.tld': {
		message: 'Host www.domain.tld is down! Server doesn\'t response within 15 seconds',
	    count: 2,
	    outageAt: 1457297987597,
	    lastUpdatedAt: 1457298012441
	}
}

When outage is cleared error record moved to cleared key and clearedAt is added.

cleared: {
	'www.domain.tld': {
		message: 'Host www.domain.tld is down! Server doesn\'t response within 15 seconds',
	    count: 5,
	    outageAt: 1457297987597,
	    lastUpdatedAt: 1457298012441,
	    clearedAt: 1457298585791
	}
}

In next monitoring cycle cleared key will be truncated.

Example code

config.json

[
	{
		"host": "somedomain.tld", // should point to final address, redirects (301, 302) are not supported yet.
		"path": "/",
		"service": "http", // should be always http, no other types are implemented yet.
		"timeout": 15,
		"checkKeyword": "SomeKeyword" // to find in page body
	},
	{
		"host": "www.somedomain.tld",
		"path": "/",
		"service": "https",
		"timeout": 10
	}
]

usage in script

require("shelljs/global");
var monitor = require("server-monitor").monitor;
var config = require("./config");

monitor(config, function(err, data){
	if(err){
		console.log(err);
		process.exit(1);
	}
	
	console.log(data);
	// do what you want, send mail or send sms?
	
	// example with gammu
	if(Object.keys(data.errors).length > 0){
		for(k in data.errors){
			var error = data.errors[k];
			
			if(error.count == 1) exec('echo "' + error.message + '" | gammu sendsms TEXT +420773123456', {silent: true});
		}
	}

	if(Object.keys(data.cleared).length > 0){
                for(k in data.cleared){
			var clear = data.cleared[k];
			exec('echo "Resolved: ' + clear.message + '. Count: ' + clear.count + '" | gammu sendsms TEXT +420773123456', {silent: true});
		}
	}

	process.exit(0);
});

You can add this to crontab and all is done :)

* * * * * /path/to/node /path/to/your/code.js

About

This package provide monitoring websites over http for availability. You can configure website address, path, timeout and keyword check. Monitor script check for response code 200. Optionally it can check for keyword in page body.

Resources

License

Stars

Watchers

Forks

Packages

No packages published