Sha256: fcbefe05c0db70a2bdff30a83e1d382d380012e6c9da4f0985613fcb84dd6fcd

Contents?: true

Size: 1.66 KB

Versions: 2

Compression:

Stored size: 1.66 KB

Contents

module Dynflow
  module DelayedExecutors
    class AbstractCore < Actor

      include Algebrick::TypeCheck
      attr_reader :world, :logger

      def initialize(world, options = {})
        @world = Type! world, World
        @logger = world.logger
        configure(options)
      end

      def start
        raise NotImplementedError
      end

      def configure(options)
        @time_source = options.fetch(:time_source, -> { Time.now.utc })
      end

      def check_delayed_plans
        raise NotImplementedError
      end

      private

      def time
        @time_source.call()
      end

      def delayed_execution_plans(time)
        with_error_handling([]) do
          world.persistence.find_past_delayed_plans(time)
        end
      end

      def with_error_handling(error_retval = nil, &block)
        block.call
      rescue Exception => e
        @logger.warn e.message
        @logger.debug e.backtrace.join("\n")
        error_retval
      end

      def process(delayed_plans, check_time)
        processed_plan_uuids = []
        delayed_plans.each do |plan|
          with_error_handling do
            if !plan.start_before.nil? && plan.start_before < check_time
              @logger.debug "Failing plan #{plan.execution_plan_uuid}"
              plan.timeout
            else
              @logger.debug "Executing plan #{plan.execution_plan_uuid}"
              plan.plan
              plan.execute
            end
            processed_plan_uuids << plan.execution_plan_uuid
          end
        end
        world.persistence.delete_delayed_plans(:execution_plan_uuid => processed_plan_uuids) unless processed_plan_uuids.empty?
      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dynflow-0.8.36 lib/dynflow/delayed_executors/abstract_core.rb
dynflow-0.8.35 lib/dynflow/delayed_executors/abstract_core.rb