class Morpheus::Cli::LogSettingsCommand

Public Instance Methods

add_syslog_rule(args) click to toggle source
# File lib/morpheus/cli/commands/log_settings_command.rb, line 334
def add_syslog_rule(args)
  options = {}

  optparse = Morpheus::Cli::OptionParser.new do |opts|
    opts.banner = opts.banner = subcommand_usage("[name] [rule]")
    build_common_options(opts, options, [:json, :payload, :dry_run, :quiet, :remote])
    opts.footer = "Add syslog rule.\n" +
        "[name] is required. If syslog already exists, the specified rule will be updated\n" +
        "[rule] is required"
  end

  optparse.parse!(args)
  connect(options)
  if args.count != 2
    raise_command_error "wrong number of arguments, expected 2 and got (#{args.count}) #{args}\n#{optparse}"
    return 1
  end

  begin
    payload = parse_payload(options)

    if !payload
      payload = {'syslogRule' => {'name' => args[0], 'rule' => args[1]}}
    end

    @log_settings_interface.setopts(options)
    if options[:dry_run]
      print_dry_run @log_settings_interface.dry.add_syslog_rule(payload)
      return
    end
    json_response = @log_settings_interface.add_syslog_rule(payload)

    if options[:json]
      puts as_json(json_response, options)
    elsif !options[:quiet]
      if json_response['success']
        print_green_success  "Syslog rule added"
        get([] + (options[:remote] ? ["-r",options[:remote]] : []))
      else
        print_red_alert "Error adding syslog rule: #{json_response['msg'] || json_response['errors']}"
      end
    end
    return 0

  rescue RestClient::Exception => e
    print_rest_exception(e, options)
    exit 1
  end
end
connect(opts) click to toggle source
# File lib/morpheus/cli/commands/log_settings_command.rb, line 16
def connect(opts)
  @api_client = establish_remote_appliance_connection(opts)
  @log_settings_interface = @api_client.log_settings
end
disable_integration(args) click to toggle source
# File lib/morpheus/cli/commands/log_settings_command.rb, line 244
def disable_integration(args)
  print_error yellow,"[DEPRECATED] The command `#{command_name} disable-integration` is deprecated.",reset,"\n"
  options = {}

  optparse = Morpheus::Cli::OptionParser.new do |opts|
    opts.banner = opts.banner = subcommand_usage("[name]")
    build_common_options(opts, options, [:json, :dry_run, :quiet, :remote])
    opts.footer = "Disabled specifed integration.\n" +
        "[name] is required. Currently supports splunk and logrhythm integrations."
  end

  optparse.parse!(args)
  connect(options)
  if args.count != 1
    raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args}\n#{optparse}"
    return 1
  end

  begin
    payload = {'integration' => {'enabled' => false}}

    @log_settings_interface.setopts(options)
    if options[:dry_run]
      print_dry_run @log_settings_interface.dry.update_integration(args[0], payload)
      return
    end
    json_response = @log_settings_interface.update_integration(args[0], payload)

    if options[:json]
      puts as_json(json_response, options)
    elsif !options[:quiet]
      if json_response['success']
        print_green_success  "Integration removed"
        get([] + (options[:remote] ? ["-r",options[:remote]] : []))
      else
        print_red_alert "Error disabling integration: #{json_response['msg'] || json_response['errors']}"
      end
    end
    return 0

  rescue RestClient::Exception => e
    print_rest_exception(e, options)
    exit 1
  end
end
enable_integration(args) click to toggle source
# File lib/morpheus/cli/commands/log_settings_command.rb, line 189
def enable_integration(args)
  print_error yellow,"[DEPRECATED] The command `#{command_name} enable-integration` is deprecated.",reset,"\n"
  options = {}

  optparse = Morpheus::Cli::OptionParser.new do |opts|
    opts.banner = opts.banner = subcommand_usage("[name] [host] [port]")
    build_common_options(opts, options, [:json, :payload, :dry_run, :quiet, :remote])
    opts.footer = "Enables specifed integration.\n" +
        "[name] is required. Currently supports splunk and logrhythm integrations.\n" +
        "[host] is required. Host of the integration.\n" +
        "[port] is required. Port of the integration."
  end

  optparse.parse!(args)
  connect(options)
  if args.count != 3
    raise_command_error "wrong number of arguments, expected 3 and got (#{args.count}) #{args}\n#{optparse}"
    return 1
  end
  if !args[2].to_i
    raise_command_error "port argument must be a number"
  end

  begin
    payload = parse_payload(options)

    if !payload
      payload = {'integration' => {'enabled' => true, 'host' => args[1], 'port' => args[2]}}
    end

    @log_settings_interface.setopts(options)
    if options[:dry_run]
      print_dry_run @log_settings_interface.dry.update_integration(args[0], payload)
      return
    end
    json_response = @log_settings_interface.update_integration(args[0], payload)

    if options[:json]
      puts as_json(json_response, options)
    elsif !options[:quiet]
      if json_response['success']
        print_green_success  "Integration added"
        get([] + (options[:remote] ? ["-r",options[:remote]] : []))
      else
        print_red_alert "Error enabling integration: #{json_response['msg'] || json_response['errors']}"
      end
    end
    return 0

  rescue RestClient::Exception => e
    print_rest_exception(e, options)
    exit 1
  end
