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.
Files changed (134) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +675 -0
  3. data/README.md +9 -0
  4. data/config.rb +39 -0
  5. data/lib/aio/base/debug.rb +30 -0
  6. data/lib/aio/base/toolkit/array.rb +24 -0
  7. data/lib/aio/base/toolkit/date.rb +46 -0
  8. data/lib/aio/base/toolkit/deep_clone.rb +10 -0
  9. data/lib/aio/base/toolkit/diff.rb +104 -0
  10. data/lib/aio/base/toolkit/excel_office.rb +421 -0
  11. data/lib/aio/base/toolkit/excel_wps.rb +437 -0
  12. data/lib/aio/base/toolkit/excel_wps.rb.bak +299 -0
  13. data/lib/aio/base/toolkit/ipaddr.rb +28 -0
  14. data/lib/aio/base/toolkit/os.rb +26 -0
  15. data/lib/aio/base/toolkit/regexp.rb +32 -0
  16. data/lib/aio/base/toolkit/string.rb +28 -0
  17. data/lib/aio/base/toolkit/table.rb +441 -0
  18. data/lib/aio/base/toolkit/test_diff.rb +9 -0
  19. data/lib/aio/base/toolkit/test_excel.rb +118 -0
  20. data/lib/aio/base/toolkit/test_word.rb +58 -0
  21. data/lib/aio/base/toolkit/word_wps.rb +492 -0
  22. data/lib/aio/base/toolkit.rb +18 -0
  23. data/lib/aio/base.rb +10 -0
  24. data/lib/aio/core/device/cisco.rb +13 -0
  25. data/lib/aio/core/device/cmd_switch.rb +113 -0
  26. data/lib/aio/core/device/h3c.rb +12 -0
  27. data/lib/aio/core/device/huawei.rb +10 -0
  28. data/lib/aio/core/device/juniper.rb +10 -0
  29. data/lib/aio/core/device/maipu.rb +11 -0
  30. data/lib/aio/core/device/methods.rb +233 -0
  31. data/lib/aio/core/device/methods.rb.bak +199 -0
  32. data/lib/aio/core/device/parent_device.rb +275 -0
  33. data/lib/aio/core/device.rb +15 -0
  34. data/lib/aio/core/device_manager.rb +207 -0
  35. data/lib/aio/core/module/cmd.rb +160 -0
  36. data/lib/aio/core/module/description.rb +67 -0
  37. data/lib/aio/core/module/input_style.rb +98 -0
  38. data/lib/aio/core/module/output_style.rb +80 -0
  39. data/lib/aio/core/module/platform.rb +30 -0
  40. data/lib/aio/core/module/ranking.rb +24 -0
  41. data/lib/aio/core/module/special_style.rb +30 -0
  42. data/lib/aio/core/module/template.rb +13 -0
  43. data/lib/aio/core/module.rb +15 -0
  44. data/lib/aio/core/module_loader.rb +161 -0
  45. data/lib/aio/core/module_loader.rb.bak +148 -0
  46. data/lib/aio/core/module_manager.rb +112 -0
  47. data/lib/aio/core/module_manager.rb.bak +78 -0
  48. data/lib/aio/core/parse/file.rb +19 -0
  49. data/lib/aio/core/parse/parser.rb +91 -0
  50. data/lib/aio/core/parse/parser_machine/bak/has_cmd_state.rb +14 -0
  51. data/lib/aio/core/parse/parser_machine/bak/has_context_state.rb +11 -0
  52. data/lib/aio/core/parse/parser_machine/bak/no_cmd_state.rb +11 -0
  53. data/lib/aio/core/parse/parser_machine/bak/no_context_state.rb +11 -0
  54. data/lib/aio/core/parse/parser_machine/full_state.rb +12 -0
  55. data/lib/aio/core/parse/parser_machine/has_device_state.rb +44 -0
  56. data/lib/aio/core/parse/parser_machine/no_device_state.rb +12 -0
  57. data/lib/aio/core/parse/parser_machine/parent_state.rb +26 -0
  58. data/lib/aio/core/parse/parser_machine.rb +47 -0
  59. data/lib/aio/core/parse.rb +6 -0
  60. data/lib/aio/core/text/context.rb +211 -0
  61. data/lib/aio/core/text/line_string.rb +74 -0
  62. data/lib/aio/core/text/warning.rb +179 -0
  63. data/lib/aio/core/text.rb +7 -0
  64. data/lib/aio/core/warning/description.rb +47 -0
  65. data/lib/aio/core/warning/warning_summarize.rb +232 -0
  66. data/lib/aio/core/warning.rb +6 -0
  67. data/lib/aio/core.rb +32 -0
  68. data/lib/aio/license.rb +687 -0
  69. data/lib/aio/resource/cover_picture.png +0 -0
  70. data/lib/aio/resource/line.png +0 -0
  71. data/lib/aio/resource/logo.png +0 -0
  72. data/lib/aio/ui/banner.rb +85 -0
  73. data/lib/aio/ui/readable_text.rb +75 -0
  74. data/lib/aio/ui/verbose.rb +29 -0
  75. data/lib/aio/ui/version.rb +9 -0
  76. data/lib/aio/ui.rb +138 -0
  77. data/lib/aio.rb +13 -0
  78. data/lib/modules/cmd/cisco/show_clock.rb +32 -0
  79. data/lib/modules/cmd/cisco/show_cpu.rb +32 -0
  80. data/lib/modules/cmd/cisco/show_env.rb +71 -0
  81. data/lib/modules/cmd/cisco/show_failover.rb +39 -0
  82. data/lib/modules/cmd/cisco/show_interface_ip_brief.rb +24 -0
  83. data/lib/modules/cmd/cisco/show_interfaces.rb +177 -0
  84. data/lib/modules/cmd/cisco/show_inv.rb +43 -0
  85. data/lib/modules/cmd/cisco/show_ip_interface_brief.rb +42 -0
  86. data/lib/modules/cmd/cisco/show_ip_ospf_nei.rb +38 -0
  87. data/lib/modules/cmd/cisco/show_ip_route_summary.rb +81 -0
  88. data/lib/modules/cmd/cisco/show_memory.rb +27 -0
  89. data/lib/modules/cmd/cisco/show_process_cpu.rb +35 -0
  90. data/lib/modules/cmd/cisco/show_process_memory.rb +63 -0
  91. data/lib/modules/cmd/cisco/show_version.rb +97 -0
  92. data/lib/modules/cmd/h3c/display_clock.rb +32 -0
  93. data/lib/modules/cmd/h3c/display_cpu.rb +51 -0
  94. data/lib/modules/cmd/h3c/display_device_manuinfo.rb +45 -0
  95. data/lib/modules/cmd/h3c/display_fan.rb +91 -0
  96. data/lib/modules/cmd/h3c/display_interface.rb +203 -0
  97. data/lib/modules/cmd/h3c/display_ip_interface_brief.rb +34 -0
  98. data/lib/modules/cmd/h3c/display_ip_routing.rb +68 -0
  99. data/lib/modules/cmd/h3c/display_ip_routing_stat.rb +90 -0
  100. data/lib/modules/cmd/h3c/display_memory.rb +35 -0
  101. data/lib/modules/cmd/h3c/display_ospf_peer.rb +38 -0
  102. data/lib/modules/cmd/h3c/display_power.rb +90 -0
  103. data/lib/modules/cmd/h3c/display_version.rb +54 -0
  104. data/lib/modules/cmd/h3c/display_vrrp_verbose.rb +86 -0
  105. data/lib/modules/cmd/maipu/show_env.rb +34 -0
  106. data/lib/modules/cmd/maipu/show_ip_route.rb +74 -0
  107. data/lib/modules/cmd/maipu/show_ip_route_statistic.rb +36 -0
  108. data/lib/modules/cmd/maipu/show_memory.rb +31 -0
  109. data/lib/modules/cmd/maipu/show_system_fan.rb +66 -0
  110. data/lib/modules/cmd/maipu/show_system_power.rb +66 -0
  111. data/lib/modules/cmd/maipu/show_version.rb +50 -0
  112. data/lib/modules/description/style/crc.rb +22 -0
  113. data/lib/modules/description/style/input_errors.rb +22 -0
  114. data/lib/modules/description/style/overrun.rb +22 -0
  115. data/lib/modules/description/style/proc_ratio.rb +22 -0
  116. data/lib/modules/description/style/protocol.rb +22 -0
  117. data/lib/modules/description/style/register.rb +22 -0
  118. data/lib/modules/description/style/runts.rb +22 -0
  119. data/lib/modules/description/style/template.rb +22 -0
  120. data/lib/modules/description/style/total_output_drops.rb +22 -0
  121. data/lib/modules/input/style/compare_xml.rb +89 -0
  122. data/lib/modules/input/style/console.rb +222 -0
  123. data/lib/modules/input/style/console.rb.bak +114 -0
  124. data/lib/modules/input/style/xinhua_nat.rb +70 -0
  125. data/lib/modules/output/style/boc_day.rb +223 -0
  126. data/lib/modules/output/style/cmds.rb +77 -0
  127. data/lib/modules/output/style/compare_json.rb +26 -0
  128. data/lib/modules/output/style/compare_report.rb +31 -0
  129. data/lib/modules/output/style/compare_xml.rb +86 -0
  130. data/lib/modules/output/style/excel_table_office.rb +407 -0
  131. data/lib/modules/output/style/excel_table_wps.rb +400 -0
  132. data/lib/modules/output/style/summary_report.rb +563 -0
  133. data/lib/modules/special/style/compare.rb +110 -0
  134. 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,7 @@
1
+ module Aio::Text
2
+
3
+ require "aio/core/text/context"
4
+ require "aio/core/text/line_string"
5
+ require "aio/core/text/warning"
6
+
7
+ end
@@ -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
@@ -0,0 +1,6 @@
1
+ module Aio::Warning
2
+
3
+ require "aio/core/warning/warning_summarize"
4
+ require "aio/core/warning/description"
5
+
6
+ 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
+