aio_elin 0.0.1 → 1.0.0
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 +4 -4
- data/config.rb +32 -32
- data/lib/aio/base/toolkit/excel_wps.rb +1 -0
- data/lib/aio/base/toolkit/hash.rb +95 -0
- data/lib/aio/base/toolkit/myers.rb +161 -0
- data/lib/aio/base/toolkit.rb +2 -0
- data/lib/aio/core/device/cmd_switch.rb +1 -1
- data/lib/aio/core/device/h3c.rb +2 -0
- data/lib/aio/core/device/maipu.rb +8 -0
- data/lib/aio/core/device/methods.rb +230 -228
- data/lib/aio/core/device/parent_device.rb +270 -267
- data/lib/aio/core/device_manager.rb +255 -202
- data/lib/aio/core/module/cmd.rb +155 -150
- data/lib/aio/core/module/compare.rb +39 -0
- data/lib/aio/core/module/output_style.rb +2 -0
- data/lib/aio/core/module.rb +1 -0
- data/lib/aio/core/module_loader.rb +11 -0
- data/lib/aio/core/parse/file.rb +12 -14
- data/lib/aio/core/parse/parser.rb +99 -87
- data/lib/aio/core/parse/parser_machine/has_device_state.rb +42 -42
- data/lib/aio/core/parse/parser_machine.rb +44 -44
- data/lib/aio/core/text/block.rb +88 -0
- data/lib/aio/core/text/compare.rb +109 -0
- data/lib/aio/core/text/context.rb +206 -206
- data/lib/aio/core/text/line_string.rb +17 -62
- data/lib/aio/core/text/match_string_info.rb +73 -0
- data/lib/aio/core/text/warning.rb +175 -175
- data/lib/aio/core/text.rb +3 -0
- data/lib/aio/core/warning/warning_summarize.rb +246 -229
- data/lib/aio/core.rb +3 -0
- data/lib/aio/ui/logger.rb +38 -0
- data/lib/aio/ui/verbose.rb +6 -2
- data/lib/aio/ui.rb +135 -134
- data/lib/modules/cmd/cisco/show_version.rb +84 -84
- data/lib/modules/cmd/h3c/display_cpu.rb +41 -41
- data/lib/modules/cmd/h3c/display_version.rb +43 -43
- data/lib/modules/cmd/maipu/show_clock.rb +32 -0
- data/lib/modules/cmd/maipu/show_cpu.rb +36 -0
- data/lib/modules/cmd/maipu/show_ip_interface_brief.rb +44 -0
- data/lib/modules/cmd/maipu/show_memory.rb +22 -22
- data/lib/modules/cmd/maipu/show_version.rb +40 -40
- data/lib/modules/input/style/compare_xml.rb +73 -73
- data/lib/modules/output/style/cmds.rb +3 -3
- data/lib/modules/output/style/compare_diff.rb +23 -0
- data/lib/modules/output/style/excel_table_office.rb +1 -0
- data/lib/modules/output/style/excel_table_wps.rb +1 -0
- data/lib/modules/output/style/summary_report.rb +2 -1
- data/lib/modules/special/style/compare.rb +153 -103
- data/lib/modules/special/style/compare_old.rb +121 -0
- data/lib/modules/special/style/compare_with_device_manager.rb +227 -0
- metadata +16 -3
@@ -1,232 +1,249 @@
|
|
1
1
|
# 用于收集汇总所有设备的警告信息
|
2
2
|
module Aio::Warning
|
3
|
-
class WarningSummarize
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
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
|
+
def inspect
|
29
|
+
"#<Aio::Warning::WarningSummarize @summary, @device_warning>"
|
30
|
+
end
|
31
|
+
|
32
|
+
# 整理警告信息
|
33
|
+
# 改变结构变成
|
34
|
+
def tidy_warning
|
35
|
+
# 清除原先 summary
|
36
|
+
clear
|
37
|
+
|
38
|
+
devices.each_pair do |device, klass|
|
39
|
+
warning_klass = klass.warning_klass
|
40
|
+
@device_warning[device] = klass.warning_klass
|
41
|
+
|
42
|
+
# 当有严重警告的时候
|
43
|
+
if warning_klass.has_warning_serious?
|
44
|
+
append_issue(warning_klass.warning_info_serious, :serious, device, klass)
|
45
|
+
end
|
46
|
+
|
47
|
+
# 当有一般信息的时候
|
48
|
+
if warning_klass.has_warning_ordinary?
|
49
|
+
append_issue(warning_klass.warning_info_ordinary, :ordinary, device, klass)
|
50
|
+
end
|
51
|
+
|
52
|
+
# 当有比较误差信息的时候
|
53
|
+
# NOTE 这个比较暂时去掉
|
54
|
+
if warning_klass.has_warning_compare?
|
55
|
+
# append_issue(warning_klass.warning_info_compare, :compare, device, klass)
|
56
|
+
|
57
|
+
append_issue_compare(warning_klass.warning_info_compare, device, klass)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
@summary
|
62
|
+
end
|
63
|
+
|
64
|
+
# 增加警告信息
|
65
|
+
def append_issue(warning_info, level, device, klass)
|
66
|
+
warning_info.each_pair do |issue, detail|
|
67
|
+
# 如果没有, 则加入Hash
|
68
|
+
unless summary[level].has_key?(issue)
|
69
|
+
summary[level][issue] = {}
|
70
|
+
end
|
71
|
+
|
72
|
+
summary[level][issue][device] = { :klass => klass, :detail => detail }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# 针对compare添加警告信息
|
77
|
+
# 为了跟其他种类的警告信息一致,重复两次:compare
|
78
|
+
def append_issue_compare(warning_info, device, klass)
|
79
|
+
summary[:compare][:compare] = {}
|
80
|
+
summary[:compare][:compare][device] = {
|
81
|
+
klass: klass,
|
82
|
+
detail: warning_info
|
83
|
+
}
|
84
|
+
end
|
85
|
+
|
86
|
+
# 严重警告条数
|
87
|
+
def serious_number
|
88
|
+
number(summary[:serious])
|
89
|
+
end
|
90
|
+
|
91
|
+
# 一般警告信息条数
|
92
|
+
def ordinary_number
|
93
|
+
number(summary[:ordinary])
|
94
|
+
end
|
95
|
+
|
96
|
+
# 比较差异警告条数
|
97
|
+
def compare_number
|
98
|
+
number(summary[:compare])
|
99
|
+
end
|
100
|
+
|
101
|
+
# 全部警告条数
|
102
|
+
def total_number
|
103
|
+
serious_number + ordinary_number + compare_number
|
104
|
+
end
|
105
|
+
|
106
|
+
# 统计警告条目数
|
107
|
+
def number(hash)
|
108
|
+
num = 0
|
109
|
+
hash.each_value do |v|
|
110
|
+
num += v.size
|
111
|
+
end
|
112
|
+
|
113
|
+
return num
|
114
|
+
end
|
115
|
+
|
116
|
+
def has_serious?
|
117
|
+
serious_number > 0 ? true : false
|
118
|
+
end
|
119
|
+
|
120
|
+
def has_ordinary?
|
121
|
+
ordinary_number > 0 ? true : false
|
122
|
+
end
|
123
|
+
|
124
|
+
def has_compare?
|
125
|
+
compare_number > 0 ? true : false
|
126
|
+
end
|
127
|
+
|
128
|
+
# 按照权重,对 device_warning 排序
|
129
|
+
def device_warning_sort
|
130
|
+
arr = device_warning.to_a
|
131
|
+
arr.sort! do |x, y|
|
132
|
+
x1 = x[1]
|
133
|
+
y1 = y[1]
|
134
|
+
x_wgt = (x1.serious_number*5) + (x1.ordinary_number) + (x1.compare_number*3)
|
135
|
+
y_wgt = (y1.serious_number*5) + (y1.ordinary_number) + (y1.compare_number*3)
|
136
|
+
y_wgt <=> x_wgt
|
137
|
+
end
|
138
|
+
|
139
|
+
return arr
|
140
|
+
end
|
141
|
+
|
142
|
+
# 按照设备分类取到的严重警告数
|
143
|
+
def device_serious_sort
|
144
|
+
st = []
|
145
|
+
@device_warning.each_pair do |name, klass|
|
146
|
+
st << [name, klass.serious_number]
|
147
|
+
end
|
148
|
+
|
149
|
+
st.sort! do |x, y|
|
150
|
+
y[1] <=> x[1]
|
151
|
+
end
|
152
|
+
|
153
|
+
st.delete_if do |x|
|
154
|
+
x[0].empty? or x[1] == 0
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
# 按照设备分类取到的一般警告数
|
159
|
+
def device_ordinary_sort
|
160
|
+
st = []
|
161
|
+
@device_warning.each_pair do |name, klass|
|
162
|
+
st << [name, klass.ordinary_number]
|
163
|
+
end
|
164
|
+
|
165
|
+
st.sort! do |x, y|
|
166
|
+
y[1] <=> x[1]
|
167
|
+
end
|
168
|
+
|
169
|
+
st.delete_if do |x|
|
170
|
+
x[0].empty? or x[1] == 0
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
# 发生频率高的问题
|
175
|
+
def problem_frequency
|
176
|
+
tmp = []
|
177
|
+
summary.each_value do |info|
|
178
|
+
info.each_pair do |prb, dvs|
|
179
|
+
tmp << [prb, dvs.size]
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
# 反向排序
|
184
|
+
tmp.sort { |x, y| x[1] <=> y[1] }.reverse
|
185
|
+
end
|
186
|
+
|
187
|
+
# 取得严重信息的描述列表
|
188
|
+
# 返回结构:
|
189
|
+
# :crc => { :description => CRC描述类,
|
190
|
+
# :devices => [[dev1, klass1], ...] }
|
191
|
+
def serious_description
|
192
|
+
res = {}
|
193
|
+
serious_info.each_pair do |prb, dvs_info|
|
194
|
+
res[prb] = { :description => @descripion.get(prb) }
|
195
|
+
tmp = []
|
196
|
+
dvs_info.each_pair do |device_name, info|
|
197
|
+
tmp << [device_name, info[:klass]]
|
198
|
+
end
|
199
|
+
res[prb][:devices] = tmp
|
200
|
+
end
|
201
|
+
|
202
|
+
return res
|
203
|
+
end
|
204
|
+
|
205
|
+
# 严重信息
|
206
|
+
def serious_info
|
207
|
+
summary[:serious]
|
208
|
+
end
|
209
|
+
|
210
|
+
def ordinary_info
|
211
|
+
summary[:ordinary]
|
212
|
+
end
|
213
|
+
|
214
|
+
def compare_info
|
215
|
+
summary[:compare]
|
216
|
+
end
|
217
|
+
|
218
|
+
private
|
219
|
+
|
220
|
+
# 清零变量
|
221
|
+
def clear
|
222
|
+
clear_summary
|
223
|
+
clear_device_warning
|
224
|
+
end
|
225
|
+
|
226
|
+
def clear_summary
|
227
|
+
@summary = {
|
228
|
+
:serious => {},
|
229
|
+
:ordinary => {},
|
230
|
+
:compare => {}
|
231
|
+
}
|
232
|
+
end
|
233
|
+
|
234
|
+
def clear_device_warning
|
235
|
+
@device_warning = {}
|
236
|
+
end
|
237
|
+
|
238
|
+
# 方便使用
|
239
|
+
def device_manager
|
240
|
+
@device_manager
|
241
|
+
end
|
242
|
+
|
243
|
+
# 方便使用 devices
|
244
|
+
def devices
|
245
|
+
device_manager.devices
|
246
|
+
end
|
247
|
+
|
248
|
+
end
|
232
249
|
end
|
data/lib/aio/core.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Aio::Ui
|
2
|
+
|
3
|
+
require 'singleton'
|
4
|
+
|
5
|
+
# 单例日志保存类
|
6
|
+
class Logger
|
7
|
+
|
8
|
+
include Singleton
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
clear_log
|
12
|
+
end
|
13
|
+
|
14
|
+
def info=(msg)
|
15
|
+
@log[:info] << msg
|
16
|
+
end
|
17
|
+
|
18
|
+
def debug=(msg)
|
19
|
+
@log[:debug] << msg
|
20
|
+
end
|
21
|
+
|
22
|
+
def info
|
23
|
+
@log[:info]
|
24
|
+
end
|
25
|
+
|
26
|
+
def debug
|
27
|
+
@log[:info]
|
28
|
+
end
|
29
|
+
|
30
|
+
def clear_log
|
31
|
+
@log = {}
|
32
|
+
@log[:info] = []
|
33
|
+
@log[:debug] = []
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
data/lib/aio/ui/verbose.rb
CHANGED
@@ -13,11 +13,15 @@ module Aio::Ui
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def print_good(str)
|
16
|
-
|
16
|
+
res = "[+] " << str
|
17
|
+
Aio::Ui::Logger.instance.info = res
|
18
|
+
puts res
|
17
19
|
end
|
18
20
|
|
19
21
|
def print_error(str)
|
20
|
-
|
22
|
+
res = "[-] " << str
|
23
|
+
Aio::Ui::Logger.instance.info = res
|
24
|
+
puts res
|
21
25
|
end
|
22
26
|
|
23
27
|
def clear_line
|