lib/utility/errors.rb (95 lines of code) (raw):

# # Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one # or more contributor license agreements. Licensed under the Elastic License; # you may not use this file except in compliance with the Elastic License. # require 'active_support/core_ext/string' require 'elasticsearch' module Utility class DocumentError attr_accessor :error_class, :error_message, :stack_trace, :error_id def initialize(error_class, error_message, stack_trace, error_id) @error_class = error_class @error_message = error_message @error_id = error_id # keywords must be < 32kb, UTF-8 chars can be up to 3 bytes, thus 32k/3 ~= 10k # See https://github.com/elastic/workplace-search-team/issues/1723 @stack_trace = stack_trace.truncate(10_000) end def to_h { 'error_class' => error_class, 'error_message' => error_message, 'stack_trace' => stack_trace, 'error_id' => error_id } end end class ClientError < StandardError; end class InvalidFilterConfigError < StandardError; end class EvictionWithNoProgressError < StandardError; end class EvictionError < StandardError attr_accessor :cursors def initialize(message = nil, cursors: nil) super(message) @cursors = cursors end end class SuspendedJobError < StandardError attr_accessor :suspend_until, :cursors def initialize(message = nil, suspend_until:, cursors: nil) super(message) @suspend_until = suspend_until @cursors = cursors end end class ThrottlingError < SuspendedJobError; end class TransientServerError < SuspendedJobError; end class UnrecoverableServerError < StandardError; end class TransientSubextractorError < StandardError; end class JobDocumentLimitError < StandardError; end class JobClaimingError < StandardError; end class JobSyncNotPossibleYetError < StandardError attr_accessor :sync_will_be_possible_at def initialize(message = nil, sync_will_be_possible_at: nil) human_readable_errors = [] human_readable_errors.push(message) unless message.nil? human_readable_errors.push("Content source was created too recently to schedule jobs, next job scheduling is possible at #{sync_will_be_possible_at}.") unless sync_will_be_possible_at.nil? super(human_readable_errors.join(' ')) end end class PlatinumLicenseRequiredError < StandardError; end class JobInterruptedError < StandardError; end class JobCannotBeUpdatedError < StandardError; end class SecretInvalidError < StandardError; end class InvalidIndexingConfigurationError < StandardError; end class InvalidTokenError < StandardError; end class TokenRefreshFailedError < StandardError; end class ConnectorNotAvailableError < StandardError; end class AuthorizationError < StandardError; end # For when we want to explicitly set a #cause but can't class ExplicitlyCausedError < StandardError attr_reader :reason def initialize(reason) @reason = reason end end class PublishingFailedError < ExplicitlyCausedError; end class Error attr_reader :status_code, :code, :message def initialize(status_code, code, message) @status_code = status_code @code = code @message = message end def to_h { 'code' => @code, 'message' => @message } end end class HealthCheckFailedError < StandardError def initialize(msg = nil) super("Health check failed for 3rd-party service: #{msg}") end end AUTHORIZATION_ERRORS = [Elastic::Transport::Transport::Errors::Unauthorized] INTERNAL_SERVER_ERROR = Utility::Error.new(500, 'INTERNAL_SERVER_ERROR', 'Internal server error') INVALID_API_KEY = Utility::Error.new(401, 'INVALID_API_KEY', 'Invalid API key') UNSUPPORTED_AUTH_SCHEME = Utility::Error.new(401, 'UNSUPPORTED_AUTH_SCHEME', 'Unsupported authorization scheme') INVALID_ACCESS_TOKEN = Utility::Error.new(401, 'INVALID_ACCESS_TOKEN', 'Invalid/expired access token, please refresh the token') TOKEN_REFRESH_ERROR = Utility::Error.new(401, 'TOKEN_REFRESH_ERROR', 'Failed to refresh token, please re-authenticate the application') end