aio_elin 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/config.rb +32 -32
  3. data/lib/aio/base/toolkit/excel_wps.rb +1 -0
  4. data/lib/aio/base/toolkit/hash.rb +95 -0
  5. data/lib/aio/base/toolkit/myers.rb +161 -0
  6. data/lib/aio/base/toolkit.rb +2 -0
  7. data/lib/aio/core/device/cmd_switch.rb +1 -1
  8. data/lib/aio/core/device/h3c.rb +2 -0
  9. data/lib/aio/core/device/maipu.rb +8 -0
  10. data/lib/aio/core/device/methods.rb +230 -228
  11. data/lib/aio/core/device/parent_device.rb +270 -267
  12. data/lib/aio/core/device_manager.rb +255 -202
  13. data/lib/aio/core/module/cmd.rb +155 -150
  14. data/lib/aio/core/module/compare.rb +39 -0
  15. data/lib/aio/core/module/output_style.rb +2 -0
  16. data/lib/aio/core/module.rb +1 -0
  17. data/lib/aio/core/module_loader.rb +11 -0
  18. data/lib/aio/core/parse/file.rb +12 -14
  19. data/lib/aio/core/parse/parser.rb +99 -87
  20. data/lib/aio/core/parse/parser_machine/has_device_state.rb +42 -42
  21. data/lib/aio/core/parse/parser_machine.rb +44 -44
  22. data/lib/aio/core/text/block.rb +88 -0
  23. data/lib/aio/core/text/compare.rb +109 -0
  24. data/lib/aio/core/text/context.rb +206 -206
  25. data/lib/aio/core/text/line_string.rb +17 -62
  26. data/lib/aio/core/text/match_string_info.rb +73 -0
  27. data/lib/aio/core/text/warning.rb +175 -175
  28. data/lib/aio/core/text.rb +3 -0
  29. data/lib/aio/core/warning/warning_summarize.rb +246 -229
  30. data/lib/aio/core.rb +3 -0
  31. data/lib/aio/ui/logger.rb +38 -0
  32. data/lib/aio/ui/verbose.rb +6 -2
  33. data/lib/aio/ui.rb +135 -134
  34. data/lib/modules/cmd/cisco/show_version.rb +84 -84
  35. data/lib/modules/cmd/h3c/display_cpu.rb +41 -41
  36. data/lib/modules/cmd/h3c/display_version.rb +43 -43
  37. data/lib/modules/cmd/maipu/show_clock.rb +32 -0
  38. data/lib/modules/cmd/maipu/show_cpu.rb +36 -0
  39. data/lib/modules/cmd/maipu/show_ip_interface_brief.rb +44 -0
  40. data/lib/modules/cmd/maipu/show_memory.rb +22 -22
  41. data/lib/modules/cmd/maipu/show_version.rb +40 -40
  42. data/lib/modules/input/style/compare_xml.rb +73 -73
  43. data/lib/modules/output/style/cmds.rb +3 -3
  44. data/lib/modules/output/style/compare_diff.rb +23 -0
  45. data/lib/modules/output/style/excel_table_office.rb +1 -0
  46. data/lib/modules/output/style/excel_table_wps.rb +1 -0
  47. data/lib/modules/output/style/summary_report.rb +2 -1
  48. data/lib/modules/special/style/compare.rb +153 -103
  49. data/lib/modules/special/style/compare_old.rb +121 -0
  50. data/lib/modules/special/style/compare_with_device_manager.rb +227 -0
  51. metadata +16 -3
@@ -3,108 +3,158 @@
3
3
  require "aio/core"
4
4
 
5
5
  class Aio::Module::SpecialStyle::Compare < Aio::Module::SpecialStyle
