Files
old-vendor-scheduler-service/app/services/schedule_pipeline/schedule_pipeline.rb
2022-03-23 05:44:42 +01:00

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