Sha256: 66fbdefcaf28e4024bc7980a5ec772851e5361e5ce230996fa23c942799d2cb7

Contents?: true

Size: 1.48 KB

Versions: 17

Compression:

Stored size: 1.48 KB

Contents

# frozen_string_literal: true

##
# This module is responsible to set up a new thread
# for each cron job defined
class CronRunner
  def initialize(macaw)
    @logger = macaw.macaw_log
    @macaw = macaw
  end

  ##
  # Will start a thread for the defined cron job
  # @param {Integer} interval
  # @param {Integer?} start_delay
  # @param {String} job_name
  # @param {Proc} block
  def start_cron_job_thread(interval, start_delay, job_name, &block)
    start_delay ||= 0
    raise "interval can't be <= 0 and start_delay can't be < 0!" if interval <= 0 || start_delay.negative?

    @logger&.info("Starting thread for job #{job_name}")
    start_delay ||= 0
    thread = Thread.new do
      name = job_name
      interval_thread = interval
      unless start_delay.nil?
        @logger&.info("Job #{name} scheduled with delay. Will start running in #{start_delay} seconds.")
        sleep(start_delay)
      end

      loop do
        start_time = Time.now
        @logger&.info("Running job #{name}")
        block.call
        @logger&.info("Job #{name} executed with success. New execution in #{interval_thread} seconds.")

        execution_time = Time.now - start_time
        sleep_time = [interval_thread - execution_time, 0].max
        sleep(sleep_time)
      rescue StandardError => e
        @logger&.error("Error executing cron job with name #{name}: #{e.message}")
        sleep(interval)
      end
    end
    sleep(1)
    @logger&.info("Thread for job #{job_name} started")
    thread
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
macaw_framework-1.3.21 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.3.1 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.3.0 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.2.6 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.2.5 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.2.4 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.2.3 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.2.2 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.2.1 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.2.0 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.1.8 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.1.7 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.1.6 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.1.5 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.1.4 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.1.3 lib/macaw_framework/core/cron_runner.rb
macaw_framework-1.1.2 lib/macaw_framework/core/cron_runner.rb