aio_elin 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +675 -0
- data/README.md +9 -0
- data/config.rb +39 -0
- data/lib/aio/base/debug.rb +30 -0
- data/lib/aio/base/toolkit/array.rb +24 -0
- data/lib/aio/base/toolkit/date.rb +46 -0
- data/lib/aio/base/toolkit/deep_clone.rb +10 -0
- data/lib/aio/base/toolkit/diff.rb +104 -0
- data/lib/aio/base/toolkit/excel_office.rb +421 -0
- data/lib/aio/base/toolkit/excel_wps.rb +437 -0
- data/lib/aio/base/toolkit/excel_wps.rb.bak +299 -0
- data/lib/aio/base/toolkit/ipaddr.rb +28 -0
- data/lib/aio/base/toolkit/os.rb +26 -0
- data/lib/aio/base/toolkit/regexp.rb +32 -0
- data/lib/aio/base/toolkit/string.rb +28 -0
- data/lib/aio/base/toolkit/table.rb +441 -0
- data/lib/aio/base/toolkit/test_diff.rb +9 -0
- data/lib/aio/base/toolkit/test_excel.rb +118 -0
- data/lib/aio/base/toolkit/test_word.rb +58 -0
- data/lib/aio/base/toolkit/word_wps.rb +492 -0
- data/lib/aio/base/toolkit.rb +18 -0
- data/lib/aio/base.rb +10 -0
- data/lib/aio/core/device/cisco.rb +13 -0
- data/lib/aio/core/device/cmd_switch.rb +113 -0
- data/lib/aio/core/device/h3c.rb +12 -0
- data/lib/aio/core/device/huawei.rb +10 -0
- data/lib/aio/core/device/juniper.rb +10 -0
- data/lib/aio/core/device/maipu.rb +11 -0
- data/lib/aio/core/device/methods.rb +233 -0
- data/lib/aio/core/device/methods.rb.bak +199 -0
- data/lib/aio/core/device/parent_device.rb +275 -0
- data/lib/aio/core/device.rb +15 -0
- data/lib/aio/core/device_manager.rb +207 -0
- data/lib/aio/core/module/cmd.rb +160 -0
- data/lib/aio/core/module/description.rb +67 -0
- data/lib/aio/core/module/input_style.rb +98 -0
- data/lib/aio/core/module/output_style.rb +80 -0
- data/lib/aio/core/module/platform.rb +30 -0
- data/lib/aio/core/module/ranking.rb +24 -0
- data/lib/aio/core/module/special_style.rb +30 -0
- data/lib/aio/core/module/template.rb +13 -0
- data/lib/aio/core/module.rb +15 -0
- data/lib/aio/core/module_loader.rb +161 -0
- data/lib/aio/core/module_loader.rb.bak +148 -0
- data/lib/aio/core/module_manager.rb +112 -0
- data/lib/aio/core/module_manager.rb.bak +78 -0
- data/lib/aio/core/parse/file.rb +19 -0
- data/lib/aio/core/parse/parser.rb +91 -0
- data/lib/aio/core/parse/parser_machine/bak/has_cmd_state.rb +14 -0
- data/lib/aio/core/parse/parser_machine/bak/has_context_state.rb +11 -0
- data/lib/aio/core/parse/parser_machine/bak/no_cmd_state.rb +11 -0
- data/lib/aio/core/parse/parser_machine/bak/no_context_state.rb +11 -0
- data/lib/aio/core/parse/parser_machine/full_state.rb +12 -0
- data/lib/aio/core/parse/parser_machine/has_device_state.rb +44 -0
- data/lib/aio/core/parse/parser_machine/no_device_state.rb +12 -0
- data/lib/aio/core/parse/parser_machine/parent_state.rb +26 -0
- data/lib/aio/core/parse/parser_machine.rb +47 -0
- data/lib/aio/core/parse.rb +6 -0
- data/lib/aio/core/text/context.rb +211 -0
- data/lib/aio/core/text/line_string.rb +74 -0
- data/lib/aio/core/text/warning.rb +179 -0
- data/lib/aio/core/text.rb +7 -0
- data/lib/aio/core/warning/description.rb +47 -0
- data/lib/aio/core/warning/warning_summarize.rb +232 -0
- data/lib/aio/core/warning.rb +6 -0
- data/lib/aio/core.rb +32 -0
- data/lib/aio/license.rb +687 -0
- data/lib/aio/resource/cover_picture.png +0 -0
- data/lib/aio/resource/line.png +0 -0
- data/lib/aio/resource/logo.png +0 -0
- data/lib/aio/ui/banner.rb +85 -0
- data/lib/aio/ui/readable_text.rb +75 -0
- data/lib/aio/ui/verbose.rb +29 -0
- data/lib/aio/ui/version.rb +9 -0
- data/lib/aio/ui.rb +138 -0
- data/lib/aio.rb +13 -0
- data/lib/modules/cmd/cisco/show_clock.rb +32 -0
- data/lib/modules/cmd/cisco/show_cpu.rb +32 -0
- data/lib/modules/cmd/cisco/show_env.rb +71 -0
- data/lib/modules/cmd/cisco/show_failover.rb +39 -0
- data/lib/modules/cmd/cisco/show_interface_ip_brief.rb +24 -0
- data/lib/modules/cmd/cisco/show_interfaces.rb +177 -0
- data/lib/modules/cmd/cisco/show_inv.rb +43 -0
- data/lib/modules/cmd/cisco/show_ip_interface_brief.rb +42 -0
- data/lib/modules/cmd/cisco/show_ip_ospf_nei.rb +38 -0
- data/lib/modules/cmd/cisco/show_ip_route_summary.rb +81 -0
- data/lib/modules/cmd/cisco/show_memory.rb +27 -0
- data/lib/modules/cmd/cisco/show_process_cpu.rb +35 -0
- data/lib/modules/cmd/cisco/show_process_memory.rb +63 -0
- data/lib/modules/cmd/cisco/show_version.rb +97 -0
- data/lib/modules/cmd/h3c/display_clock.rb +32 -0
- data/lib/modules/cmd/h3c/display_cpu.rb +51 -0
- data/lib/modules/cmd/h3c/display_device_manuinfo.rb +45 -0
- data/lib/modules/cmd/h3c/display_fan.rb +91 -0
- data/lib/modules/cmd/h3c/display_interface.rb +203 -0
- data/lib/modules/cmd/h3c/display_ip_interface_brief.rb +34 -0
- data/lib/modules/cmd/h3c/display_ip_routing.rb +68 -0
- data/lib/modules/cmd/h3c/display_ip_routing_stat.rb +90 -0
- data/lib/modules/cmd/h3c/display_memory.rb +35 -0
- data/lib/modules/cmd/h3c/display_ospf_peer.rb +38 -0
- data/lib/modules/cmd/h3c/display_power.rb +90 -0
- data/lib/modules/cmd/h3c/display_version.rb +54 -0
- data/lib/modules/cmd/h3c/display_vrrp_verbose.rb +86 -0
- data/lib/modules/cmd/maipu/show_env.rb +34 -0
- data/lib/modules/cmd/maipu/show_ip_route.rb +74 -0
- data/lib/modules/cmd/maipu/show_ip_route_statistic.rb +36 -0
- data/lib/modules/cmd/maipu/show_memory.rb +31 -0
- data/lib/modules/cmd/maipu/show_system_fan.rb +66 -0
- data/lib/modules/cmd/maipu/show_system_power.rb +66 -0
- data/lib/modules/cmd/maipu/show_version.rb +50 -0
- data/lib/modules/description/style/crc.rb +22 -0
- data/lib/modules/description/style/input_errors.rb +22 -0
- data/lib/modules/description/style/overrun.rb +22 -0
- data/lib/modules/description/style/proc_ratio.rb +22 -0
- data/lib/modules/description/style/protocol.rb +22 -0
- data/lib/modules/description/style/register.rb +22 -0
- data/lib/modules/description/style/runts.rb +22 -0
- data/lib/modules/description/style/template.rb +22 -0
- data/lib/modules/description/style/total_output_drops.rb +22 -0
- data/lib/modules/input/style/compare_xml.rb +89 -0
- data/lib/modules/input/style/console.rb +222 -0
- data/lib/modules/input/style/console.rb.bak +114 -0
- data/lib/modules/input/style/xinhua_nat.rb +70 -0
- data/lib/modules/output/style/boc_day.rb +223 -0
- data/lib/modules/output/style/cmds.rb +77 -0
- data/lib/modules/output/style/compare_json.rb +26 -0
- data/lib/modules/output/style/compare_report.rb +31 -0
- data/lib/modules/output/style/compare_xml.rb +86 -0
- data/lib/modules/output/style/excel_table_office.rb +407 -0
- data/lib/modules/output/style/excel_table_wps.rb +400 -0
- data/lib/modules/output/style/summary_report.rb +563 -0
- data/lib/modules/special/style/compare.rb +110 -0
- metadata +176 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# 此类只针对单台设备的告警信息
|
|
2
|
+
module Aio::Text
|
|
3
|
+
class Warning
|
|
4
|
+
|
|
5
|
+
attr_reader :warning_info
|
|
6
|
+
|
|
7
|
+
def initialize
|
|
8
|
+
@warning_info = {
|
|
9
|
+
:serious => {},
|
|
10
|
+
:ordinary => {},
|
|
11
|
+
:compare => {},
|
|
12
|
+
}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def clear
|
|
16
|
+
@warning_info.each_pair { |_, v| v.clear }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# 判断是否需要添加警告
|
|
20
|
+
# info = iface
|
|
21
|
+
# sym = :errors
|
|
22
|
+
# mod = CMD模块self
|
|
23
|
+
# force 是否直接添加到warning_info中
|
|
24
|
+
# 如果是否,这相当于update
|
|
25
|
+
def warning(info, sym, level, mod, force=nil)
|
|
26
|
+
benchmark = mod.benchmark[sym]
|
|
27
|
+
var = info[sym]
|
|
28
|
+
|
|
29
|
+
# 支持有多个条件的基准值, 只要有一个符合标准就通过
|
|
30
|
+
if force.nil?
|
|
31
|
+
cond_num = benchmark.size - 1
|
|
32
|
+
i = 1
|
|
33
|
+
res = []
|
|
34
|
+
cond_num.times do
|
|
35
|
+
case benchmark[i]
|
|
36
|
+
when String
|
|
37
|
+
var = var.to_s
|
|
38
|
+
when Fixnum
|
|
39
|
+
var = var.to_i
|
|
40
|
+
when Float
|
|
41
|
+
var = var.to_f
|
|
42
|
+
end
|
|
43
|
+
# 还有种情况是正则的方式
|
|
44
|
+
|
|
45
|
+
var = var
|
|
46
|
+
ben = benchmark[i]
|
|
47
|
+
|
|
48
|
+
res << case benchmark[0]
|
|
49
|
+
when "=="
|
|
50
|
+
var == ben
|
|
51
|
+
when "=~"
|
|
52
|
+
var =~ Regexp.new(ben) ? true : false
|
|
53
|
+
when "!="
|
|
54
|
+
var != ben
|
|
55
|
+
when ">"
|
|
56
|
+
var > ben
|
|
57
|
+
when ">="
|
|
58
|
+
var >= ben
|
|
59
|
+
when "<"
|
|
60
|
+
var < ben
|
|
61
|
+
when "<="
|
|
62
|
+
var <= ben
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
i += 1
|
|
66
|
+
end
|
|
67
|
+
# 当 force 为假的时候,说明不需要加入到warning中,所以 res 为真
|
|
68
|
+
elsif force == false
|
|
69
|
+
res = [true]
|
|
70
|
+
|
|
71
|
+
# 当 force 为真的时候,说明需要加入到warning中,所以 res 为假
|
|
72
|
+
elsif force == true
|
|
73
|
+
res = [false]
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
unless res.include?(true)
|
|
77
|
+
if filter?(level, sym)
|
|
78
|
+
@warning_info[level][sym] ||= []
|
|
79
|
+
@warning_info[level][sym] << info
|
|
80
|
+
#pp "#{mod.ext_info[:device_name]} : #{level} : #{sym}"
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def warning_serious(info, sym, mod, force=nil)
|
|
86
|
+
warning(info, sym, :serious, mod, force)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def warning_ordinary(info, sym, mod, force=nil)
|
|
90
|
+
warning(info, sym, :ordinary, mod, force)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def warning_compare(info)
|
|
94
|
+
@warning_info[:compare] = info
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def warning_info_serious
|
|
98
|
+
@warning_info[:serious]
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def warning_info_ordinary
|
|
102
|
+
@warning_info[:ordinary]
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def warning_info_compare
|
|
106
|
+
@warning_info[:compare]
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# 判断是否有警告信息
|
|
110
|
+
def has_warning?
|
|
111
|
+
return true unless warning_info_serious.empty?
|
|
112
|
+
return true unless warning_info_ordinary.empty?
|
|
113
|
+
return true unless warning_info_compare.empty?
|
|
114
|
+
return false
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def has_warning_serious?
|
|
118
|
+
warning_info_serious.empty? ? false : true
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def has_warning_ordinary?
|
|
122
|
+
warning_info_ordinary.empty? ? false : true
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def has_warning_compare?
|
|
126
|
+
warning_info_compare.empty? ? false : true
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# 警告数量
|
|
130
|
+
def serious_number
|
|
131
|
+
warning_info_serious.size
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def ordinary_number
|
|
135
|
+
warning_info_ordinary.size
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def compare_number
|
|
139
|
+
warning_info_compare.size
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def total_number
|
|
143
|
+
serious_number + ordinary_number + compare_number
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# 判断是否有指定的警告信息
|
|
147
|
+
# 不对compare 进行判断,因为compare 的格式还没有统一
|
|
148
|
+
def include_warning?(warn)
|
|
149
|
+
warn = warn[0].to_sym if warn.class == ::Array
|
|
150
|
+
return true if include_warning_serious?(warn)
|
|
151
|
+
return true if include_warning_ordinary?(warn)
|
|
152
|
+
#return true if include_warning_compare?(warn)
|
|
153
|
+
return false
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def include_warning_serious?(warn)
|
|
157
|
+
warn = warn[0].to_sym if warn.class == ::Array
|
|
158
|
+
warning_info_serious.has_key?(warn) ? true : false
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def include_warning_ordinary?(warn)
|
|
162
|
+
warn = warn[0].to_sym if warn.class == ::Array
|
|
163
|
+
warning_info_ordinary.has_key?(warn) ? true : false
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# 与Aio::Config::Warning联动,如果里面有sym 的信息,则过滤
|
|
167
|
+
def filter?(level, sym)
|
|
168
|
+
case level
|
|
169
|
+
when :serious
|
|
170
|
+
warn = Aio::Config::Warning::Serious
|
|
171
|
+
when :ordinary
|
|
172
|
+
warn = Aio::Config::Warning::Ordinary
|
|
173
|
+
end
|
|
174
|
+
warn.include?(sym) ? false : true
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# 用于调用描述信息
|
|
2
|
+
module Aio::Warning
|
|
3
|
+
class Description
|
|
4
|
+
|
|
5
|
+
# Description模块
|
|
6
|
+
attr_accessor :modules
|
|
7
|
+
|
|
8
|
+
def initialize(module_manager)
|
|
9
|
+
@modules = {}
|
|
10
|
+
@parent_klass = Aio::Module::Description.new
|
|
11
|
+
modules_info = module_manager.get_modules_by_type("description")
|
|
12
|
+
tidy_modules(modules_info)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# 整理后的格式为
|
|
16
|
+
# modules = { :crc => klass }
|
|
17
|
+
def tidy_modules(module_info)
|
|
18
|
+
module_info.each_value do |info|
|
|
19
|
+
md = info[:klass]
|
|
20
|
+
self.modules[md.case] = md
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# 通过case获取模块的实例
|
|
25
|
+
def get_desc(sym)
|
|
26
|
+
modules.each_pair do |cs, klass|
|
|
27
|
+
case cs
|
|
28
|
+
when ::Array
|
|
29
|
+
if cs.include?(sym)
|
|
30
|
+
return klass
|
|
31
|
+
end
|
|
32
|
+
when ::Symbol
|
|
33
|
+
if cs == sym.to_sym
|
|
34
|
+
return klass
|
|
35
|
+
end
|
|
36
|
+
when ::String
|
|
37
|
+
if cs == sym.to_s
|
|
38
|
+
return klass
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
return @parent_klass.temp(sym)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# 用于收集汇总所有设备的警告信息
|
|
2
|
+
module Aio::Warning
|
|
3
|
+
class WarningSummarize
|
|
4
|
+
|
|
5
|
+
# 按结构保存警告信息
|
|
6
|
+
# summary = { :serious =>
|
|
7
|
+
# { :crc =>
|
|
8
|
+
# { device_name =>
|
|
9
|
+
# { :klass =>device_klass] ,
|
|
10
|
+
# :detail => device_klass.warning }} }
|
|
11
|
+
attr_reader :summary
|
|
12
|
+
|
|
13
|
+
# 设备的警告信息
|
|
14
|
+
# device_warning = { device_name => device_warning_klass }
|
|
15
|
+
attr_reader :device_warning
|
|
16
|
+
|
|
17
|
+
def initialize(device_manager)
|
|
18
|
+
@device_manager = device_manager
|
|
19
|
+
@description = Description.new(device_manager.module_manager)
|
|
20
|
+
clear
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# 通过case获取描述模块的实例
|
|
24
|
+
def get_desc(sym)
|
|
25
|
+
@description.get_desc(sym)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# 整理警告信息
|
|
29
|
+
# 改变结构变成
|
|
30
|
+
def tidy_warning
|
|
31
|
+
# 清除原先 summary
|
|
32
|
+
clear
|
|
33
|
+
|
|
34
|
+
devices.each_pair do |device, klass|
|
|
35
|
+
warning_klass = klass.warning_klass
|
|
36
|
+
@device_warning[device] = klass.warning_klass
|
|
37
|
+
|
|
38
|
+
# 当有严重警告的时候
|
|
39
|
+
if warning_klass.has_warning_serious?
|
|
40
|
+
append_issue(warning_klass.warning_info_serious, :serious, device, klass)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# 当有一般信息的时候
|
|
44
|
+
if warning_klass.has_warning_ordinary?
|
|
45
|
+
append_issue(warning_klass.warning_info_ordinary, :ordinary, device, klass)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# 当有比较误差信息的时候
|
|
49
|
+
if warning_klass.has_warning_compare?
|
|
50
|
+
append_issue(warning_klass.warning_info_compare, :compare, device, klass)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
@summary
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# 增加警告信息
|
|
58
|
+
def append_issue(warning_info, level, device, klass)
|
|
59
|
+
warning_info.each_pair do |issue, detail|
|
|
60
|
+
# 如果没有, 则加入Hash
|
|
61
|
+
unless summary[level].has_key?(issue)
|
|
62
|
+
summary[level][issue] = {}
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
summary[level][issue][device] = { :klass => klass, :detail => detail }
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# 严重警告条数
|
|
70
|
+
def serious_number
|
|
71
|
+
number(summary[:serious])
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# 一般警告信息条数
|
|
75
|
+
def ordinary_number
|
|
76
|
+
number(summary[:ordinary])
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# 比较差异警告条数
|
|
80
|
+
def compare_number
|
|
81
|
+
number(summary[:compare])
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# 全部警告条数
|
|
85
|
+
def total_number
|
|
86
|
+
serious_number + ordinary_number + compare_number
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# 统计警告条目数
|
|
90
|
+
def number(hash)
|
|
91
|
+
num = 0
|
|
92
|
+
hash.each_value do |v|
|
|
93
|
+
num += v.size
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
return num
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def has_serious?
|
|
100
|
+
serious_number > 0 ? true : false
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def has_ordinary?
|
|
104
|
+
ordinary_number > 0 ? true : false
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def has_compare?
|
|
108
|
+
compare_number > 0 ? true : false
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# 按照权重,对 device_warning 排序
|
|
112
|
+
def device_warning_sort
|
|
113
|
+
arr = device_warning.to_a
|
|
114
|
+
arr.sort! do |x, y|
|
|
115
|
+
x1 = x[1]
|
|
116
|
+
y1 = y[1]
|
|
117
|
+
x_wgt = (x1.serious_number*5) + (x1.ordinary_number) + (x1.compare_number*3)
|
|
118
|
+
y_wgt = (y1.serious_number*5) + (y1.ordinary_number) + (y1.compare_number*3)
|
|
119
|
+
y_wgt <=> x_wgt
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
return arr
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# 按照设备分类取到的严重警告数
|
|
126
|
+
def device_serious_sort
|
|
127
|
+
st = []
|
|
128
|
+
@device_warning.each_pair do |name, klass|
|
|
129
|
+
st << [name, klass.serious_number]
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
st.sort! do |x, y|
|
|
133
|
+
y[1] <=> x[1]
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
st.delete_if do |x|
|
|
137
|
+
x[0].empty? or x[1] == 0
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# 按照设备分类取到的一般警告数
|
|
142
|
+
def device_ordinary_sort
|
|
143
|
+
st = []
|
|
144
|
+
@device_warning.each_pair do |name, klass|
|
|
145
|
+
st << [name, klass.ordinary_number]
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
st.sort! do |x, y|
|
|
149
|
+
y[1] <=> x[1]
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
st.delete_if do |x|
|
|
153
|
+
x[0].empty? or x[1] == 0
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# 发生频率高的问题
|
|
158
|
+
def problem_frequency
|
|
159
|
+
tmp = []
|
|
160
|
+
summary.each_value do |info|
|
|
161
|
+
info.each_pair do |prb, dvs|
|
|
162
|
+
tmp << [prb, dvs.size]
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# 反向排序
|
|
167
|
+
tmp.sort { |x, y| x[1] <=> y[1] }.reverse
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# 取得严重信息的描述列表
|
|
171
|
+
# 返回结构:
|
|
172
|
+
# :crc => { :description => CRC描述类,
|
|
173
|
+
# :devices => [[dev1, klass1], ...] }
|
|
174
|
+
def serious_description
|
|
175
|
+
res = {}
|
|
176
|
+
serious_info.each_pair do |prb, dvs_info|
|
|
177
|
+
res[prb] = { :description => @descripion.get(prb) }
|
|
178
|
+
tmp = []
|
|
179
|
+
dvs_info.each_pair do |device_name, info|
|
|
180
|
+
tmp << [device_name, info[:klass]]
|
|
181
|
+
end
|
|
182
|
+
res[prb][:devices] = tmp
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
return res
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# 严重信息
|
|
189
|
+
def serious_info
|
|
190
|
+
summary[:serious]
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def ordinary_info
|
|
194
|
+
summary[:ordinary]
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def compare_info
|
|
198
|
+
summary[:compare]
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
private
|
|
202
|
+
|
|
203
|
+
# 清零变量
|
|
204
|
+
def clear
|
|
205
|
+
clear_summary
|
|
206
|
+
clear_device_warning
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def clear_summary
|
|
210
|
+
@summary = {
|
|
211
|
+
:serious => {},
|
|
212
|
+
:ordinary => {},
|
|
213
|
+
:compare => {}
|
|
214
|
+
}
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def clear_device_warning
|
|
218
|
+
@device_warning = {}
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# 方便使用
|
|
222
|
+
def device_manager
|
|
223
|
+
@device_manager
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# 方便使用 devices
|
|
227
|
+
def devices
|
|
228
|
+
device_manager.devices
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
end
|
|
232
|
+
end
|
data/lib/aio/core.rb
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# All in this require
|
|
2
|
+
|
|
3
|
+
module Aio
|
|
4
|
+
|
|
5
|
+
# License
|
|
6
|
+
require "aio/license"
|
|
7
|
+
|
|
8
|
+
# UI
|
|
9
|
+
require "aio/ui"
|
|
10
|
+
|
|
11
|
+
# Base
|
|
12
|
+
require "aio/base"
|
|
13
|
+
|
|
14
|
+
# Text
|
|
15
|
+
require "aio/core/text"
|
|
16
|
+
|
|
17
|
+
# Module
|
|
18
|
+
require "aio/core/module"
|
|
19
|
+
require "aio/core/module_manager"
|
|
20
|
+
require "aio/core/module_loader"
|
|
21
|
+
|
|
22
|
+
# Warning
|
|
23
|
+
require "aio/core/warning"
|
|
24
|
+
|
|
25
|
+
# Device
|
|
26
|
+
require "aio/core/device"
|
|
27
|
+
require "aio/core/device_manager"
|
|
28
|
+
|
|
29
|
+
# Parse
|
|
30
|
+
require "aio/core/parse"
|
|
31
|
+
end
|
|
32
|
+
|