module Patriot::Tool::PatriotCommands::Validate

validate PBC files

Constants

VALIDATE_SAMPLE_DATE

Public Instance Methods

get_all_job_ids(cmd) click to toggle source
# File lib/patriot/tool/patriot_commands/validate.rb, line 72
def get_all_job_ids(cmd)
  ids = [cmd.job_id]
  if cmd.is_a?(Patriot::Command::CompositeCommand)
    ids |= cmd.instance_variable_get(:@contained_commands).map{|cc| get_all_job_ids(cc)}.flatten
  end
  return ids
end
validate(*paths) click to toggle source
# File lib/patriot/tool/patriot_commands/validate.rb, line 18
def validate(*paths)
  begin
    opts        = symbolize_options(options)
    conf        = {:type => 'validator'}
    conf[:path] = opts[:config] if opts.has_key?(:config)
    config      = load_config(conf)
    # the value of :all is passed to Patriot::Util::Script.get_batch_files(path, opt = {})
    opts = {:all => true, :date => VALIDATE_SAMPLE_DATE}.merge(opts)

    job_store      = Patriot::JobStore::Factory.create_jobstore(Patriot::JobStore::ROOT_STORE_ID, config)
    job_ids        = {}
    invalid_syntax = []
    valid           = true

    parser = Patriot::Tool::BatchParser.new(config)
    parser.process(opts[:date], paths, opts) do |cmd, source|
      unless job_store.acceptable?(cmd.to_job)
        invalid_syntax << "#{command.job_id} in ${source[:path]}"
        valid = false
      end
      get_all_job_ids(cmd).each do |jid|
        if job_ids.has_key?(jid)
          job_ids[jid] << source[:path]
          valid = false
        else
          job_ids[jid] = [source[:path]]
        end
      end
      break if opts[:stop_on_detection] && !valid
    end

    unless valid
      unless invalid_syntax.empty?
        puts "#{invalid_syntax.size} jobs are serialized to invalid syntax:"
        invalid_syntax.each{|i| puts "\ti" }
      end

      # count dupliates
      dup_cnt = job_ids.values.select{|files| files.size > 1}
      unless dup_cnt == 0
        puts "#{dup_cnt} duplications are detected:"
        job_ids.each do |jid, files|
          next if files.size == 1
          puts "#{files.size} #{jid} in "
          files.each{|d| puts "\t#{d} " }
        end
      end
      raise "invalid batch config is detected"
    end
    puts "no invalid config is detected"
  end
end