Skip to content

Instantly share code, notes, and snippets.

@t0nylombardi
Created July 27, 2017 15:12
Show Gist options
  • Save t0nylombardi/73d89eac27c28e48b905e5454dc44d06 to your computer and use it in GitHub Desktop.
Save t0nylombardi/73d89eac27c28e48b905e5454dc44d06 to your computer and use it in GitHub Desktop.
Core code for site-sight
class SiteCheckWorker
include Sidekiq::Worker
include Sidetiq::Schedulable
@@max_retries = 3
@@times_retried = 0
@@timeout_interval = 0.5
recurrence { hourly.minute_of_hour(0,5,10,15,20,25,30,35,40,45,50,55) }
def perform
get_sites.each do |site|
begin
@@start_time = Time.now
response = HTTParty.get(site.url, timeout: @@timeout_interval)
check_status(response.code, site)
rescue Net::ReadTimeout => e
if start_retry(e, "ReadTimeout", site)
retry
else
update("failed",site,nil,@@times_retried,@@timeout_interval)
end
rescue Net::OpenTimeout => e
if start_retry(e, "OpenTimeout", site)
retry
else
update("failed",site,nil,@@times_retried,@@timeout_interval)
end
end
#reset
@@times_retried = 0
@@timeout_interval = 0.5
end
end
private
def start_retry(e, error_type, site="http://localhost")
if @@times_retried < @@max_retries
@@times_retried += 1
@@timeout_interval += 0.4
puts "#{error_type}: Failed with site #{site.url} , retry #{@@times_retried}/#{@@max_retries}\n\n"
true
else
puts "#{e.inspect}: Logging issue. #{site.url} failed after #{@@timeout_interval} Milliseconds"
false
end
end
def check_status(code, site)
@@elapsed_time = Time.now - @@start_time
case code
when 200
update(code,site,@@elapsed_time,@@times_retried,@@timeout_interval)
when 404
#SupportMailer.support_email.deliver_now
update(code,site,@@elapsed_time,@@times_retried,@@timeout_interval)
when 500...600
#SupportMailer.support_email.deliver_now
update(code,site,@@elapsed_time,@@times_retried,@@timeout_interval)
end
end
def get_sites
Site.all
end
def update(code,site,time,retried,timeout)
site.update({
status: code,
last_pinged_at: Time.now,
times_retried: retried,
time_out: timeout
})
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment