class Aio::Warning::WarningSummarize

Attributes

device_warning[R]

设备的警告信息 device_warning = { device_name => device_warning_klass }

summary[R]

按结构保存警告信息 summary = { :serious =>

                          { :crc => 
                                          { device_name => 
                                                          { :klass =>device_klass] ,
:detail => device_klass.warning }} }

Public Class Methods

new(device_manager) click to toggle source
# File lib/aio/core/warning/warning_summarize.rb, line 17
def initialize(device_manager)
  @device_manager = device_manager
  @description = Description.new(device_manager.module_manager)
  clear
end

Public Instance Methods

append_issue(warning_info, level, device, klass) click to toggle source

增加警告信息

# File lib/aio/core/warning/warning_summarize.rb, line 65
def append_issue(warning_info, level, device, klass)
  warning_info.each_pair do |issue, detail|
    # 如果没有, 则加入Hash
    unless summary[level].has_key?(issue)
      summary[level][issue] = {}
    end

    summary[level][issue][device] = { :klass => klass, :detail => detail }
  end
end
append_issue_compare(warning_info, device, klass) click to toggle source

针对compare添加警告信息 为了跟其他种类的警告信息一致,重复两次:compare

# File lib/aio/core/warning/warning_summarize.rb, line 78
def append_issue_compare(warning_info, device, klass)
  summary[:compare][:compare] = {}
  summary[:compare][:compare][device] = { 
    klass: klass,
    detail: warning_info
  }
end
compare_info() click to toggle source
# File lib/aio/core/warning/warning_summarize.rb, line 214
def compare_info
  summary[:compare]
end
compare_number() click to toggle source

比较差异警告条数

# File lib/aio/core/warning/warning_summarize.rb, line 97
def compare_number
  number(summary[:compare])
end
device_ordinary_sort() click to toggle source

按照设备分类取到的一般警告数

# File lib/aio/core/warning/warning_summarize.rb, line 159
def device_ordinary_sort
  st = []
  @device_warning.each_pair do |name, klass|
    st << [name, klass.ordinary_number]
  end

  st.sort! do |x, y|
    y[1] <=> x[1]
  end

  st.delete_if do |x|
    x[0].empty? or x[1] == 0
  end
end
device_serious_sort() click to toggle source

按照设备分类取到的严重警告数

# File lib/aio/core/warning/warning_summarize.rb, line 143
def device_serious_sort
  st = []
  @device_warning.each_pair do |name, klass|
    st << [name, klass.serious_number]
  end

  st.sort! do |x, y|
    y[1] <=> x[1]
  end

  st.delete_if do |x|
    x[0].empty? or x[1] == 0
  end
end
device_warning_sort() click to toggle source

按照权重,对 device_warning 排序

# File lib/aio/core/warning/warning_summarize.rb, line 129
def device_warning_sort
  arr = device_warning.to_a
  arr.sort! do |x, y|
    x1 = x[1]
    y1 = y[1]
    x_wgt = (x1.serious_number*5) + (x1.ordinary_number) + (x1.compare_number*3)
    y_wgt = (y1.serious_number*5) + (y1.ordinary_number) + (y1.compare_number*3)
    y_wgt <=> x_wgt
  end

  return arr
end
get_desc(sym) click to toggle source

通过case获取描述模块的实例

# File lib/aio/core/warning/warning_summarize.rb, line 24
def get_desc(sym)
  @description.get_desc(sym)
end
has_compare?() click to toggle source
# File lib/aio/core/warning/warning_summarize.rb, line 124
def has_compare?
  compare_number > 0 ? true : false
end
has_ordinary?() click to toggle source
# File lib/aio/core/warning/warning_summarize.rb, line 120
def has_ordinary?
  ordinary_number > 0 ? true : false
end
has_serious?() click to toggle source
# File lib/aio/core/warning/warning_summarize.rb, line 116
def has_serious?
  serious_number > 0 ? true : false
end
inspect() click to toggle source
# File lib/aio/core/warning/warning_summarize.rb, line 28
def inspect
  "#<Aio::Warning::WarningSummarize @summary, @device_warning>"
end
number(hash) click to toggle source

统计警告条目数

# File lib/aio/core/warning/warning_summarize.rb, line 107
def number(hash)
  num = 0
  hash.each_value do |v|
    num += v.size
  end

  return num
end
ordinary_info() click to toggle source
# File lib/aio/core/warning/warning_summarize.rb, line 210
def ordinary_info
  summary[:ordinary]
end
ordinary_number() click to toggle source

一般警告信息条数

# File lib/aio/core/warning/warning_summarize.rb, line 92
def ordinary_number
  number(summary[:ordinary])
end
problem_frequency() click to toggle source

发生频率高的问题

# File lib/aio/core/warning/warning_summarize.rb, line 175
def problem_frequency
  tmp = []
  summary.each_value do |info|
    info.each_pair do |prb, dvs|
      tmp << [prb, dvs.size]
    end
  end

  # 反向排序
  tmp.sort { |x, y| x[1] <=> y[1] }.reverse
end
serious_description() click to toggle source

取得严重信息的描述列表 返回结构:

:crc => { :description => CRC描述类,
                                                :devices => [[dev1, klass1], ...] }
# File lib/aio/core/warning/warning_summarize.rb, line 191
def serious_description
  res = {}
  serious_info.each_pair do |prb, dvs_info|
    res[prb] = { :description => @descripion.get(prb) }
    tmp = []
    dvs_info.each_pair do |device_name, info|
      tmp << [device_name, info[:klass]]
    end
    res[prb][:devices] = tmp
  end

  return res
end
serious_info() click to toggle source

严重信息

# File lib/aio/core/warning/warning_summarize.rb, line 206
def serious_info
  summary[:serious]
end
serious_number() click to toggle source

严重警告条数

# File lib/aio/core/warning/warning_summarize.rb, line 87
def serious_number
  number(summary[:serious])
end
tidy_warning() click to toggle source

整理警告信息 改变结构变成

# File lib/aio/core/warning/warning_summarize.rb, line 34
def tidy_warning
  # 清除原先 summary
  clear

  devices.each_pair do |device, klass|
    warning_klass = klass.warning_klass
    @device_warning[device] = klass.warning_klass

    # 当有严重警告的时候
    if warning_klass.has_warning_serious?
      append_issue(warning_klass.warning_info_serious, :serious, device, klass)
    end

    # 当有一般信息的时候
    if warning_klass.has_warning_ordinary?
      append_issue(warning_klass.warning_info_ordinary, :ordinary, device, klass)
    end

    # 当有比较误差信息的时候
    # NOTE 这个比较暂时去掉
    if warning_klass.has_warning_compare?
    #  append_issue(warning_klass.warning_info_compare, :compare, device, klass)

      append_issue_compare(warning_klass.warning_info_compare, device, klass)
    end
  end

  @summary
end
total_number() click to toggle source

全部警告条数

# File lib/aio/core/warning/warning_summarize.rb, line 102
def total_number
  serious_number + ordinary_number + compare_number
end

Private Instance Methods

clear() click to toggle source

清零变量

# File lib/aio/core/warning/warning_summarize.rb, line 221
def clear
  clear_summary
  clear_device_warning
end
clear_device_warning() click to toggle source
# File lib/aio/core/warning/warning_summarize.rb, line 234
def clear_device_warning
  @device_warning = {}
end
clear_summary() click to toggle source
# File lib/aio/core/warning/warning_summarize.rb, line 226
def clear_summary
  @summary = {
    :serious  => {},
    :ordinary => {},
    :compare  => {}
  }
end
device_manager() click to toggle source

方便使用

# File lib/aio/core/warning/warning_summarize.rb, line 239
def device_manager
  @device_manager
end
devices() click to toggle source

方便使用 devices

# File lib/aio/core/warning/warning_summarize.rb, line 244
def devices
  device_manager.devices
end