6
- include Aio::Module
7
-
8
- include Aio::Ui::Verbose
9
-
10
- # 用于传递已经分析好的现有的device
11
- attr_accessor :device_manager
12
-
13
- # 用于传递由XML,Json生成并已经解析的Hash值
14
- attr_accessor :input_benchmark
15
-
16
- def initialize
17
- super({
18
- :author => "Elin",
19
- :description => "此模块用于解析两个Hash值的不同点,并发出警告",
20
- })
21
- end
22
-
23
- def parse
24
- # 将device_manager 中的按照{device_name => useful} 形式重新编排
25
- # cmds_useful为深度克隆信息,对本体无影响
26
- device_warning = {}
27
- total = device_manager.devices_number
28
- print_good "总共 #{total} 台设备进行比较"
29
-
30
- device_manager.each_devices_with_index do |device_name, device_klass, i|
31
-
32
- device_warning[device_name] = Aio::Base::Toolkit::DeepClone.clone(device_klass.cmds_useful)
33
- # 进度条
34
- progress_bar(total, i+1, device_name)
35
-
36
- end
37
-
38
- clear_line
39
- clear_other_info(device_warning, input_benchmark)
40
- delete(device_warning, input_benchmark)
41
- end
42
-
43
- # 只留下要比较的两个数据有共同命令的交集,其他的命令就丢弃
44
- # 因为即使是保留了,产生的也是大量的垃圾信息
45
- def clear_other_info(device_warning, input_benchmark)
46
- device_arr = {}
47
- input_arr = {}
48
-
49
- # 获得命令信息
50
- device_warning.each_pair { |k, v| device_arr[k] = v.keys }
51
- input_benchmark.each_pair { |k, v| input_arr[k] = v.keys }
52
-
53
- # 删除 device_warning 中多余的命令信息
54
- device_warning.each_pair do |name, hash|
55
- hash.delete_if do |k, v|
56
- next true unless input_arr.has_key?(name)
57
- input_arr[name].include?(k) ? false : true
58
- end
59
- end
60
-
61
- # 删除 input_benchmark 中多余的命令信息
62
- input_benchmark.each_pair do |name, hash|
63
- hash.delete_if do |k, v|
64
- next true unless device_arr.has_key?(name)
65
- device_arr[name].include?(k) ? false : true
66
- end
67
- end
68
- end
69
-
70
- def delete(cm1, cm2)
71
- cm1.delete_if do |key, val|
72
-
73
- # 当末端是Hash时,迭代循环
74
- if val.class == Hash
75
- # 保证无论是Symbol 还是 String 都能互换
76
- unless cm2.has_key?(key)
77
- cm2_val = cm2[key.to_sym] if key.kind_of? String
78
- cm2_val = cm2[key.to_s] if key.kind_of? Symbol
79
- next if cm2_val.nil?
80
- else
81
- cm2_val = cm2[key]
82
- end
83
- res = delete(cm1[key], cm2_val)
84
- # 当有内容时,说明存在差异,则保留
85
- res.empty? ? true : false
86
- else
87
-
88
- # 当末端不是Hash时,判断是否相等
89
- unless cm2.has_key?(key)
90
- cm2_val = cm2[key.to_sym] if key.kind_of? String
91
- cm2_val = cm2[key.to_s] if key.kind_of? Symbol
92
- next if cm2_val.nil?
93
- else
94
- cm2_val = cm2[key]
95
- end
96
- #cm1[key].eql?(cm2_val)
97
- # 当配置中有信息时,那么只有当大于配置中的区间波动才会被记录
98
- # 当有Pass值的时候,直接Pass
99
- # 只有是数值才可以
100
- compare = Aio::Config::Warning::Compare
101
- if compare.has_key?(key)
102
- compare[key] == "pass" ? true : (cm1[key].to_i < cm2_val.to_i + compare[key])
103
- else
104
- cm1[key].eql?(cm2_val)
105
- end
106
- end
107
- end
108
- end
6
+ include Aio::Module
7
+
8
+ include Aio::Ui::Verbose
9
+
10
+ # 用于传递已经分析好的现有的device
11
+ attr_accessor :device_manager
12
+
13
+ # 用于传递由XML,Json生成并已经解析的Hash值
14
+ attr_accessor :input_benchmark
15
+
16
+ def initialize
17
+ super({
18
+ :author => "Elin",
19
+ :description => "此模块用于解析两个Hash值的不同点,并发出警告",
20
+ })
21
+ end
22
+
23
+ def parse
24
+ # 将device_manager 中的按照{device_name => useful} 形式重新编排
25
+ # cmds_useful为深度克隆信息,对本体无影响
26
+ device_warning = {}
27
+ total = device_manager.devices_number
28
+ print_good "总共 #{total} 台设备进行比较"
29
+
30
+ device_manager.each_devices_with_index do |device_name, device_klass, i|
31
+
32
+ device_warning[device_name] = Aio::Base::Toolkit::DeepClone.clone(device_klass.cmds_useful)
33
+ # 进度条
34
+ progress_bar(total, i+1, device_name)
35
+
36
+ end
37
+
38
+ @compare_hash = Aio::Module::Compare.new
39
+ clear_line
40
+
41
+ clear_other_info(device_warning, input_benchmark)
42
+ compare(device_warning, input_benchmark)
43
+ end
44
+
45
+ # 只留下要比较的两个数据有共同命令的交集,其他的命令就丢弃
46
+ # 因为即使是保留了,产生的也是大量的垃圾信息
47
+ def clear_other_info(device_warning, input_benchmark)
48
+ device_arr = {}
49
+ input_arr = {}
50
+
51
+ # 获得命令信息
52
+ device_warning.each_pair { |k, v| device_arr[k] = v.keys }
53
+ input_benchmark.each_pair { |k, v| input_arr[k] = v.keys }
54
+
55
+ # 删除 device_warning 中多余的命令信息
56
+ device_warning.each_pair do |name, hash|
57
+ hash.delete_if do |k, v|
58
+ next true unless input_arr.has_key?(name)
59
+ input_arr[name].include?(k) ? false : true
60
+ end
61
+ end
62
+
63
+ # 删除 input_benchmark 中多余的命令信息
64
+ input_benchmark.each_pair do |name, hash|
65
+ hash.delete_if do |k, v|
66
+ next true unless device_arr.has_key?(name)
67
+ device_arr[name].include?(k) ? false : true
68
+ end
69
+ end
70
+ end
71
+
72
+ def compare(cm1, cm2, opts={})
73
+ # NOTE 待加PASS
74
+ @config_compare = Aio::Config::Warning::Compare
75
+
76
+ cm1_arr = []
77
+ cm2_arr = []
78
+ Aio::Base::Toolkit::Hash.flat(cm1,
79
+ Aio::Base::Toolkit::Chain.new,
80
+ cm1_arr)
81
+
82
+ Aio::Base::Toolkit::Hash.flat(cm2,
83
+ Aio::Base::Toolkit::Chain.new,
84
+ cm2_arr)
85
+
86
+ cp = find_diff(cm1_arr, cm2_arr)
87
+
88
+ diff = { cm1: [], cm2: []}
89
+ # NOTE 还需要加入config_compare
90
+ # diff = {
91
+ # cm1: [ [device_name, cmd, str], .. ],
92
+ # cm2: [ [device_name, cmd, str], .. ]
93
+ # }
94
+ cp[:cm1].each do |e|
95
+ # 加入cmd
96
+ cmd = e[1]
97
+ diff[:cm1] << [e.first, cmd, e.last]
98
+ end
99
+
100
+ cp[:cm2].each do |e|
101
+ diff[e.first] ||= {}
102
+ # 加入cmd
103
+ cmd = e[1]
104
+ diff[:cm2] << [e.first, cmd, e.last]
105
+ end
106
+
107
+ diff
108
+ end
109
+
110
+ def find_diff(cm1, cm2)
111
+ res = {}
112
+ res[:cm1] = []
113
+ res[:cm2] = []
114
+
115
+ # res 为相同的内容
116
+ total = cm1.size
117
+ cm1.each_with_index do |link_1, i|
118
+
119
+ cm2.each do |link_2|
120
+
121
+ # 如果长度不一致,就下一个
122
+ if link_1.size != link_2.size
123
+ next
124
+
125
+ else
126
+ name_1 = long_name(link_1)
127
+ name_2 = long_name(link_2)
128
+
129
+ if name_1 == name_2
130
+ res[:cm1] << link_1
131
+ res[:cm2] << link_2
132
+
133
+ # 找到了相同的就跳出小循环
134
+ break
135
+ end
136
+
137
+ end
138
+ end
139
+
140
+ # 进度条
141
+ progress_bar(total, i+1, '')
142
+ end
143
+
144
+ clear_line
145
+
146
+ # 获得不同的内容
147
+ res[:cm1] = cm1 - res[:cm1]
148
+ res[:cm2] = cm2 - res[:cm2]
149
+
150
+ res
151
+ end
152
+
153
+ # 将一个数组转化成一长串字符作为比较方式
154
+ def long_name(arr)
155
+ res = ''
156
+ arr.each { |x| res += x.to_s }
157
+ res
158
+ end
109
159
 
