Class: Core::ConnectorSettings

Inherits:
Object
  • Object
show all
Defined in:
lib/core/connector_settings.rb

Defined Under Namespace

Classes: ConnectorNotFoundError

Constant Summary collapse

DEFAULT_REQUEST_PIPELINE =
'ent-search-generic-ingestion'
DEFAULT_EXTRACT_BINARY_CONTENT =
true
DEFAULT_REDUCE_WHITESPACE =
true
DEFAULT_RUN_ML_INFERENCE =
true
DEFAULT_FILTERING =
{}
DEFAULT_PAGE_SIZE =
100

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(es_response, connectors_meta) ⇒ ConnectorSettings

Returns a new instance of ConnectorSettings.



37
38
39
40
# File 'lib/core/connector_settings.rb', line 37

def initialize(es_response, connectors_meta)
  @elasticsearch_response = es_response.with_indifferent_access
  @connectors_meta = connectors_meta.with_indifferent_access
end

Class Method Details

.fetch_by_id(connector_id) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/core/connector_settings.rb', line 29

def self.fetch_by_id(connector_id)
  es_response = ElasticConnectorActions.get_connector(connector_id)
  connectors_meta = ElasticConnectorActions.connectors_meta

  raise ConnectorNotFoundError.new("Connector with id=#{connector_id} was not found.") unless es_response[:found]
  new(es_response, connectors_meta)
end

.fetch_connectors_by_query(query, page_size) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/core/connector_settings.rb', line 119

def self.fetch_connectors_by_query(query, page_size)
  connectors_meta = ElasticConnectorActions.connectors_meta

  results = []
  offset = 0
  loop do
    response = ElasticConnectorActions.search_connectors(query, page_size, offset)

    hits = response.dig('hits', 'hits') || []
    total = response.dig('hits', 'total', 'value') || 0
    results += hits.map do |hit|
      Core::ConnectorSettings.new(hit, connectors_meta)
    end
    break if results.size >= total
    offset += hits.size
  end

  results
end

.fetch_crawler_connectors(page_size = DEFAULT_PAGE_SIZE) ⇒ Object



47
48
49
50
# File 'lib/core/connector_settings.rb', line 47

def self.fetch_crawler_connectors(page_size = DEFAULT_PAGE_SIZE)
  query = { term: { service_type: Utility::Constants::CRAWLER_SERVICE_TYPE } }
  fetch_connectors_by_query(query, page_size)
end

.fetch_native_connectors(page_size = DEFAULT_PAGE_SIZE) ⇒ Object



42
43
44
45
# File 'lib/core/connector_settings.rb', line 42

def self.fetch_native_connectors(page_size = DEFAULT_PAGE_SIZE)
  query = { term: { is_native: true } }
  fetch_connectors_by_query(query, page_size)
end

Instance Method Details

#[](property_name) ⇒ Object



56
57
58
59
# File 'lib/core/connector_settings.rb', line 56

def [](property_name)
  # TODO: handle not found
  @elasticsearch_response[:_source][property_name]
end

#configurationObject



77
78
79
# File 'lib/core/connector_settings.rb', line 77

def configuration
  self[:configuration]
end

#connector_statusObject



65
66
67
# File 'lib/core/connector_settings.rb', line 65

def connector_status
  self[:status]
end

#connector_status_allows_sync?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'lib/core/connector_settings.rb', line 69

def connector_status_allows_sync?
  Connectors::ConnectorStatus::STATUSES_ALLOWING_SYNC.include?(connector_status)
end

#extract_binary_content?Boolean

Returns:

  • (Boolean)


93
94
95
# File 'lib/core/connector_settings.rb', line 93

def extract_binary_content?
  Utility::Common.return_if_present(@elasticsearch_response.dig(:pipeline, :extract_binary_content), @connectors_meta.dig(:pipeline, :default_extract_binary_content), DEFAULT_EXTRACT_BINARY_CONTENT)
end

#filteringObject



85
86
87
# File 'lib/core/connector_settings.rb', line 85

def filtering
  Utility::Common.return_if_present(@elasticsearch_response[:filtering], DEFAULT_FILTERING)
end

#formattedObject



105
106
107
108
109
# File 'lib/core/connector_settings.rb', line 105

def formatted
  properties = ["ID: #{id}"]
  properties << "Service type: #{service_type}" if service_type
  "connector (#{properties.join(', ')})"
end

#idObject



52
53
54
# File 'lib/core/connector_settings.rb', line 52

def id
  @elasticsearch_response[:_id]
end

#index_nameObject



61
62
63
# File 'lib/core/connector_settings.rb', line 61

def index_name
  self[:index_name]
end

#needs_service_type?Boolean

Returns:

  • (Boolean)


111
112
113
# File 'lib/core/connector_settings.rb', line 111

def needs_service_type?
  service_type.to_s.strip.empty?
end

#reduce_whitespace?Boolean

Returns:

  • (Boolean)


97
98
99
# File 'lib/core/connector_settings.rb', line 97

def reduce_whitespace?
  Utility::Common.return_if_present(@elasticsearch_response.dig(:pipeline, :reduce_whitespace), @connectors_meta.dig(:pipeline, :default_reduce_whitespace), DEFAULT_REDUCE_WHITESPACE)
end

#request_pipelineObject



89
90
91
# File 'lib/core/connector_settings.rb', line 89

def request_pipeline
  Utility::Common.return_if_present(@elasticsearch_response.dig(:pipeline, :name), @connectors_meta.dig(:pipeline, :default_name), DEFAULT_REQUEST_PIPELINE)
end

#run_ml_inference?Boolean

Returns:

  • (Boolean)


101
102
103
# File 'lib/core/connector_settings.rb', line 101

def run_ml_inference?
  Utility::Common.return_if_present(@elasticsearch_response.dig(:pipeline, :run_ml_inference), @connectors_meta.dig(:pipeline, :default_run_ml_inference), DEFAULT_RUN_ML_INFERENCE)
end

#scheduling_settingsObject



81
82
83
# File 'lib/core/connector_settings.rb', line 81

def scheduling_settings
  self[:scheduling]
end

#service_typeObject



73
74
75
# File 'lib/core/connector_settings.rb', line 73

def service_type
  self[:service_type]
end

#valid_index_name?Boolean

Returns:

  • (Boolean)


115
116
117
# File 'lib/core/connector_settings.rb', line 115

def valid_index_name?
  index_name&.start_with?(Utility::Constants::CONTENT_INDEX_PREFIX)
end