# coding: utf-8 module Dag module CLI class Command < Base class_option :version, type: :string, banner: '', aliases: '-v', desc: "Show version" class_option :config, type: :string, default: "#{Dir.home}/.dag/credential.json", aliases: '-C', desc: "Path to the config file", banner: "/path/to/file" class_option :debug, type: :boolean, desc: "Show debug message" class_option :trace, type: :boolean, desc: "Show error stacktrace", hide: true def initialize(args = [], local_options = {}, config = {}) super handle_version_request! if options.key?("version") end desc 'account', 'Show account info' def account fields = [:apikey, :analysis_api, :storage_api] terminal_table([client], fields: fields) end desc 'import [DB] [TABLE]', 'Upload files and convert into analysis format' option 'import-files', type: :array, aliases: '-i', desc: 'import files', required: true option :format, type: :string, aliases: '-f', desc: 'file format [json_agent/json/csv/tsv]', required: true option :label, type: :string, aliases: '-l', desc: 'label' option :jobs, type: :numeric, aliases: '-j', desc: 'jobs' def import(db, table) params = {} params.merge!({ label: options[:label] }) if options[:label] params.merge!({ jobs: options[:jobs] }) if options[:jobs] import = Import.new(open_client, db, table, options['import-files'], options[:format], params) handle_api_failure { import.execute } end desc 'query "[QUERY_STRING]"', 'Execute Hive Query' option :output, type: :string, aliases: '-o', desc: 'output storage path', required: true option :format, type: :string, aliases: '-f', desc: 'output format [csv/tsv]', default: 'csv' option :label, type: :string, aliases: '-l', desc: 'job label' option :wait, type: :boolean, aliases: '-w', desc: 'wait job finish' def query(query_string) if File.exists? query_string query_string = open(query_string).read puts "Query: #{query_string}" end params = { query: query_string, output_format: options[:format], output_resource_path: options[:output] } params.merge!(label: options[:label]) if options[:label] query = Query.new(open_client, params) job = handle_api_failure { query.execute } say_status "accepted job", "job_id: #{job.id}" if options[:wait] CLI::Command.start(["job", "log", job.id.to_s, "-t"]) CLI::Command.start(["job", "result", job.id.to_s]) end end %w(cluster db table job bucket).each do |cmd| desc "#{cmd} [COMMAND]", "Management command for #{cmd}" subcommand cmd, Dag::CLI.const_get(cmd.capitalize) end desc 'help [COMMAND]', 'Describe available commands or one specific command' def help(command = nil, subcommand = false) super shell.say "Type 'dag help [COMMAND]' for more information on a specific command" end private def handle_version_request! require 'dag/cli/version' require 'dag/client/version' print_table [["dag-ruby", VERSION], ["dag-client-ruby", Dag::Client::VERSION]] exit 0 end end end end