Created
July 27, 2017 15:12
-
-
Save t0nylombardi/73d89eac27c28e48b905e5454dc44d06 to your computer and use it in GitHub Desktop.
Core code for site-sight
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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