class TnS3FileUploader::CliParser

Public Instance Methods

parse_cmd_line(args) click to toggle source

Parses the CLI parameters and returns them in a hash Parameters 'host-unique-id', 'log-file-pattern', 's3-dest-folder' and 'partition-pattern' are mandatory and a missing argument exception will be raised if any of them is not provided

# File lib/tn_s3_file_uploader/cli_parser.rb, line 11
def parse_cmd_line(args)
  options = {}
  opts = OptionParser.new do |opts|
    opts.banner = "Usage: tn_s3_file_uploader.rb [options]"

    opts.separator ""
    opts.separator "Specific options:"

    opts.on("-s", "--input-file-pattern INPUT_FILE_PATTERN", "The file pattern to match the source log file") do |file_pattern|
      options[:input_file_pattern] = file_pattern
    end

    opts.on("-o", "--s3-output-pattern S3_OUTPUT_PATTERN", "The S3 destination pattern name."\
        "It accepts macros for building the resulting filename and folder structure. See documentation for details") do |s3_output_pattern|
      options[:s3_output_pattern] = s3_output_pattern
    end

    options[:delete_log_files_flag] = false
    opts.on("-d", "--delete-log-files [DELETE_LOG_FILES]", "The flag for deleting log files"\
        "It is an optional parameter, default is false, decides if log files are deleted after successful upload") do |delete_log_files_flag|
      options[:delete_log_files_flag] = delete_log_files_flag
    end

    options[:fixed_time] = ""
    opts.on("-t", "--fixed-time [FIXED_TIME]", "The time which will be added to generated log name"\
        "It is an optional parameter. Use this argument to override time used to specify the resolution for the timestamp, if this option is not provided the time to use will be script run time.") do |fixed_time|
      options[:fixed_time] = fixed_time
    end

    options[:file_timestamp_resolution] = 300
    opts.on("--file-timestamp-resolution RES", Integer, "The resolution of the destination filename in seconds (positive non-zero integer)") do |file_timestamp_resolution|
      if valid_seconds?(file_timestamp_resolution)
        options[:file_timestamp_resolution] = file_timestamp_resolution
      else
        puts "Warning: negative seconds value given: #{file_timestamp_resolution}, defaulting to 300 (5 minutes)"
      end
    end

    opts.on("--honeybadger-api-key API-KEY", "API key for optional honeybadger error reporting support") do |honeybadger_api_key|
      options[:honeybadger_api_key] = honeybadger_api_key
    end

    opts.on("--aws-access-key-id AWS-ACCESS-KEY-ID", "Provide the AWS access key id.") do |aws_access_key_id|
      options[:aws_access_key_id] = aws_access_key_id
    end

    opts.on("--aws-secret-access-key AWS-SECRET-ACCESS-KEY", "Provide the AWS secret access key") do |aws_secret_access_key|
      options[:aws_secret_access_key] = aws_secret_access_key
    end

    options[:use_ec2_metadata_flag] = true
    opts.on("--use-ec2-metadata [USE_EC2_METADATA]", "The flag for using the ec2 instance metadata endpoint to lookup the local IP."\
        "It is an optional parameter, default is true.") do |use_ec2_metadata|
      options[:use_ec2_metadata_flag] = use_ec2_metadata
    end

    opts.on("-v", "--verbose", "Display verbose output") do |v|
      options[:verbose] = !v.nil?
    end

    opts.separator ""

    opts.on_tail("--version", "Display version number") do
      puts TnS3FileUploader::VERSION
      exit!
    end

    opts.on_tail("-h", "--help", "Show this message") do
      puts opts
      exit!
    end
  end

  opts.parse! args

  check_mandatory options

  options
end

Private Instance Methods

check_mandatory(options) click to toggle source
# File lib/tn_s3_file_uploader/cli_parser.rb, line 93
def check_mandatory(options)
  mandatory_arguments = [:input_file_pattern, :s3_output_pattern]

  missing_arguments = []
  mandatory_arguments.each do |arg|
    missing_arguments << arg.to_s.gsub!('_', '-') if options[arg].nil?
  end

  unless missing_arguments.empty?
    raise OptionParser::MissingArgument,
          "The following mandatory options are missing: #{ missing_arguments.join(', ') }"
  end
end
valid_seconds?(seconds) click to toggle source
# File lib/tn_s3_file_uploader/cli_parser.rb, line 107
def valid_seconds?(seconds)
  seconds > 0
end