class Chronicle::ETL::CLI::Jobs

CLI commands for working with ETL jobs

Public Instance Methods

create() click to toggle source

Create an ETL job

# File lib/chronicle/etl/cli/jobs.rb, line 48
def create
  job_definition = build_job_definition(options)
  path = File.join('chronicle', 'etl', 'jobs', options[:name])
  Chronicle::ETL::Config.write(path, job_definition)
end
list() click to toggle source

List available ETL jobs

# File lib/chronicle/etl/cli/jobs.rb, line 63
def list
  jobs = Chronicle::ETL::Config.available_jobs

  job_details = jobs.map do |job|
    r = Chronicle::ETL::Config.load("chronicle/etl/jobs/#{job}.yml")

    extractor = r[:extractor][:name] if r[:extractor]
    transformer = r[:transformer][:name] if r[:transformer]
    loader = r[:loader][:name] if r[:loader]

    [job, extractor, transformer, loader]
  end

  headers = ['name', 'extractor', 'transformer', 'loader'].map{|h| h.upcase.bold }

  table = TTY::Table.new(headers, job_details)
  puts table.render(indent: 0, padding: [0, 2])
end
show() click to toggle source

Show an ETL job

# File lib/chronicle/etl/cli/jobs.rb, line 56
def show
  job_config = build_job_definition(options)
  pp job_config
end
start() click to toggle source
# File lib/chronicle/etl/cli/jobs.rb, line 32
def start
  job_definition = build_job_definition(options)
  job = Chronicle::ETL::Job.new(job_definition)
  runner = Chronicle::ETL::Runner.new(job)
  runner.run!
rescue Chronicle::ETL::ProviderNotAvailableError => e
  warn(e.message.red)
  warn("  Perhaps you haven't installed it yet: `$ gem install chronicle-#{e.provider}`")
  exit(false)
rescue Chronicle::ETL::ConnectorNotAvailableError => e
  warn(e.message.red)
  exit(false)
end

Private Instance Methods

build_job_definition(options) click to toggle source

Create job definition by reading config file and then overwriting with flag options

# File lib/chronicle/etl/cli/jobs.rb, line 85
def build_job_definition(options)
  definition = Chronicle::ETL::JobDefinition.new
  definition.add_config(process_flag_options(options))
  definition.add_config(load_job_config(options[:name]))
  definition
end
load_job_config(name) click to toggle source
# File lib/chronicle/etl/cli/jobs.rb, line 92
def load_job_config name
  Chronicle::ETL::Config.load_job_from_config(name)
end
process_flag_options(options) click to toggle source

Takes flag options and turns them into a runner config

# File lib/chronicle/etl/cli/jobs.rb, line 97
def process_flag_options options
  {
    extractor: {
      name: options[:extractor],
      options: options[:'extractor-opts']
    },
    transformer: {
      name: options[:transformer],
      options: options[:'transformer-opts']
    },
    loader: {
      name: options[:loader],
      options: options[:'loader-opts']
    }
  }
end