Module: NexusSeed
- Defined in:
- lib/nexus_seed.rb,
lib/nexus_seed/builder.rb,
lib/nexus_seed/version.rb,
lib/nexus_seed/builder/base.rb
Defined Under Namespace
Constant Summary collapse
- VERSION =
Leave this as 0.2.27 in order for CI process to replace with the tagged version.
'0.2.27'- @@retry_limit =
defaults
12- @@sleep_interval =
5- @@retries =
0
Instance Method Summary collapse
-
#_run_internal ⇒ Object
recursively called until requirement is met or the limit is reached.
- #_try_requires ⇒ Object
- #logger ⇒ Object
-
#port_open?(host, port) ⇒ Boolean
Commonly used by seed tasks to see if a service is available.
-
#requires ⇒ Object
override this method with your specific requirement.
-
#retries ⇒ Object
retry limit.
- #retries=(retries) ⇒ Object
-
#retry_limit ⇒ Object
retry limit.
- #retry_limit=(limit) ⇒ Object
- #run ⇒ Object
-
#sleep_interval ⇒ Object
sleep interval.
- #sleep_interval=(seconds) ⇒ Object
- #task_options(opts = {}) ⇒ Object
Instance Method Details
#_run_internal ⇒ Object
recursively called until requirement is met or the limit is reached
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/nexus_seed.rb', line 33 def _run_internal if Rails.env.test? || Rails.env.development? logger.info("Starting run attempt #{retries + 1}") if _try_requires seed NexusSeed::Builder.seed_report if ENV['NEXUS_SEED_DESTROY'] == 'true' NexusSeed::Builder.destroy_seeds end elsif retries >= retry_limit && retry_limit != 0 # log error stating seeding could not complete and task details logger.warn('Retry limit reached.') abort('Seed task timeout.') else # Increment retries and sleep- note the sleep back off as retries increase. self.retries = retries + 1 sleep_for = sleep_interval * retries logger.warn('Requires failed, waiting for retry.', sleep: sleep_for, interval: sleep_interval, retries: retries) sleep(sleep_for) # Retry run after sleeping. logger.warn("Retrying after #{sleep_for}s. Retry #{retries} of #{retry_limit}") _run_internal end else logger.error('Will not seed in this rails env.', env: Rails.env) abort('Seed task incorrect environment.') end rescue => e logger.error('Error during seed task.', exception: e) abort('Seed task error.') end |
#_try_requires ⇒ Object
25 26 27 28 29 30 |
# File 'lib/nexus_seed.rb', line 25 def _try_requires requires rescue => e logger.error('Requires failed.', exception: e) false end |
#logger ⇒ Object
100 101 102 |
# File 'lib/nexus_seed.rb', line 100 def logger @logger ||= SemanticLogger::Logger.new('NexusSeed') end |
#port_open?(host, port) ⇒ Boolean
Commonly used by seed tasks to see if a service is available.
110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/nexus_seed.rb', line 110 def port_open?(host, port) Timeout.timeout(1) do socket = TCPSocket.new(host, port) socket.close return true rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH return false end rescue Timeout::Error false end |
#requires ⇒ Object
override this method with your specific requirement
14 15 16 |
# File 'lib/nexus_seed.rb', line 14 def requires true end |
#retries ⇒ Object
retry limit
71 72 73 |
# File 'lib/nexus_seed.rb', line 71 def retries @@retries end |
#retries=(retries) ⇒ Object
96 97 98 |
# File 'lib/nexus_seed.rb', line 96 def retries=(retries) @@retries = retries end |
#retry_limit ⇒ Object
retry limit
81 82 83 |
# File 'lib/nexus_seed.rb', line 81 def retry_limit @@retry_limit end |
#retry_limit=(limit) ⇒ Object
85 86 87 |
# File 'lib/nexus_seed.rb', line 85 def retry_limit=(limit) @@retry_limit = limit end |
#run ⇒ Object
18 19 20 21 22 23 |
# File 'lib/nexus_seed.rb', line 18 def run logger.info('Run with options:', limit: retry_limit, interval: sleep_interval) logger.measure_info('Total seed run.') do _run_internal end end |
#sleep_interval ⇒ Object
sleep interval
76 77 78 |
# File 'lib/nexus_seed.rb', line 76 def sleep_interval @@sleep_interval end |
#sleep_interval=(seconds) ⇒ Object
89 90 91 92 93 94 |
# File 'lib/nexus_seed.rb', line 89 def sleep_interval=(seconds) # nope return if seconds.to_i == 0 @@sleep_interval = seconds end |
#task_options(opts = {}) ⇒ Object
104 105 106 107 |
# File 'lib/nexus_seed.rb', line 104 def (opts = {}) self.retry_limit = opts[:retry_limit].to_i unless opts[:retry_limit].nil? self.sleep_interval = opts[:sleep_interval].to_i unless opts[:sleep_interval].nil? end |