class ZuoraConnect::AppInstanceBase
def set_timezone(timezone: self.timezone, type: :default)
def set_timezone(timezone: self.timezone, type: :default) if timezone.blank? timezone = self.timezone end if type == :default Time.zone = timezone elsif type == :user begin sql = <<-eos SELECT zuora_users.zuora_identity_response FROM "#{self.id}".zuora_users ORDER BY zuora_users.updated_at DESC LIMIT 1; eos user = ActiveRecord::Base.connection.execute(sql).to_a.first if user.present? zuora_identity_response = JSON.parse(user.fetch('zuora_identity_response', '{}')) self.user_timezone = zuora_identity_response.values.first&.dig('timeZone') else if (Redis.current.hget(TIMEZONE_LOG_RATE_LIMIT_KEY, self.id).to_i + TIMEZONE_LOG_PERIOD.to_i) <= Time.now.to_i Rails.logger.error('Cannot find any user to set the timezone', app_instance_id: self.id) Redis.current.hset(TIMEZONE_LOG_RATE_LIMIT_KEY, self.id, Time.now.to_i) end end rescue => ex Rails.logger.error('There is an error while getting timezone users', ex) end if self.user_timezone.present? # connect instance which has a custom timezone if !self.auto_deployed? && ( ActiveSupport::TimeZone[self.task_data.dig('user_settings', 'timezone') || '']&.utc_offset != ActiveSupport::TimeZone[self.user_timezone]&.utc_offset ) if self.environment == 'Production' && (Redis.current.hget(TIMEZONE_LOG_RATE_LIMIT_KEY, self.id).to_i + TIMEZONE_LOG_PERIOD.to_i) <= Time.now.to_i ZuoraConnect.logger.error( "Instance and user timezones are different. User has '#{self.user_timezone}' and " \ "instance has '#{self.task_data.dig('user_settings', 'timezone')}'", app_instance_id: self.id ) Redis.current.hset(TIMEZONE_LOG_RATE_LIMIT_KEY, self.id, Time.now.to_i) end self.user_timezone = nil Time.zone = timezone else begin Time.zone = self.user_timezone rescue ArgumentError Rails.logger.error('Malformed user timezone', app_instance_id: self.id) Time.zone = timezone end end else Time.zone = timezone end end rescue => e Rails.logger.error('Malformed timezone used', e, app_instance_id: self.id) Time.zone = self.timezone end