class ZuoraConnect::AppInstanceBase

def refresh(session = nil)

def refresh(session = nil)
  refresh_count ||= 0
  error_type = ""
  start = Time.now
  response = HTTParty.get(ZuoraConnect.configuration.url + "/api/#{self.api_version}/tools/tasks/#{self.id}.json",:body => {:access_token => self.access_token})
  response_time = Time.now - start
  Rails.logger.debug("[#{self.id}] REFRESH TASK - Connect Task Info Request Time #{response_time.round(2).to_s}")
  if response.code == 200
    build_task(JSON.parse(response.body), session)
    @last_refresh = Time.now.to_i
    self.cache_app_instance
    self.reset_mark_for_refresh
  else
    Rails.logger.fatal("[#{self.id}] REFRESH TASK - Failed Code #{response.code}")
    raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error Communicating with Connect", response.body, response.code)
  end
rescue Net::ReadTimeout, Net::OpenTimeout, Errno::EPIPE, Errno::ECONNRESET, Errno::ECONNREFUSED, SocketError => ex
  if (refresh_count += 1) < 3
    Rails.logger.info("[#{self.id}] REFRESH TASK - #{ex.class} Retrying(#{refresh_count})")
    retry
  else
    error_type = "#{ex.class}"
    Rails.logger.fatal("[#{self.id}] REFRESH TASK - #{ex.class} Failed #{refresh_count}x")
    raise
  end
rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex
  if (refresh_count += 1) < 3
    Rails.logger.info("[#{self.id}] REFRESH TASK - Failed Retrying(#{refresh_count})")
    if ex.code == 401
      self.refresh_oauth
    end
    retry
  else
    error_type = "#{ex.class}"
    Rails.logger.fatal("[#{self.id}] REFRESH TASK - Failed #{refresh_count}x")
    raise
  end
ensure
  # Writing to telegraf
  status_code = response.code if response
  endpoint_name = URI(ZuoraConnect.configuration.url).host
  Thread.current[:appinstance].present? ? app_instance = Thread.current[:appinstance].id : app_instance = 0
  ZuoraConnect::AppInstanceBase.write_to_telegraf("response_time": response_time, "status_code": status_code, "endpoint_name": endpoint_name, "direction": "outbound", "error_type": error_type, "function_name": "#{self.class}##{__method__}", "method_name": "GET", "app_instance": app_instance)
end