class Morpheus::Cli::MonitoringSettings

Public Instance Methods

connect(opts) click to toggle source
# File lib/morpheus/cli/commands/monitoring_settings.rb, line 11
def connect(opts)
  @api_client = establish_remote_appliance_connection(opts)
  @monitoring_settings_interface = @api_client.monitoring_settings
  @options_interface = @api_client.options
end
get(args) click to toggle source
# File lib/morpheus/cli/commands/monitoring_settings.rb, line 21
def get(args)
  params = {}
  options = {}
  optparse = Morpheus::Cli::OptionParser.new do |opts|
    opts.banner = subcommand_usage()
    build_standard_get_options(opts, options)
    opts.footer = "Get monitoring settings."
  end
  optparse.parse!(args)
  connect(options)
  verify_args!(args:args, optparse:optparse, count:0)
  params.merge!(parse_query_options(options))
  @monitoring_settings_interface.setopts(options)
  if options[:dry_run]
    print_dry_run @monitoring_settings_interface.dry.get(options)
    return
  end
  json_response = @monitoring_settings_interface.get(options)
  render_response(json_response, options, 'monitoringSettings') do
    monitoring_settings = json_response['monitoringSettings']
    service_now_settings = monitoring_settings['serviceNow']
    print_h1 "Monitoring Settings"
    print cyan
    description_cols = {
      "Auto Create Checks" => lambda {|it| format_boolean(it['autoManageChecks']) },
      "Availability Time Frame" => lambda {|it| it['availabilityTimeFrame'] ? it['availabilityTimeFrame'].to_s + ' days' : '' },
      "Availability Precision" => lambda {|it| it['availabilityPrecision'] ? it['availabilityPrecision'].to_s : '' },
      "Default Check Interval" => lambda {|it| it['defaultCheckInterval'] ? it['defaultCheckInterval'].to_s + ' minutes' : '' },
    }
    print_description_list(description_cols, monitoring_settings, options)
    
      print_h2 "ServiceNow Settings", options.merge(:border_style => :thin)
      description_cols = {
        "Enabled" => lambda {|it| format_boolean(it['enabled']) },
        "Integration" => lambda {|it| it['integration'] ? it['integration']['name'] : '' },
        "New Incident Action" => lambda {|it| format_service_now_action(it['newIncidentAction']) },
        "Close Incident Action" => lambda {|it| format_service_now_action(it['closeIncidentAction']) },
        "Info Mapping" => lambda {|it| format_service_now_mapping(it['infoMapping']) },
        "Warning Mapping" => lambda {|it| format_service_now_mapping(it['warningMapping']) },
        "Critical Mapping" => lambda {|it| format_service_now_mapping(it['criticalMapping']) },
      }
      print_description_list(description_cols, service_now_settings)
    
    print reset, "\n"
  end
  return 0, nil
end
handle(args) click to toggle source
# File lib/morpheus/cli/commands/monitoring_settings.rb, line 17
def handle(args)
  handle_subcommand(args)
