45 lines
1.3 KiB
Ruby
45 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative '../log/loggable'
|
|
require_relative 'errors'
|
|
require_relative 'publish_schedule'
|
|
require_relative 'process_schedule'
|
|
require_relative 'fetch_schedule'
|
|
|
|
module SchedulePipeline
|
|
# Schedule Processing Pipeline
|
|
class SchedulePipeline
|
|
include Log::Loggable
|
|
|
|
def initialize(queue_factory)
|
|
errors = Errors.new
|
|
processed_schedules_queue = queue_factory.for_name(:processed_schedules)
|
|
publish_schedule = PublishSchedule.new(processed_schedules_queue, errors)
|
|
unprocessed_schedules_queue = queue_factory.for_name(:unprocessed_schedules)
|
|
process_schedule = ProcessSchedule.new(unprocessed_schedules_queue, processed_schedules_queue, errors)
|
|
fetch_schedule_queue = queue_factory.for_name(:fetch_vendor_schedules)
|
|
fetch_schedule = FetchSchedule.new(fetch_schedule_queue, unprocessed_schedules_queue, errors)
|
|
@queues = [processed_schedules_queue, unprocessed_schedules_queue, fetch_schedule_queue]
|
|
@stages = [publish_schedule, process_schedule, fetch_schedule]
|
|
end
|
|
|
|
def start
|
|
stages.each(&:start)
|
|
logger.info "Started Schedule Pipeline"
|
|
end
|
|
|
|
def stop
|
|
stages.reverse_each(&:stop)
|
|
end
|
|
|
|
private
|
|
def stages
|
|
@stages
|
|
end
|
|
|
|
def queues
|
|
@queues
|
|
end
|
|
end
|
|
end
|