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
@@ -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