module Aio::Device::Methods

Public Class Methods

clock() click to toggle source
# File lib/aio/core/device/methods.rb, line 153
def clock
  cmd = CmdSwitch.clock(klass)
  pool = ["time", "zone", "week", "year", "month", "day"]
  res = []
  pool.each do |key|
    res << klass.cmds_useful[cmd][:clock][key.to_sym]
  end
  return res
rescue Exception
  puts_error
  return ["", "", "", "", "", ""]
end
configuration?() click to toggle source

否是有config命令

# File lib/aio/core/device/methods.rb, line 26
def configuration?
  cmd = CmdSwitch.configuration(klass)
  klass.cmds_useful[cmd].nil? ? false : true
end
configuration_interfaces() click to toggle source

单独查看接口配置

# File lib/aio/core/device/methods.rb, line 20
def configuration_interfaces
  cmd = CmdSwitch.configuration(klass)
  return klass.cmds_useful[cmd][:iface_config]
end
cpu_percent() click to toggle source

CPU 利用率百分比

# File lib/aio/core/device/methods.rb, line 33
def cpu_percent
  cmd = CmdSwitch.cpu(klass)
  return klass.cmds_useful[cmd][:cpu][:minutes_5] if kind_of?(Cisco, H3C)
  return klass.cmds_useful[cmd][:cpu][:used_percent] if klass.kind_of? Maipu
rescue Exception
  puts_error
  return ""
end
get_manager_ip() click to toggle source
# File lib/aio/core/device/methods.rb, line 166
def get_manager_ip
  return klass.manager_ip unless klass.manager_ip.nil?

  cmd = []
  cmd[0] = CmdSwitch.interface(klass)
  cmd[1] = CmdSwitch.interface_brief(klass)

  total = []
  manager = ""

  return unless kind_of?(Cisco, H3C, Maipu)

  # 如果是 show interfaces
  if klass.has_cmd?(cmd[0])
    total = klass.cmds_useful[cmd[0]][:interface]

    total.each_value do |info|
      if (info[:iface_id] == (klass.interface[:loopback] + "0")) and info[:state] =~ /(?i)up/
        manager = info[:addr]
      end
    end

    # 如果是 show ip interface brief
  elsif klass.has_cmd?(cmd[1])
    total = klass.cmds_useful[cmd[1]][:interface_brief]

    total.each_value do |info|
      # 如果有环回口,那么就直接输出
      if (info[:interface_id].downcase == klass.interface[:loopback].downcase + "0")  and (info[:status] =~ /(?i)up/)
        manager = info[:ip] 
      end
    end
  end
  return manager

rescue Exception
  puts_error
  return ""
end
inventory() click to toggle source

板卡序列号信息 返回数组: [{:name, :pid, :sn, :description}]

# File lib/aio/core/device/methods.rb, line 121
def inventory
  cmd = CmdSwitch.inventory(klass)
  if kind_of?(Cisco, H3C)
    keys = klass.cmds_useful[cmd][:inventory].keys
    res = []
    keys.each do |sn|
      res << klass.cmds_useful[cmd][:inventory][sn.to_sym]
    end
    return res

  elsif kind_of?(Maipu)
    md = klass.cmds_useful[cmd][:module]
    res = []
    md.each_value do |v|
      res << {
        name: v[:module], # 这里反着来
        pid:  v[:name],
        sn:   v[:sn],
        description: ''
      }
    end
    return res

  else
    return [{:name => "", :pid => "", :sn => "", :description => ""}]
  end

rescue Exception
  puts_error
  return [{:name => "", :pid => "", :sn => "", :description => ""}]
end
ios_version() click to toggle source

IOS 版本

# File lib/aio/core/device/methods.rb, line 54
def ios_version
  cmd = CmdSwitch.version(klass)
  return klass.cmds_useful[cmd][:software][:version] if kind_of?(Cisco, H3C, Maipu)
rescue Exception
  puts_error
  return ""
end
klass() click to toggle source
# File lib/aio/core/device/methods.rb, line 15
def klass
  @@klass
end
klass=(klass) click to toggle source
# File lib/aio/core/device/methods.rb, line 11
def klass=(klass)
  @@klass = klass
end
memory_percent() click to toggle source

Memory 利用率百分比

# File lib/aio/core/device/methods.rb, line 43
def memory_percent
  cmd = CmdSwitch.memory(klass)
  return klass.cmds_useful[cmd][:memory][:used_rate] if klass.kind_of? H3C
  return klass.cmds_useful[cmd][:memory][:proc_ratio] if klass.kind_of? Cisco
  return klass.cmds_useful[cmd][:memory][:used_percent] if klass.kind_of? Maipu
rescue Exception
  puts_error
  return ""
end
soft_image() click to toggle source

IOS 特性集

# File lib/aio/core/device/methods.rb, line 63
def soft_image
  cmd = CmdSwitch.version(klass)
  return klass.cmds_useful[cmd][:software][:soft_image] if kind_of?(Cisco, Maipu)

  # H3C 不是在version中查看
rescue Exception
  puts_error
  return ""
end
uptime() click to toggle source

运行时间

# File lib/aio/core/device/methods.rb, line 74
def uptime
  cmd = CmdSwitch.version(klass)
  return klass.cmds_useful[cmd][:software][:uptime] if kind_of?(Cisco, H3C, Maipu)
rescue Exception
  puts_error
  return ""
end
warning_env?() click to toggle source

判断温度是否有警告

# File lib/aio/core/device/methods.rb, line 83
def warning_env?
  if klass.kind_of? Maipu
    return (klass.include_warning?(:mainboard_temperature) and klass.include_warning?(:cpu_temperature))
  end
  return klass.include_warning?(:cpu_status) if klass.kind_of? Cisco
rescue Exception
  puts_error
end
warning_fan?() click to toggle source

判断风扇是否有警告

# File lib/aio/core/device/methods.rb, line 101
def warning_fan?
  return klass.include_warning?(:fan_status) if kind_of?(Cisco, H3C, Maipu)
rescue Exception
  puts_error
end
warning_interface?() click to toggle source

只判断最关键的三个信息

# File lib/aio/core/device/methods.rb, line 108
def warning_interface?
  if kind_of?(Cisco, Maipu, H3C)
    tmp = klass.include_warning?(:input_errors)
    tmp = tmp or klass.include_warning(:crc)
    tmp = tmp or klass.include_warning(:output_errors)
    return tmp
  end
rescue Exception
  puts_error
end
warning_power?() click to toggle source

判断电源是否有警告

# File lib/aio/core/device/methods.rb, line 94
def warning_power?
  return klass.include_warning?(:power_status) if kind_of?(Cisco, H3C, Maipu)
rescue Exception
  puts_error
end

Private Class Methods

kind_of?(*type) click to toggle source

判断klass是否是指定的Device类型

# File lib/aio/core/device/methods.rb, line 209
def kind_of?(*type)
  type.each do |t|
    return true if klass.kind_of?(t)
  end
  return false
end
puts_error() click to toggle source

统一的错误回显

# File lib/aio/core/device/methods.rb, line 217
def puts_error
  res = /`(?<method>.*)'/.match(caller[1])
  print_error "<#{res[:method]}>方法未执行成功  #{klass.class} : #{klass.device_name}"
end
type_send(*types) { |cmds_useful| ... } click to toggle source

对于有相同路径的cmds_useful,可以使用此方法 将按照给出的设备类型返回cmds_useful 方便命令的统一管理

# File lib/aio/core/device/methods.rb, line 225
def type_send(*types)
  types.each do |type|
    if klass.kind_of?(type)
      yield klass.cmds_useful
    else
      next
    end
  end
end