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

Modules: Builder, Builders

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

Instance Method Details

#_run_internalObject

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_requiresObject



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

#loggerObject



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.

Returns:

  • (Boolean)


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

#requiresObject

override this method with your specific requirement



14
15
16
# File 'lib/nexus_seed.rb', line 14

def requires
  true
end

#retriesObject

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_limitObject

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

#runObject



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_intervalObject

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 task_options(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