110
160
  end
@@ -0,0 +1,121 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::SpecialStyle::CompareOld < Aio::Module::SpecialStyle
6
+ include Aio::Module
7
+
8
+ include Aio::Ui::Verbose
9
+
10
+ # 用于传递已经分析好的现有的device
11
+ attr_accessor :device_manager
12
+
13
+ # 用于传递由XML,Json生成并已经解析的Hash值
14
+ attr_accessor :input_benchmark
15
+
16
+ def initialize
17
+ super({
18
+ :author => "Elin",
19
+ :description => "此模块用于解析两个Hash值的不同点,并发出警告,此模块废弃",
20
+ })
21
+ end
22
+
23
+ def parse
24
+ # 将device_manager 中的按照{device_name => useful} 形式重新编排
25
+ # cmds_useful为深度克隆信息,对本体无影响
26
+ device_warning = {}
27
+ total = device_manager.devices_number
28
+ print_good "总共 #{total} 台设备进行比较"
29
+
30
+ device_manager.each_devices_with_index do |device_name, device_klass, i|
31
+
32
+ device_warning[device_name] = Aio::Base::Toolkit::DeepClone.clone(device_klass.cmds_useful)
33
+ # 进度条
34
+ progress_bar(total, i+1, device_name)
35
+
36
+ end
37
+
38
+ debugger
39
+ clear_line
40
+ clear_other_info(device_warning, input_benchmark)
41
+ delete(device_warning, input_benchmark)
42
+ end
43
+
44
+ # 只留下要比较的两个数据有共同命令的交集,其他的命令就丢弃
45
+ # 因为即使是保留了,产生的也是大量的垃圾信息
46
+ def clear_other_info(device_warning, input_benchmark)
47
+ device_arr = {}
48
+ input_arr = {}
49
+
50
+ # 获得命令信息
51
+ device_warning.each_pair { |k, v| device_arr[k] = v.keys }
52
+ input_benchmark.each_pair { |k, v| input_arr[k] = v.keys }
53
+
54
+ # 删除 device_warning 中多余的命令信息
55
+ device_warning.each_pair do |name, hash|
56
+ hash.delete_if do |k, v|
57
+ next true unless input_arr.has_key?(name)
58
+ input_arr[name].include?(k) ? false : true
59
+ end
60
+ end
61
+
62
+ # 删除 input_benchmark 中多余的命令信息
63
+ input_benchmark.each_pair do |name, hash|
64
+ hash.delete_if do |k, v|
65
+ next true unless device_arr.has_key?(name)
66
+ device_arr[name].include?(k) ? false : true
67
+ end
68
+ end
69
+ end
70
+
71
+ def delete(cm1, cm2)
72
+ compare = Aio::Config::Warning::Compare
73
+
74
+ cm1.delete_if do |key, val|
75
+
76
+ # 当末端是Hash时,迭代循环
77
+ if val.class == Hash
78
+ # 保证无论是Symbol 还是 String 都能互换
79
+ # 有可能整个val都不一样
80
+ unless cm2.has_key?(key)
81
+ cm2_val = cm2[key.to_sym] if key.kind_of? String
82
+ cm2_val = cm2[key.to_s] if key.kind_of? Symbol
83
+ next if cm2_val.nil?
84
+ else
85
+ cm2_val = cm2[key]
86
+ end
87
+ res = delete(cm1[key], cm2_val)
88
+ # 当有内容时,说明存在差异,则保留
89
+ res.empty? ? true : false
90
+ else
91
+
92
+ # 当末端不是Hash时,判断是否相等
93
+
94
+ unless cm2.has_key?(key)
95
+ cm2_val = cm2[key.to_sym] if key.kind_of? String
96
+ cm2_val = cm2[key.to_s] if key.kind_of? Symbol
97
+ next if cm2_val.nil?
98
+ else
99
+ cm2_val = cm2[key]
100
+ end
101
+
102
+ #cm1[key].eql?(cm2_val)
103
+ # 当配置中有信息时,那么只有当大于配置中的区间波动才会被记录
104
+ # 当有Pass值的时候,直接Pass
105
+ # 只有是数值才可以
106
+ if compare.has_key?(key)
107
+ compare[key] == "pass" ? true : (cm1[key].to_i < cm2_val.to_i + compare[key])
108
+ else
109
+
110
+ if cm1[key].eql?(cm2_val)
111
+ true
112
+ else
113
+ cm1[key].compare_val = cm2_val
114
+ false
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
120
+
121
+ end
@@ -0,0 +1,227 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::SpecialStyle::CompareWithDeviceManager < Aio::Module::SpecialStyle
6
+ include Aio::Module
7
+
8
+ include Aio::Ui::Verbose
9
+
10
+ # 用于传递已经分析好的现有的device
11
+ attr_accessor :device_manager
12
+
13
+ # 用于传递由上一次成的device_manager信息
14
+ attr_accessor :input_benchmark
15
+
16
+ def initialize
17
+ super({
18
+ :author => "Elin",
19
+ :description => "此模块用于解析两次生成的device_manager值",
20
+ })
21
+ end
22
+
23
+ def parse
24
+ # 将device_manager 中的按照{device_name => useful} 形式重新编排
25
+ # cmds_useful为深度克隆信息,对本体无影响
26
+ device_warning = {}
27
+ input_benchmark_device_warning = {}
28
+ total = device_manager.devices_number
29
+ print_good "总共 #{total} 台设备进行比较"
30
+
31
+ device_manager.each_devices_with_index do |device_name, device_klass, i|
32
+
33
+ device_warning[device_name] = Aio::Base::Toolkit::DeepClone.clone(device_klass.cmds_useful)
34
+ # 进度条
35
+ progress_bar(total, i+1, device_name)
36
+
37
+ end
38
+
39
+ input_benchmark.each_devices_with_index do |device_name, device_klass, i|
40
+
41
+ input_benchmark_device_warning[device_name] = Aio::Base::Toolkit::DeepClone.clone(device_klass.cmds_useful)
42
+ # 进度条
43
+ progress_bar(total, i+1, device_name)
44
+
45
+ end
46
+
47
+ clear_line
48
+ clear_other_info(device_warning, input_benchmark_device_warning)
49
+ compare(device_warning, input_benchmark_device_warning)
50
+ end
51
+
52
+ # 只留下要比较的两个数据有共同命令的交集,其他的命令就丢弃
53
+ # 因为即使是保留了,产生的也是大量的垃圾信息
54
+ def clear_other_info(device_warning, input_benchmark)
55
+ device_arr = {}
56
+ input_arr = {}
57
+
58
+ # 获得命令信息
59
+ device_warning.each_pair { |k, v| device_arr[k] = v.keys }
60
+ input_benchmark.each_pair { |k, v| input_arr[k] = v.keys }
61
+
62
+ # 删除 device_warning 中多余的命令信息
63
+ device_warning.each_pair do |name, hash|
64
+ hash.delete_if do |k, v|
65
+ next true unless input_arr.has_key?(name)
66
+ input_arr[name].include?(k) ? false : true
67
+ end
68
+ end
69
+
70
+ # 删除 input_benchmark 中多余的命令信息
71
+ input_benchmark.each_pair do |name, hash|
72
+ hash.delete_if do |k, v|
73
+ next true unless device_arr.has_key?(name)
74
+ device_arr[name].include?(k) ? false : true
75
+ end
76
+ end
77
+ end
78
+
79
+ def compare(cm1, cm2, opts={})
80
+ # NOTE 待加PASS
81
+ @config_compare = Aio::Config::Warning::Compare
82
+
83
+ cm1_arr = []
84
+ cm2_arr = []
85
+ Aio::Base::Toolkit::Hash.flat_cm1(cm1,
86
+ Aio::Base::Toolkit::Chain.new,
87
+ cm1_arr)
88
+
89
+ Aio::Base::Toolkit::Hash.flat_cm2(cm2,
90
+ Aio::Base::Toolkit::Chain.new,
91
+ cm2_arr)
92
+
93
+ cp = find_diff_2(cm1_arr, cm2_arr)
94
+
95
+ diff = { cm1: [], cm2: []}
96
+ # NOTE 还需要加入config_compare
97
+ # diff = {
98
+ # cm1: [ [device_name, cmd, key, str], .. ],
99
+ # cm2: [ [device_name, cmd, key, str], .. ]
100
+ # }
101
+ cp[:cm1].each do |e|
102
+ # 加入cmd
103
+ cmd = e[1]
104
+ diff[:cm1] << [e.first, cmd, e[-2], e.last]
105
+ end
106
+
107
+ cp[:cm2].each do |e|
108
+ diff[e.first] ||= {}
109
+ # 加入cmd
110
+ cmd = e[1]
111
+ diff[:cm2] << [e.first, cmd, e[-2], e.last]
112
+ end
113
+
114
+ #detect_pass?(diff)
115
+
116
+ diff
117
+ end
118
+
119
+ # 检查是否为需要忽略的项
120
+ def detect_pass?(diff)
121
+
122
+ # 当没有就返回false,表示不能跳过
123
+ diff.each_value do |elem|
124
+
125
+ # 取key值
126
+ elem.delete_if do |e|
127
+
128
+ key = e[2]
129
+ if @config_compare.has_key?(key.to_sym)
130
+ @config_compare[key] == 'pass' ? true : false
131
+ end
132
+ end
133
+ end
134
+
135
+ end
136
+
137
+
138
+
139
+ # 低效率的双循环结构
140
+ def find_diff(cm1, cm2)
141
+ res = {}
142
+ cm1_dup = cm1.dup
143
+ cm2_dup = cm2.dup
144
+
145
+ debugger
146
+ # res 为相同的内容
147
+ total = cm1.size
148
+ cm1.each_with_index do |link_1, i|
149
+
150
+ cm2.each do |link_2|
151
+
152
+ # 如果长度不一致,就下一个
153
+ if link_1.size != link_2.size
154
+ next
155
+
156
+ else
157
+ name_1 = long_name(link_1)
158
+ name_2 = long_name(link_2)
159
+
160
+ if name_1 == name_2
161
+ cm1_dup.delete link_1
162
+ cm2_dup.delete link_2
163
+
164
+ # 找到了相同的就跳出小循环
165
+ break
166
+ end
167
+
168
+ end
169
+ end
170
+
171
+ # 进度条
172
+ progress_bar(total, i+1, '')
173
+ end
174
+
175
+ clear_line
176
+
177
+ # 获得不同的内容
178
+ res[:cm1] = cm1_dup
179
+ res[:cm2] = cm2_dup
180
+
181
+ res
182
+ end
183
+
184
+ # 将一个数组转化成一长串字符作为比较方式
185
+ def long_name(arr)
186
+ res = ''
187
+ arr.each { |x| res += x.to_s }
188
+ res
189
+ end
190
+
191
+ # 排序后循环,效率更高
192
+ def find_diff_2(cm1, cm2)
193
+ cm1.concat(cm2)
194
+ cm1.sort! { |x, y| x.string <=> y.string }
195
+
196
+ tmp = []
197
+ bool = false
198
+ cm1.each_with_index do |e, i|
199
+ # 当为真的时候,说明是重复的,就跳过
200
+ if bool
201
+ bool = false
202
+ next
203
+ end
204
+
205
+ # 当相等的时候,将bool 设置为true,跳过
206
+ if e.eql? cm1[i+1]
207
+ bool = true
208
+ next
209
+ end
210
+
211
+ # 如果和下一个不相等,则说明是单独的,那么就记录
212
+ tmp << e
213
+ end
214
+
215
+ res = { cm1: [], cm2: [] }
216
+ tmp.each do |e|
217
+ case e.cm_type
218
+ when :cm1
219
+ res[:cm1] << e.line
220
+ when :cm2
221
+ res[:cm2] << e.line
222
+ end
223
+ end
224
+
225
+ res
226
+ end
227
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aio_elin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-10 00:00:00.000000000 Z
11
+ date: 2018-11-28 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 网络设备巡检工具
14
14
  email: 365433079@qq.com
