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.
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
@@ -1,179 +1,179 @@
1
1
  # 此类只针对单台设备的告警信息
2
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
3
+ class Warning
4
+
5
+ attr_reader :warning_info
6
+
7
+ def initialize
8
+ @warning_info = {
9
+ :serious => {},
10
+ :ordinary => {},
11
+ :compare => Aio::Text::Compare.new,
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 Integer
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
178
  end
179
179
 
data/lib/aio/core/text.rb CHANGED
@@ -3,5 +3,8 @@ module Aio::Text
3
3
  require "aio/core/text/context"
4
4
  require "aio/core/text/line_string"
5
5
  require "aio/core/text/warning"
6
+ require "aio/core/text/compare"
7
+ require "aio/core/text/match_string_info"
8
+ require "aio/core/text/block"
6
9
 
7
10
  end