Class: Legion::Extensions::Actors::Every

Inherits:
Object
  • Object
show all
Extended by:
Dsl
Includes:
Base, Fingerprint
Defined in:
lib/legion/extensions/actors/every.rb

Constant Summary

Constants included from Helpers::Base

Helpers::Base::NAMESPACE_BOUNDARIES

Instance Method Summary collapse

Methods included from Dsl

define_dsl_accessor

Methods included from Fingerprint

#compute_fingerprint, #fingerprint_source, #skip_if_unchanged?, #skip_or_run, #store_fingerprint!, #unchanged?

Methods included from Base

#args, #check_subtask?, #enabled?, #function, #generate_task?, included, #manual, #remote_invocable?, #runner, #use_runner?

Methods included from Helpers::Lex

#default_settings, included, #runner_desc

Methods included from Helpers::Base

#actor_class, #actor_const, #actor_name, #amqp_prefix, #calling_class, #calling_class_array, #from_json, #full_path, #lex_class, #lex_const, #lex_name, #lex_slug, #log_tag, #normalize, #runner_class, #runner_const, #runner_name, #segments, #settings_path, #table_prefix, #to_dotted_hash

Methods included from Helpers::Task

#generate_task_id, #generate_task_log, #task_update

Methods included from Helpers::Logger

#handle_runner_exception

Methods included from Helpers::Secret

reset_identity!, resolve_identity!, #secret

Methods included from Helpers::Core

#find_setting

Constructor Details

#initialize(**_opts) ⇒ Every

Returns a new instance of Every.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/legion/extensions/actors/every.rb', line 19

def initialize(**_opts)
  @executing = Concurrent::AtomicBoolean.new(false)
  @timer = Concurrent::TimerTask.new(execution_interval: time, run_now: run_now?) do
    if @executing.make_true
      begin
        log.debug "[Every] tick: #{self.class}" if defined?(log)
        skip_or_run { use_runner? ? runner : manual }
      rescue StandardError => e
        log.error "[Every] tick failed for #{self.class}: #{e.class}: #{e.message}" if defined?(log)
        handle_exception(e) if defined?(log)
      ensure
        @executing.make_false
      end
    elsif defined?(log)
      log.debug "[Every] skipped (previous still running): #{self.class}"
    end
  end

  initial_delay = respond_to?(:delay) ? delay.to_f : 0
  if initial_delay.positive?
    Concurrent::ScheduledTask.execute(initial_delay) { @timer.execute }
  else
    @timer.execute
  end
rescue StandardError => e
  handle_exception(e)
end

Instance Method Details

#action(**_opts) ⇒ Object



51
52
53
# File 'lib/legion/extensions/actors/every.rb', line 51

def action(**_opts)
  log.warn 'An extension is using the default block from Legion::Extensions::Runners::Every'
end

#cancelObject



55
56
57
58
59
60
61
62
# File 'lib/legion/extensions/actors/every.rb', line 55

def cancel
  log.debug 'Cancelling Legion Timer'
  return true unless @timer.respond_to?(:shutdown)

  @timer.shutdown
rescue StandardError => e
  handle_exception(e)
end

#run_now?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/legion/extensions/actors/every.rb', line 47

def run_now?
  run_now
end