@@ -31,7 +31,9 @@ files:
31
31
  - lib/aio/base/toolkit/excel_office.rb
32
32
  - lib/aio/base/toolkit/excel_wps.rb
33
33
  - lib/aio/base/toolkit/excel_wps.rb.bak
34
+ - lib/aio/base/toolkit/hash.rb
34
35
  - lib/aio/base/toolkit/ipaddr.rb
36
+ - lib/aio/base/toolkit/myers.rb
35
37
  - lib/aio/base/toolkit/os.rb
36
38
  - lib/aio/base/toolkit/regexp.rb
37
39
  - lib/aio/base/toolkit/string.rb
@@ -54,6 +56,7 @@ files:
54
56
  - lib/aio/core/device_manager.rb
55
57
  - lib/aio/core/module.rb
56
58
  - lib/aio/core/module/cmd.rb
59
+ - lib/aio/core/module/compare.rb
57
60
  - lib/aio/core/module/description.rb
58
61
  - lib/aio/core/module/input_style.rb
59
62
  - lib/aio/core/module/output_style.rb
@@ -78,8 +81,11 @@ files:
78
81
  - lib/aio/core/parse/parser_machine/no_device_state.rb
79
82
  - lib/aio/core/parse/parser_machine/parent_state.rb
80
83
  - lib/aio/core/text.rb
