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, #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
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.}" 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 |