#!/usr/bin/env ruby require 'uri' require 'net/http' require 'net/telnet' # ### Global Config # # httptimeout => Number in seconds for HTTP Timeout. Set to ruby default of 60 seconds. # ping_count => Number of pings to perform for the ping method # httptimeout = 60 ping_count = 10 # # Check whether a server is Responding you can set a server to # check via http request or ping # # Server Options # name # => The name of the Server Status Tile to Update # url # => Either a website url or an IP address. Do not include https:// when using ping method. # method # => http # => ping # # Notes: # => If the server you're checking redirects (from http to https for example) # the check will return false # servers = [ {name: 'sss-gateway', url: 'ping://192.168.1.1' }, {name: 'sss-google', url: 'http://google.co.uk' }, {name: 'sss-gmail', url: 'telnet://smtp.gmail.com:565' }, {name: 'sss-broken', url: 'http://1.2.3.4' } ] SCHEDULER.every '1m', :first_in => 0 do |job| servers.each do |server| begin uri = URI.parse(server[:url]) case uri.scheme when 'http' http = Net::HTTP.new(uri.host, uri.port) http.read_timeout = httptimeout response = Net::HTTP::get_response(uri) if response.is_a?(Net::HTTPError) result = 0 else result = 1 end when 'https' http = Net::HTTP.new(uri.host, uri.port) http.read_timeout = httptimeout http.use_ssl=true http.verify_mode = OpenSSL::SSL::VERIFY_NONE response = Net::HTTP::get_response(uri) if response.is_a?(Net::HTTPError) result = 0 else result = 1 end when 'ping' result = `ping -q -c #{ping_count} #{uri.host}` if ($?.exitstatus == 0) result = 1 else result = 0 end when 'telnet' result = 0 connection = Net::Telnet::new( "Host" => uri.host, "Port" => uri.port, "Timeout" => 5, "Telnetmode" => false ) result = 1 connection.close() else print "I have no idea how to handle URLs with a scheme of #{uri.scheme}\n" end rescue Timeout::Error result = 0 rescue Errno::ETIMEDOUT result = 0 rescue Errno::EHOSTUNREACH result = 0 rescue Errno::ECONNREFUSED result = 0 rescue SocketError => e result = 0 end send_event(server[:name], result: result) end end