84
+ - lib/aio/core/text/block.rb
85
+ - lib/aio/core/text/compare.rb
81
86
  - lib/aio/core/text/context.rb
82
87
  - lib/aio/core/text/line_string.rb
88
+ - lib/aio/core/text/match_string_info.rb
83
89
  - lib/aio/core/text/warning.rb
84
90
  - lib/aio/core/warning.rb
85
91
  - lib/aio/core/warning/description.rb
@@ -90,6 +96,7 @@ files:
90
96
  - lib/aio/resource/logo.png
91
97
  - lib/aio/ui.rb
92
98
  - lib/aio/ui/banner.rb
99
+ - lib/aio/ui/logger.rb
93
100
  - lib/aio/ui/readable_text.rb
94
101
  - lib/aio/ui/verbose.rb
95
102
  - lib/aio/ui/version.rb
@@ -120,7 +127,10 @@ files:
120
127
  - lib/modules/cmd/h3c/display_power.rb
121
128
  - lib/modules/cmd/h3c/display_version.rb
122
129
  - lib/modules/cmd/h3c/display_vrrp_verbose.rb
130
+ - lib/modules/cmd/maipu/show_clock.rb
131
+ - lib/modules/cmd/maipu/show_cpu.rb
123
132
  - lib/modules/cmd/maipu/show_env.rb