end
update(args) click to toggle source
# File lib/morpheus/cli/commands/monitoring_settings.rb, line 69
def update(args)
  params = {}
  options = {}
  optparse = Morpheus::Cli::OptionParser.new do |opts|
    opts.banner = opts.banner = subcommand_usage()
    opts.on('--auto-create-checks [on|off]', String, "Auto Create Checks") do |val|
      params['autoManageChecks'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
    end
    opts.on("--availability-time-frame DAYS", Integer, "Availability Time Frame. The number of days availability should be calculated for. Changes will not take effect until your checks have passed their check interval.") do |val|
      params['availabilityTimeFrame'] = val.to_i
    end
    opts.on("--availability-precision DIGITS", Integer, "Availability Precision. The number of decimal places availability should be displayed in. Can be anywhere between 0 and 5.") do |val|
      params['availabilityPrecision'] = val.to_i
    end
    opts.on("--default-check-interval MINUTES", Integer, "Default Check Interval. The default interval to use when creating new checks. Value is in minutes.") do |val|
      params['defaultCheckInterval'] = val.to_i
    end
    opts.on('--service-now-enabled [on|off]', String, "ServiceNow: Enabled (on) or disabled (off)") do |val|
      params['serviceNow'] ||= {}
      params['serviceNow']['enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
    end
    opts.on('--service-now-integration ID', String, "ServiceNow: Integration ID or Name") do |val|
      params['serviceNow'] ||= {}
      params['serviceNow']['integration'] = val # {'id' => val.to_i}
    end
    opts.on("--service-now-new-incident-action create|none", String, "ServiceNow: New Incident Action") do |val|
      # allowed_values = 'create|none'.split('|') #get_service_now_actions().keys
      # if !allowed_values.include?(val)
      #   raise ::OptionParser::InvalidOption.new("New Incident Action value '#{val}' is invalid.\nThe allowed values are: #{allowed_values.join(', ')}")
      # end
      params['serviceNow'] ||= {}
      params['serviceNow']['newIncidentAction'] = val
    end
    opts.on("--service-now-close-incident-action close|activity|none", String, "ServiceNow: Close Incident Action") do |val|
      # allowed_values = 'close|activity|none'.split('|') #get_service_now_mappings().keys
      # if !allowed_values.include?(val)
      #   raise ::OptionParser::InvalidOption.new("Close Incident Action value '#{val}' is invalid.\nThe allowed values are: #{allowed_values.join(', ')}")
      # end
      params['serviceNow'] ||= {}
      params['serviceNow']['closeIncidentAction'] = val
    end
    opts.on("--service-now-info-mapping low|medium|high", String, "ServiceNow: Info Mapping") do |val|
      # allowed_values = 'low|medium|high'.split('|') # get_service_now_mappings().keys
      # if !allowed_values.include?(val)
      #   raise ::OptionParser::InvalidOption.new("Info Mapping value '#{val}' is invalid.\nThe allowed values are: #{allowed_values.join(', ')}")
      # end
      params['serviceNow'] ||= {}
      params['serviceNow']['infoMapping'] = val
    end
    opts.on("--service-now-warning-mapping low|medium|high", String, "ServiceNow: Warning Mapping") do |val|
      # allowed_values = 'low|medium|high'.split('|') # get_service_now_mappings().keys
      # if !allowed_values.include?(val)
      #   raise ::OptionParser::InvalidOption.new("Warning Info Mapping value '#{val}' is invalid.\nThe allowed values are: #{allowed_values.join(', ')}")
      # end
      params['serviceNow'] ||= {}
      params['serviceNow']['warningMapping'] = val
    end
    opts.on("--service-now-critical-mapping low|medium|high", String, "ServiceNow: Critical Mapping") do |val|
      # allowed_values = 'low|medium|high'.split('|') # get_service_now_mappings().keys
      # if !allowed_values.include?(val)
      #   raise ::OptionParser::InvalidOption.new("Critical Info Mapping value '#{val}' is invalid.\nThe allowed values are: #{allowed_values.join(', ')}")
      # end
      params['serviceNow'] ||= {}
      params['serviceNow']['criticalMapping'] = val
    end
    build_standard_update_options(opts, options)
    opts.footer = "Update monitoring settings."
  end
  optparse.parse!(args)
  connect(options)
  verify_args!(args:args, optparse:optparse, count:0)
  payload = parse_payload(options)
  if !payload
    payload = {}
    payload.deep_merge!({object_key => parse_passed_options(options)}) # inject options passed with -O foo=bar
    if params['serviceNow'] && params['serviceNow']['integration']
      integration = find_by_name_or_id(:integration, params['serviceNow']['integration'])
      if integration.nil?
        exit 1 #return 1, "Integration not found by '#{options[:servicenow_integration]}'"
      else
        if integration['integrationType']['code'] != 'serviceNow'
          raise_command_error "Integration '#{integration['id']}' must be a Service Now integration"
        end
        params['serviceNow'] ||= {}
        params['serviceNow']['integration'] = {'id' => integration['id'].to_i}
      end
    end
    payload.deep_merge!({object_key => params})
  end
  if payload[object_key].empty?
    raise_command_error "Specify at least one option to update.\n#{optparse}"
  end
  @monitoring_settings_interface.setopts(options)
  if options[:dry_run]
    print_dry_run @monitoring_settings_interface.dry.update(payload)
    return
  end
  json_response = @monitoring_settings_interface.update(payload)
  exit_code, err = 0, nil
  render_response(json_response, options, object_key) do
    if json_response['success']
      print_green_success "Updated monitoring settings"
      get([] + (options[:remote] ? ["-r",options[:remote]] : []))
    else
      exit_code, err = 1, "Error updating monitoring settings: #{json_response['msg'] || json_response['errors']}"
      print_rest_errors(json_response)
    end
  end
  return exit_code, err
end

Private Instance Methods

format_service_now_action(action_value) click to toggle source
# File lib/morpheus/cli/commands/monitoring_settings.rb, line 191
def format_service_now_action(action_value)
  get_service_now_actions()[action_value].to_s
end
format_service_now_mapping(mapping_value) click to toggle source
# File lib/morpheus/cli/commands/monitoring_settings.rb, line 203
def format_service_now_mapping(mapping_value)
  get_service_now_mappings()[mapping_value].to_s
end
get_service_now_actions() click to toggle source
# File lib/morpheus/cli/commands/monitoring_settings.rb, line 182
def get_service_now_actions()
  {
    'create' => 'Create new incident in ServiceNow',
    'close' => 'Resolve Incident in ServiceNow',
    'activity' => 'Add Activity to Incident in ServiceNow',
    'none' => 'No action',
  }
end
get_service_now_mappings() click to toggle source
# File lib/morpheus/cli/commands/monitoring_settings.rb, line 195
def get_service_now_mappings()
  {
    'low' => 'Low',
    'medium' => 'Medium',
    'high' => 'High',
  }
end
object_key() click to toggle source
# File lib/morpheus/cli/commands/monitoring_settings.rb, line 208
def object_key
  'monitoringSettings'
end