aio_elin 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+