133
+ - lib/modules/cmd/maipu/show_ip_interface_brief.rb
124
134
  - lib/modules/cmd/maipu/show_ip_route.rb
125
135
  - lib/modules/cmd/maipu/show_ip_route_statistic.rb
126
136
  - lib/modules/cmd/maipu/show_memory.rb
@@ -142,6 +152,7 @@ files:
142
152
  - lib/modules/input/style/xinhua_nat.rb
143
153
  - lib/modules/output/style/boc_day.rb
144
154
  - lib/modules/output/style/cmds.rb
155
+ - lib/modules/output/style/compare_diff.rb
145
156
  - lib/modules/output/style/compare_json.rb
146
157
  - lib/modules/output/style/compare_report.rb
147
158
  - lib/modules/output/style/compare_xml.rb
@@ -149,6 +160,8 @@ files:
149
160
  - lib/modules/output/style/excel_table_wps.rb
150
161
  - lib/modules/output/style/summary_report.rb
151
162
  - lib/modules/special/style/compare.rb
163
+ - lib/modules/special/style/compare_old.rb
164
+ - lib/modules/special/style/compare_with_device_manager.rb
152
165
  homepage: http://rubygems.org/gems/aio
153
166
  licenses:
154
167
  - NGPL
@@ -169,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
182
  version: '0'
170
183
  requirements: []
171
184
  rubyforge_project:
172
- rubygems_version: 2.7.6
185
+ rubygems_version: 2.7.7
173
186
  signing_key:
174
187
  specification_version: 4
175
188
  summary: Aio Tool