end
get(args) click to toggle source
# File lib/morpheus/cli/commands/log_settings_command.rb, line 25
def get(args)
  options = {}
  optparse = Morpheus::Cli::OptionParser.new do |opts|
    opts.banner = subcommand_usage()
    build_common_options(opts, options, [:query, :json, :yaml, :csv, :fields, :dry_run, :remote])
    opts.footer = "Get log settings."
  end
  optparse.parse!(args)
  connect(options)
  if args.count != 0
    raise_command_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args}\n#{optparse}"
    return 1
  end
  
  begin
    @log_settings_interface.setopts(options)

    if options[:dry_run]
      print_dry_run @log_settings_interface.dry.get()
      return
    end
    json_response = @log_settings_interface.get()
    if options[:json]
      puts as_json(json_response, options, "logSettings")
      return 0
    elsif options[:yaml]
      puts as_yaml(json_response, options, "logSettings")
      return 0
    elsif options[:csv]
      puts records_as_csv([json_response['logSettings']], options)
      return 0
    end

    log_settings = json_response['logSettings']

    print_h1 "Log Settings"
    print cyan
    description_cols = {
      "Logs Enabled" => lambda {|it| format_boolean(it['enabled']) },
      "Availability Time Frame" => lambda {|it| it['retentionDays'] }
    }
    print_description_list(description_cols, log_settings)

    # Syslog Forwarding Rules
    if !log_settings['syslogRules'].empty?
      print_h2 "Syslog Forwarding Rules"
      print cyan
      print as_pretty_table(log_settings['syslogRules'], [:id, :name, :rule])
    end

    # Integrations
    if !log_settings['integrations'].empty?
      print_h2 "Integrations"
      print cyan
      print as_pretty_table(log_settings['integrations'], [:name, :enabled, :host, :port])
    end
    print reset, "\n"
    return 0
  rescue RestClient::Exception => e
    print_rest_exception(e, options)
    return 1
  end
end
handle(args) click to toggle source
# File lib/morpheus/cli/commands/log_settings_command.rb, line 21
def handle(args)
  handle_subcommand(args)
end
remove_integration(args) click to toggle source
# File lib/morpheus/cli/commands/log_settings_command.rb, line 290
def remove_integration(args)
  print_error yellow,"[DEPRECATED] The command `#{command_name } remove-integration` is deprecated.",reset,"\n"
  options = {}

  optparse = Morpheus::Cli::OptionParser.new do |opts|
    opts.banner = opts.banner = subcommand_usage("[name]")
    build_common_options(opts, options, [:json, :dry_run, :quiet, :remote])
    opts.footer = "Deletes specifed integration.\n" +
        "[name] is required. Currently supports splunk and logrhythm integrations."
  end

  optparse.parse!(args)
  connect(options)
  if args.count != 1
    raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args}\n#{optparse}"
    return 1
  end

  begin
    @log_settings_interface.setopts(options)
    if options[:dry_run]
      print_dry_run @log_settings_interface.dry.destroy_integration(args[0])
      return
    end
    json_response = @log_settings_interface.destroy_integration(args[0])

    if options[:json]
      puts as_json(json_response, options)
    elsif !options[:quiet]
      if json_response['success']
        print_green_success  "Integration removed"
        get([] + (options[:remote] ? ["-r",options[:remote]] : []))
      else
        print_red_alert "Error removing integration: #{json_response['msg'] || json_response['errors']}"
      end
    end
    return 0

  rescue RestClient::Exception => e
    print_rest_exception(e, options)
    exit 1
  end
