lib/connectors/crawler/scheduler.rb (52 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. # # frozen_string_literal: true require 'core/scheduler' require 'core/connector_settings' require 'core/elastic_connector_actions' require 'utility/logger' require 'utility/exception_tracking' module Connectors module Crawler class Scheduler < Core::Scheduler def connector_settings Core::ConnectorSettings.fetch_crawler_connectors || [] rescue StandardError => e Utility::ExceptionTracking.log_exception(e, 'Could not retrieve Crawler connectors due to unexpected error.') [] end def when_triggered loop do time_at_poll_start = Time.now # grab the time right before we iterate over all connectors connector_settings.each do |cs| # crawler only supports :sync if sync_triggered?(cs, time_at_poll_start) yield cs, :sync, nil next end schedule_key = custom_schedule_triggered(cs, time_at_poll_start) yield cs, :sync, schedule_key if schedule_key end rescue *Utility::AUTHORIZATION_ERRORS => e log_authorization_error(e) rescue StandardError => e log_standard_error(e) ensure if @is_shutting_down break end sleep_for_poll_interval end end private def connector_registered?(service_type) service_type == 'elastic-crawler' end # custom scheduling has no ordering, so the first-found schedule is returned def custom_schedule_triggered(cs, time_at_poll_start) cs.custom_scheduling_settings.each do |key, custom_scheduling| identifier = "#{cs.formatted} - #{custom_scheduling[:name]}" if schedule_triggered?(custom_scheduling, identifier, time_at_poll_start) return key end end nil end end end end