Class: Legion::Extensions::Actors::Every
- Inherits:
-
Object
- Object
- Legion::Extensions::Actors::Every
- 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
- #action(**_opts) ⇒ Object
- #cancel ⇒ Object
-
#initialize(**_opts) ⇒ Every
constructor
A new instance of Every.
- #run_now? ⇒ Boolean
Methods included from Dsl
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, #find_gem_path, #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
Methods included from Helpers::Secret
reset_identity!, resolve_identity!, #secret
Methods included from Helpers::Core
Constructor Details
#initialize(**_opts) ⇒ 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.}" 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 |
#cancel ⇒ Object
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
47 48 49 |
# File 'lib/legion/extensions/actors/every.rb', line 47 def run_now? run_now end |