end
remove_syslog_rule(args) click to toggle source
# File lib/morpheus/cli/commands/log_settings_command.rb, line 384
def remove_syslog_rule(args)
  options = {}

  optparse = Morpheus::Cli::OptionParser.new do |opts|
    opts.banner = opts.banner = subcommand_usage("[syslog-rule]")
    build_common_options(opts, options, [:json, :dry_run, :quiet, :remote])
    opts.footer = "Delete a syslog rule.\n" +
        "[syslog-rule] is required. This is the name or id of an syslog rule."
  end

  optparse.parse!(args)
  connect(options)
  if args.count != 1
    raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args}\n#{optparse}"
    return 1
  end

  begin
    syslog_rule = find_syslog_rule_by_name_or_id(args[0])

    if syslog_rule.nil?
      print_red_alert "Syslog rule not found for: #{args[0]}"
      return 1
    end

    @log_settings_interface.setopts(options)
    if options[:dry_run]
      print_dry_run @log_settings_interface.dry.destroy_syslog_rule(syslog_rule['id'])
      return
    end
    json_response = @log_settings_interface.destroy_syslog_rule(syslog_rule['id'])

    if options[:json]
      puts as_json(json_response, options)
    elsif !options[:quiet]
      if json_response['success']
        print_green_success  "Syslog rule removed"
        get([] + (options[:remote] ? ["-r",options[:remote]] : []))
      else
        print_red_alert "Error removing syslog rule: #{json_response['msg'] || json_response['errors']}"
      end
    end
    return 0

  rescue RestClient::Exception => e
    print_rest_exception(e, options)
    exit 1
  end
end
update(args) click to toggle source
# File lib/morpheus/cli/commands/log_settings_command.rb, line 89
def update(args)
  options = {}
  params = {}

  optparse = Morpheus::Cli::OptionParser.new do |opts|
    opts.banner = opts.banner = subcommand_usage()
    opts.on("--enabled [on|off]", ['on','off'], "Logs enabled") do |val|
      params['enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
    end
    opts.on("-R", "--retention NUMBER", Integer, "Availability time frame in days") do |val|
      params['retentionDays'] = val.to_i
    end
    opts.on("-s", "--syslog JSON", String, "Syslog rules JSON") do |val|
      begin
        syslog_rules = JSON.parse(val.to_s)
        options[:syslogRules] = syslog_rules.kind_of?(Array) ? syslog_rules : [syslog_rules]
      rescue JSON::ParserError => e
        print_red_alert "Unable to parse syslog rules JSON"
        exit 1
      end
    end
    opts.on('--syslog-list LIST', Array, "Syslog rules list in form of name value pairs: name1=rule1,name2=rule2") do |val|
      options[:syslogRules] = val.collect { |nv|
        parts = nv.split('=')
        {'name' => parts[0].strip, 'rule' => (parts.count > 1 ? parts[1].strip : '')}
      }
    end
    opts.on( '-i', '--integrations JSON', "Integrations") do |val|
      begin
        ints = JSON.parse(val.to_s)
        options[:integrations] = ints.kind_of?(Array) ? ints : [ints]
      rescue JSON::ParserError => e
        print_red_alert "Unable to parse integrations JSON"
        exit 1
      end
    end
    build_common_options(opts, options, [:json, :payload, :dry_run, :quiet, :remote])
    opts.footer = "Update your log settings."
  end

  optparse.parse!(args)
  connect(options)
  if args.count != 0
    raise_command_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args}\n#{optparse}"
    return 1
  end

  begin
    payload = parse_payload(options)

    if !payload
      payload = {'logSettings' => params}

      if !options[:syslogRules].nil?
        if options[:syslogRules].reject { |rule| rule['name'] }.count > 0
          print_red_alert "Invalid forwarding rule(s), name is required"
          return 1
        end
        payload['logSettings']['syslogRules'] = options[:syslogRules]
      end

      if !options[:integrations].nil?
        if options[:integrations].reject { |rule| rule['name'] }.count > 0
          print_red_alert "Invalid integration: name is required"
          return 1
        end
        payload['logSettings']['integrations'] = options[:integrations]
      end
    end

    if payload['logSettings'].empty?
      print_green_success "Nothing to update"
      exit 1
    end

    @log_settings_interface.setopts(options)
    if options[:dry_run]
      print_dry_run @log_settings_interface.dry.update(payload)
      return
    end
    json_response = @log_settings_interface.update(payload)

    if options[:json]
      puts as_json(json_response, options)
    elsif !options[:quiet]
      if json_response['success']
        print_green_success  "Updated log settings"
        get([] + (options[:remote] ? ["-r",options[:remote]] : []))
      else
        print_red_alert "Error updating log settings: #{json_response['msg'] || json_response['errors']}"
      end
    end
    return 0

  rescue RestClient::Exception => e
    print_rest_exception(e, options)
    exit 1
  end
end

Private Instance Methods

find_syslog_rule_by_name_or_id(val) click to toggle source
# File lib/morpheus/cli/commands/log_settings_command.rb, line 436
def find_syslog_rule_by_name_or_id(val)
  log_settings = @log_settings_interface.get()['logSettings']
  log_settings['syslogRules'].find do |rule|
    val.casecmp(rule['name']) == 0 || rule['id'] == val.to_i
  end
end