Class: Connectors::Base::Connector

Inherits:
Object
  • Object
show all
Defined in:
lib/connectors/base/connector.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(configuration: {}, job_description: nil) ⇒ Connector

Returns a new instance of Connector.



83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/connectors/base/connector.rb', line 83

def initialize(configuration: {}, job_description: nil)
  error_monitor = Utility::ErrorMonitor.new
  @tolerable_error_helper = Connectors::TolerableErrorHelper.new(error_monitor)

  @configuration = job_description&.configuration&.dup || configuration&.dup || {}
  @job_description = job_description&.dup

  filter = Utility::Filtering.extract_filter(@job_description&.filtering)
  filter = Core::Filtering::Transform::FilterTransformerFacade.new(filter, self.class.filter_transformers).transform

  @rules = filter[:rules] || []
  # regression bug, we need to keep indifferent access here until we get rid of symbols in the connectors
  @advanced_filter_config = filter[:advanced_snippet]&.with_indifferent_access || {}
end

Instance Attribute Details

#advanced_filter_configObject (readonly)

Returns the value of attribute advanced_filter_config.



81
82
83
# File 'lib/connectors/base/connector.rb', line 81

def advanced_filter_config
  @advanced_filter_config
end

#rulesObject (readonly)

Returns the value of attribute rules.



81
82
83
# File 'lib/connectors/base/connector.rb', line 81

def rules
  @rules
end

Class Method Details

.advanced_snippet_validatorsObject



52
53
54
# File 'lib/connectors/base/connector.rb', line 52

def self.advanced_snippet_validators
  Core::Filtering::AdvancedSnippet::AdvancedSnippetValidator
end

.configurable_fieldsObject



37
38
39
# File 'lib/connectors/base/connector.rb', line 37

def self.configurable_fields
  {}
end

.configurable_fields_indifferent_accessObject

Used as a framework util method, don’t override



33
34
35
# File 'lib/connectors/base/connector.rb', line 33

def self.configurable_fields_indifferent_access
  configurable_fields.with_indifferent_access
end

.display_nameObject



28
29
30
# File 'lib/connectors/base/connector.rb', line 28

def self.display_name
  raise 'Not implemented for this connector'
end

.filter_transformersObject



65
66
67
68
69
70
# File 'lib/connectors/base/connector.rb', line 65

def self.filter_transformers
  {
    Core::Filtering::Transform::TransformationTarget::ADVANCED_SNIPPET => [],
    Core::Filtering::Transform::TransformationTarget::RULES => []
  }
end

.kibana_featuresObject



45
46
47
48
49
50
# File 'lib/connectors/base/connector.rb', line 45

def self.kibana_features
  [
    { :feature => :sync_rules, :subfeature => :basic, :enabled => true },
    { :feature => :sync_rules, :subfeature => :advanced, :enabled => true }
  ]
end

.service_typeObject



41
42
43
# File 'lib/connectors/base/connector.rb', line 41

def self.service_type
  raise 'Not implemented for this connector'
end

.simple_rules_validatorsObject



56
57
58
59
60
61
62
63
# File 'lib/connectors/base/connector.rb', line 56

def self.simple_rules_validators
  {
    Core::Filtering::ProcessingStage::ALL => [
      Core::Filtering::SimpleRules::Validation::SingleRuleAgainstSchemaValidator,
      Core::Filtering::SimpleRules::Validation::NoConflictingPoliciesRulesValidator
    ]
  }
end

.validate_filtering(filtering = {}) ⇒ Object



72
73
74
75
76
77
78
79
# File 'lib/connectors/base/connector.rb', line 72

def self.validate_filtering(filtering = {})
  filter = Utility::Filtering.extract_filter(filtering)

  filter_validator = Core::Filtering::FilterValidator.new(snippet_validator_classes: advanced_snippet_validators,
                                                          rules_validator_classes: simple_rules_validators,
                                                          rules_pre_processing_active: Utility::Filtering.rule_pre_processing_active?(filter))
  filter_validator.is_filter_valid(filter)
end

Instance Method Details

#do_health_checkObject



104
105
106
# File 'lib/connectors/base/connector.rb', line 104

def do_health_check
  raise 'Not implemented for this connector'
end

#do_health_check!Object



108
109
110
111
112
113
# File 'lib/connectors/base/connector.rb', line 108

def do_health_check!
  do_health_check
rescue StandardError => e
  Utility::ExceptionTracking.log_exception(e, "Connector for service #{self.class.service_type} failed the health check for 3rd-party service.")
  raise Utility::HealthCheckFailedError.new, e.message
end

#is_healthy?Boolean

Returns:

  • (Boolean)


115
116
117
118
119
120
121
122
# File 'lib/connectors/base/connector.rb', line 115

def is_healthy?
  do_health_check

  true
rescue StandardError => e
  Utility::ExceptionTracking.log_exception(e, "Connector for service #{self.class.service_type} failed the health check for 3rd-party service.")
  false
end

#metadataObject



124
125
126
# File 'lib/connectors/base/connector.rb', line 124

def 
  {}
end

#yield_documentsObject



98
# File 'lib/connectors/base/connector.rb', line 98

def yield_documents; end

#yield_with_handling_tolerable_errors(identifier: nil, &block) ⇒ Object



100
101
102
# File 'lib/connectors/base/connector.rb', line 100

def yield_with_handling_tolerable_errors(identifier: nil, &block)
  @tolerable_error_helper.yield_single_document(identifier: identifier, &block)
end