class ZuoraConnect::AppInstanceBase
def refresh(session: {}, session_fallback: false)
def refresh(session: {}, session_fallback: false) refresh_count ||= 0 skip_connect ||= false #Check how app was deployed if self.id < 25000000 && !skip_connect 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 ZuoraConnect.logger.debug("REFRESH TASK - Connect Task Info Request Time #{response_time.round(2).to_s}", self.default_ougai_items) if response.code == 200 begin parsed_json = JSON.parse(response.body) rescue JSON::ParserError => ex raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("JSON parse error", response.body, response.code) end self.build_task(task_data: parsed_json, session: session) if self.kms_key.present? begin parsed_json.delete('applications') parsed_json.delete('tokens') self.zuora_logins = parsed_json self.save(:validate => false) rescue Aws::KMS::Errors::ValidationException, *AWS_AUTH_ERRORS => ex Rails.logger.warn(AWS_AUTH_ERRORS_MSG, ex) rescue => ex Rails.logger.error(AWS_AUTH_ERRORS_MSG, ex) end end else raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error Communicating with Connect", response.body, response.code) end else self.build_task(task_data: self.zuora_logins, session: session) end self.last_refresh = Time.now.to_i self.cache_app_instance self.reset_mark_for_refresh rescue *(ZuoraAPI::Login::CONNECTION_EXCEPTIONS + ZuoraAPI::Login::CONNECTION_READ_EXCEPTIONS) => ex refresh_count += 1 if refresh_count < 3 sleep(10) ZuoraConnect.logger.debug("REFRESH TASK - Connection Failure Retrying(#{refresh_count})", ex, self.default_ougai_items) retry elsif refresh_count < 4 && self['zuora_logins'].present? ZuoraConnect.logger.warn("REFRESH TASK - Fallback to local encrypted store", ex, self.default_ougai_items) skip_connect = true retry else ZuoraConnect.logger.fatal("REFRESH TASK - Connection Failed", ex, self.default_ougai_items) raise end rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex refresh_count += 1 if refresh_count < 3 ZuoraConnect.logger.debug("REFRESH TASK - Communication Failure Retrying(#{refresh_count})", ex, self.default_ougai_items) if ex.code == 401 self.refresh_oauth end retry elsif refresh_count < 4 && self['zuora_logins'].present? ZuoraConnect.logger.warn("REFRESH TASK - Fallback to local encrypted store", ex, self.default_ougai_items) skip_connect = true retry else ZuoraConnect.logger.fatal("REFRESH TASK - Communication Failed #{ex.code}", ex, self.default_ougai_items) raise end end