|
#!/usr/bin/env ruby |
|
require 'net/http' |
|
require 'uri' |
|
|
|
# Check whether a server is responding |
|
# you can set a server to check via http request or ping |
|
# |
|
# server options: |
|
# name: how it will show up on the dashboard |
|
# url: either a website url or an IP address (do not include https:// when usnig ping method) |
|
# method: either 'http' or 'ping' |
|
# if the server you're checking redirects (from http to https for example) the check will |
|
# return false |
|
|
|
servers = [{name: 'server1', url: 'https://www.test.com', method: 'http'}, |
|
{name: 'server2', url: 'https://www.test2.com', method: 'http'}, |
|
{name: 'server3', url: '192.168.0.1', method: 'ping'}] |
|
|
|
SCHEDULER.every '300s', :first_in => 0 do |job| |
|
|
|
statuses = Array.new |
|
|
|
# check status for each server |
|
servers.each do |server| |
|
if server[:method] == 'http' |
|
uri = URI.parse(server[:url]) |
|
http = Net::HTTP.new(uri.host, uri.port) |
|
if uri.scheme == "https" |
|
http.use_ssl=true |
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE |
|
end |
|
request = Net::HTTP::Get.new(uri.request_uri) |
|
response = http.request(request) |
|
if response.code == "200" |
|
result = 1 |
|
else |
|
result = 0 |
|
end |
|
elsif server[:method] == 'ping' |
|
ping_count = 10 |
|
result = `ping -q -c #{ping_count} #{server[:url]}` |
|
if ($?.exitstatus == 0) |
|
result = 1 |
|
else |
|
result = 0 |
|
end |
|
end |
|
|
|
if result == 1 |
|
arrow = "icon-ok-sign" |
|
color = "green" |
|
else |
|
arrow = "icon-warning-sign" |
|
color = "red" |
|
end |
|
|
|
statuses.push({label: server[:name], value: result, arrow: arrow, color: color}) |
|
end |
|
|
|
# print statuses to dashboard |
|
send_event('server_status', {items: statuses}) |
|
end |
Edit: Looks like I've got it working now from the fix above.
Hi Guys - wondering if I could have some help?
I've loaded the widget and files into Smashing but it doesn't load any of the ping data just the display names of the servers. Any ideas?
I'm currently running the server on Ubuntu