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
data/lib/aio/ui.rb CHANGED
@@ -1,138 +1,139 @@
1
1
  #coding=utf-8
2
2
 
3
3
  module Aio::Ui
4
- require "aio/ui/version"
5
- require "aio/ui/banner"
6
- require "aio/ui/readable_text"
7
- require "aio/ui/verbose"
8
-
9
- class Console
10
-
11
- include Aio::Ui::Verbose
12
-
13
- # Aio::ModuleManager
14
- attr_accessor :module_manager
15
-
16
- # Aio::DeviceManager
17
- attr_accessor :device_manager
18
-
19
- # Aio::Parse::Parser
20
- attr_accessor :parser
21
-
22
- # Aio::Ui::Banner
23
- attr_accessor :banner
24
-
25
- DefaultCompare = "special/style/compare"
26
-
27
- DefaultInputComapreXML = "input/style/compare_xml"
28
-
29
- def initialize(args)
30
- self.banner = Banner.new.parse(args)
31
- end
32
-
33
- def process
34
- case self.banner.mode
35
- when 0
36
- proc_0
37
- when 1
38
- proc_1
39
- end
40
- end
41
-
42
- # 输出模块表
43
- def proc_0
44
- case banner.type
45
- when "cmd"
46
- mods = module_manager.get_modules_by_type("cmd")
47
- print ReadableText.dump_module_cmds(mods)
48
- when "input"
49
- mods = module_manager.get_modules_by_type("input")
50
- print ReadableText.dump_module_inputs(mods)
51
- when "output"
52
- mods = module_manager.get_modules_by_type("output")
53
- print ReadableText.dump_module_outputs(mods)
54
- else
55
- mods = module_manager.get_modules_by_type("cmd")
56
- print ReadableText.dump_module_cmds(mods)
57
-
58
- mods = module_manager.get_modules_by_type("input")
59
- print ReadableText.dump_module_inputs(mods)
60
-
61
- mods = module_manager.get_modules_by_type("output")
62
- print ReadableText.dump_module_outputs(mods)
63
- end
64
- end
65
-
66
- # 通过选择的输入输出模块进行操作
67
- def proc_1
68
-
69
- # 当完全没有指定input的时候,是可以跳过的
70
- if banner.has_input?
71
- input_klass = module_manager.get_module_klass_by_name(banner.input_style)
72
- input_klass.input_file = banner.input
73
- input_klass.ext_info = {:cmds_reg => device_manager.just_cmds_reg}
74
-
75
- parser.input_klass = input_klass
76
- parser.parse_by_module
77
-
78
- # 当有compare选项的时候,同时解析compare模块,并合并warning信息
79
- if banner.compare
80
- print_good "正在加载比较模块"
81
- if banner.compare =~ /\.xml$/
82
- input_klass_compare = module_manager.get_module_klass_by_name(DefaultInputComapreXML)
83
- else
84
- print_error "请确认 -c 参数文件后缀"
85
- banner.banner
86
- end
87
-
88
- input_klass_compare.input_file = banner.compare
89
- compare_klass = module_manager.get_module_klass_by_name(DefaultCompare)
90
-
91
- print_good "比较模块加载成功"
92
- print_good "正在进行对比..."
93
- parser.input_klass = input_klass_compare
94
- parser.parse_by_compare(compare_klass)
95
- print_good "对比分析完成"
96
-
97
- end
98
-
99
- # Debug 处
100
- if Aio::Base::Debug.ui_enable? #or true
101
- puts "[Debug UI]"
102
- device_manager.devices.each_pair{|name, device_klass|
103
- pp name
104
- pp device_klass.cmds_useful["show version"]
105
- #pp device_klass.device_name
106
- #pp device_klass.cmds_useful
107
- #pp device_klass.warning_klass.warning_info
108
- puts
109
- }
110
- puts "[/Debug UI]"
111
- end
112
-
113
- device_manager.warning_summarize_tidy
114
- end # 判断没有没 input 尾部
115
-
116
- print_good "正在加载输出模块 #{banner.output_style}"
117
- output_klass = module_manager.get_module_klass_by_name(banner.output_style)
118
-
119
- pn = Pathname.new(banner.output)
120
- dir, base = pn.split
121
- base = base.to_s
122
- unless base =~ /\./
123
- suffix = output_klass.file_suffix
124
- unless suffix == "" or /(?i)null/ =~ suffix
125
- base << "." + suffix
126
- end
127
- end
128
-
129
- print_good "正在输出文件 #{dir + base}"
130
- output_klass.device_manager = device_manager
131
- output_klass.module_manager = module_manager
132
- output_klass.output_file = banner.output
133
- output_klass.generate
134
- print_good "输出文件完成"
135
- end
136
-
137
- end
4
+ require "aio/ui/version"
5
+ require "aio/ui/banner"
6
+ require "aio/ui/readable_text"
7
+ require "aio/ui/verbose"
8
+ require "aio/ui/logger"
9
+
10
+ class Console
11
+
12
+ include Aio::Ui::Verbose
13
+
14
+ # Aio::ModuleManager
15
+ attr_accessor :module_manager
16
+
17
+ # Aio::DeviceManager
18
+ attr_accessor :device_manager
19
+
20
+ # Aio::Parse::Parser
21
+ attr_accessor :parser
22
+
23
+ # Aio::Ui::Banner
24
+ attr_accessor :banner
25
+
26
+ DefaultCompare = "special/style/compare"
27
+
28
+ DefaultInputComapreXML = "input/style/compare_xml"
29
+
30
+ def initialize(args)
31
+ self.banner = Banner.new.parse(args)
32
+ end
33
+
34
+ def process
35
+ case self.banner.mode
36
+ when 0
37
+ proc_0
38
+ when 1
39
+ proc_1
40
+ end
41
+ end
42
+
43
+ # 输出模块表
44
+ def proc_0
45
+ case banner.type
46
+ when "cmd"
47
+ mods = module_manager.get_modules_by_type("cmd")
48
+ print ReadableText.dump_module_cmds(mods)
49
+ when "input"
50
+ mods = module_manager.get_modules_by_type("input")
51
+ print ReadableText.dump_module_inputs(mods)
52
+ when "output"
53
+ mods = module_manager.get_modules_by_type("output")
54
+ print ReadableText.dump_module_outputs(mods)
55
+ else
56
+ mods = module_manager.get_modules_by_type("cmd")
57
+ print ReadableText.dump_module_cmds(mods)
58
+
59
+ mods = module_manager.get_modules_by_type("input")
60
+ print ReadableText.dump_module_inputs(mods)
61
+
62
+ mods = module_manager.get_modules_by_type("output")
63
+ print ReadableText.dump_module_outputs(mods)
64
+ end
65
+ end
66
+
67
+ # 通过选择的输入输出模块进行操作
68
+ def proc_1
69
+
70
+ # 当完全没有指定input的时候,是可以跳过的
71
+ if banner.has_input?
72
+ input_klass = module_manager.get_module_klass_by_name(banner.input_style)
73
+ input_klass.input_file = banner.input
74
+ input_klass.ext_info = {:cmds_reg => device_manager.just_cmds_reg}
75
+
76
+ parser.input_klass = input_klass
77
+ parser.parse_by_module
78
+
79
+ # 当有compare选项的时候,同时解析compare模块,并合并warning信息
80
+ if banner.compare
81
+ print_good "正在加载比较模块"
82
+ if banner.compare =~ /\.xml$/
83
+ input_klass_compare = module_manager.get_module_klass_by_name(DefaultInputComapreXML)
84
+ else
85
+ print_error "请确认 -c 参数文件后缀"
86
+ banner.banner
87
+ end
88
+
89
+ input_klass_compare.input_file = banner.compare
90
+ compare_klass = module_manager.get_module_klass_by_name(DefaultCompare)
91
+
92
+ print_good "比较模块加载成功"
93
+ print_good "正在进行对比..."
94
+ parser.input_klass = input_klass_compare
95
+ parser.parse_by_compare(compare_klass)
96
+ print_good "对比分析完成"
97
+
98
+ end
99
+
100
+ # Debug
101
+ if Aio::Base::Debug.ui_enable? #or true
102
+ puts "[Debug UI]"
103
+ device_manager.devices.each_pair{|name, device_klass|
104
+ pp name
105
+ pp device_klass.cmds_useful["show version"]
106
+ #pp device_klass.device_name
107
+ #pp device_klass.cmds_useful
108
+ #pp device_klass.warning_klass.warning_info
109
+ puts
110
+ }
111
+ puts "[/Debug UI]"
112
+ end
113
+
114
+ device_manager.warning_summarize_tidy
115
+ end # 判断没有没 input 尾部
116
+
117
+ print_good "正在加载输出模块 #{banner.output_style}"
118
+ output_klass = module_manager.get_module_klass_by_name(banner.output_style)
119
+
120
+ pn = Pathname.new(banner.output)
121
+ dir, base = pn.split
122
+ base = base.to_s
123
+ unless base =~ /\./
124
+ suffix = output_klass.file_suffix
125
+ unless suffix == "" or /(?i)null/ =~ suffix
126
+ base << "." + suffix
127
+ end
128
+ end
129
+
130
+ print_good "正在输出文件 #{dir + base}"
131
+ output_klass.device_manager = device_manager
132
+ output_klass.module_manager = module_manager
133
+ output_klass.output_file = banner.output
134
+ output_klass.generate
135
+ print_good "输出文件完成"
136
+ end
137
+
138
+ end
138
139
  end
@@ -3,95 +3,95 @@
3
3
  require "aio/core"
4
4
 
5
5
  class Aio::Module::Cmd::Cisco::ShowVersion < Aio::Module::Cmd::Cisco
6
- include Aio::Module
6
+ include Aio::Module
7
7
 
8
- def initialize
9
- super({
10
- :cmd_full => "show version",
11
- :cmd_short => "sh ver",
12
- :author => "Elin",
13
- :description => "This is Cisco Command# show version",
14
- :ranking => Ranking_1,
15
- :key_stand => true,
16
- :platform => "all",
17
- :benchmark => {
18
- :register => ["==", "0x2102", "0xF", "0x1", "0x10F"],
19
- },
20
- :license => Aio::AIO_LICENSE})
21
- end
8
+ def initialize
9
+ super({
10
+ :cmd_full => "show version",
11
+ :cmd_short => "sh ver",
12
+ :author => "Elin",
13
+ :description => "This is Cisco Command# show version",
14
+ :ranking => Ranking_1,
15
+ :key_stand => true,
16
+ :platform => "all",
17
+ :benchmark => {
18
+ :register => ["==", "0x2102", "0xF", "0x1", "0x10F"],
19
+ },
20
+ :license => Aio::AIO_LICENSE})
21
+ end
22
22
 
23
- def parse
24
- cont = self.context.dup
25
- soft_info = {}
26
- useful[:software] = soft_info
23
+ def parse
24
+ cont = self.context.dup
25
+ soft_info = {}
26
+ useful[:software] = soft_info
27
27
 
28
- cont.readline_match_block(/Cisco (?<info>.*)/) do |block|
29
- key_stand_cisco
30
- case block[:info]
31
- when /Adaptive Security Appliance/
32
- ver = /Software Version (?<version>.*)/.match(block[:info])
33
- block.update(soft_info, :version, ver[:version])
34
- key_stand_version(ver[:version])
35
- parse_asa(cont, soft_info)
36
- else
37
- parse_def(cont, soft_info)
38
- end
39
- end
40
- end
28
+ cont.readline_match_block(/Cisco (?<info>.*)/) do |block|
29
+ key_stand_cisco
30
+ case block[:info]
31
+ when /Adaptive Security Appliance/
32
+ ver = /Software Version (?<version>.*)/.match(block[:info])
33
+ block.update(soft_info, :version, ver[:version])
34
+ key_stand_version(ver[:version])
35
+ parse_asa(cont, soft_info)
36
+ else
37
+ parse_def(cont, soft_info)
38
+ end
39
+ end
40
+ end
41
41
 
42
- # ASA 系列
43
- def parse_asa(cont, soft_info)
44
- cont.readline_match_block(/System image file is "(?<soft_image>)"/) do |block|
45
- block.update(soft_info, :soft_image)
46
- end
47
- cont.readline_match_block(/up (?<uptime>.*)/) do |block|
48
- block.update(soft_info, :uptime)
49
- end
50
- cont.readline_match_block(/failover cluster up (?<uptime_failover>.*)/) do |block|
51
- block.update(soft_info, :uptime_failover)
52
- end
53
- cont.readline_match_block(/Hardware: (?<device_model>.[^,]+),/) do |block|
54
- block.update(soft_info, :device_model)
55
- key_stand_model(block[:device_model])
56
- key_stand_template Template_3 # 当是asa时使用模板3
57
- end
58
- cont.readline_match_block(/Serial Number: (?<sn>.*)/) do |block|
59
- block.update(soft_info, :sn)
60
- end
61
- end
42
+ # ASA 系列
43
+ def parse_asa(cont, soft_info)
44
+ cont.readline_match_block(/System image file is "(?<soft_image>)"/) do |block|
45
+ block.update(soft_info, :soft_image)
46
+ end
47
+ cont.readline_match_block(/up (?<uptime>.*)/) do |block|
48
+ block.update(soft_info, :uptime)
49
+ end
50
+ cont.readline_match_block(/failover cluster up (?<uptime_failover>.*)/) do |block|
51
+ block.update(soft_info, :uptime_failover)
52
+ end
53
+ cont.readline_match_block(/Hardware: (?<device_model>.[^,]+),/) do |block|
54
+ block.update(soft_info, :device_model)
55
+ key_stand_model(block[:device_model])
56
+ key_stand_template Template_3 # 当是asa时使用模板3
57
+ end
58
+ cont.readline_match_block(/Serial Number: (?<sn>.*)/) do |block|
59
+ block.update(soft_info, :sn)
60
+ end
61
+ end
62
62
 
63
- # 包括了一般的以及 7600 系列
64
- def parse_def(cont, soft_info)
65
- cont.readline_match_block(/Version (?<version>.*),/) do |block|
66
- block.update(soft_info, :version)
67
- key_stand_version(block[:version])
68
- end
69
- cont.readline_match_block(/(?<device_name>.*) uptime is (?<uptime>.*)/) do |block|
70
- block.update(soft_info, :device_name)
71
- block.update(soft_info, :uptime)
72
- end
73
- cont.readline_match_block(/System image file is "(?<soft_image>.*)"/) do |block|
74
- block.update(soft_info, :soft_image)
75
- end
76
- cont.readline_match_block(//)
77
- cont.readline_match_block(/^[Cc]isco (?<device_model>[^\s]+)/) do |block|
78
- block.update(soft_info, :device_model)
79
- key_stand_model(block[:device_model])
80
- case block[:device_model]
81
- when /76|65/ # 当是7600的时候,使用模板2
82
- key_stand_template Template_2
83
- else
84
- key_stand_template Template_1
85
- end
86
- end
87
- cont.readline_match_block(/Processor board ID (?<board_id>.*)/) do |block|
88
- block.update(soft_info, :board_id)
89
- end
90
- cont.readline_match_block(/Configuration register is (?<register>.*)/) do |block|
91
- block.warning_serious(soft_info, :register, self)
92
- end
93
- end
63
+ # 包括了一般的以及 7600 系列
64
+ def parse_def(cont, soft_info)
65
+ cont.readline_match_block(/Version (?<version>.*),/) do |block|
66
+ block.update(soft_info, :version)
67
+ key_stand_version(block[:version])
68
+ end
69
+ cont.readline_match_block(/(?<device_name>.*) uptime is (?<uptime>.*)/) do |block|
70
+ block.update(soft_info, :device_name)
71
+ block.update(soft_info, :uptime)
72
+ end
73
+ cont.readline_match_block(/System image file is "(?<soft_image>.*)"/) do |block|
74
+ block.update(soft_info, :soft_image)
75
+ end
76
+ cont.readline_match_block(//)
77
+ cont.readline_match_block(/^[Cc]isco (?<device_model>[^\s]+)/) do |block|
78
+ block.update(soft_info, :device_model)
79
+ key_stand_model(block[:device_model])
80
+ case block[:device_model]
81
+ when /76|65/ # 当是7600的时候,使用模板2
82
+ key_stand_template Template_2
83
+ else
84
+ key_stand_template Template_1
85
+ end
86
+ end
87
+ cont.readline_match_block(/Processor board ID (?<board_id>.*)/) do |block|
88
+ block.update(soft_info, :board_id)
89
+ end
90
+ cont.readline_match_block(/Configuration register is (?<register>.*)/) do |block|
91
+ block.warning_serious(soft_info, :register, self)
92
+ end
93
+ end
94
94
 
95
95
  end
96
96
 
97
-
97
+
@@ -3,49 +3,49 @@
3
3
  require "aio/core"
4
4
 
5
5
  class Aio::Module::Cmd::H3C::DisplayCpu < Aio::Module::Cmd::H3C
6
- include Aio::Module
6
+ include Aio::Module
7
7
 
8
- def initialize
9
- super({
10
- :cmd_full => "display cpu-usage",
11
- :cmd_short => "dis cpu",
12
- :author => "Elin",
13
- :description => "This is H3C Command# display cpu-usage",
14
- :ranking => Ranking_1,
15
- :platform => "all",
16
- :benchmark => {
17
- :seconds_5 => ["<", 50],
18
- :minute_1 => ["<", 50],
19
- :minutes_5 => ["<", 50],
20
- },
21
- })
22
- end
8
+ def initialize
9
+ super({
10
+ :cmd_full => "display cpu-usage",
11
+ :cmd_short => "dis cpu",
12
+ :author => "Elin",
13
+ :description => "This is H3C Command# display cpu-usage",
14
+ :ranking => Ranking_1,
15
+ :platform => "all",
16
+ :benchmark => {
17
+ :seconds_5 => ["<", 50],
18
+ :minute_1 => ["<", 50],
19
+ :minutes_5 => ["<", 50],
20
+ },
21
+ })
22
+ end
23
23
 
24
- def parse
25
- cont = self.context.dup
26
- useful[:cpu] = {}
27
- loop do
28
- cont.readline_range(/Slot \d+ CPU usage/, reg_blank) do |cont_layer|
29
- parse_cpu(cont_layer)
30
- end
31
- end
32
- end
24
+ def parse
25
+ cont = self.context.dup
26
+ useful[:cpu] = {}
27
+ loop do
28
+ cont.readline_range(/Slot \d+ CPU usage/, reg_blank) do |cont_layer|
29
+ parse_cpu(cont_layer)
30
+ end
31
+ end
32
+ end
33
33
 
34
- def parse_cpu(context)
35
- cpu = {}
36
- useful[:cpu] = cpu
37
- context.readline_match_block(/Slot (?<slot_id>\d+) CPU/) do |block|
38
- block.update(cpu, :slot_id)
39
- end
40
- context.readline_match_block(/(?<seconds_5>\d+)% in last 5 seconds/) do |block|
41
- block.warning_serious(cpu, :seconds_5, self)
42
- end
43
- context.readline_match_block(/(?<minute_1>\d+)% in last 1 minute/) do |block|
44
- block.warning_serious(cpu, :minute_1, self)
45
- end
46
- context.readline_match_block(/(?<minutes_5>\d+)% in last 5 minutes/) do |block|
47
- block.warning_serious(cpu, :minutes_5, self)
48
- end
49
- end
34
+ def parse_cpu(context)
35
+ cpu = {}
36
+ useful[:cpu] = cpu
37
+ context.readline_match_block(/Slot (?<slot_id>\d+) CPU/) do |block|
38
+ block.update(cpu, :slot_id)
39
+ end
40
+ context.readline_match_block(/(?<seconds_5>\d+)% in last 5 seconds/) do |block|
41
+ block.warning_serious(cpu, :seconds_5, self)
42
+ end
43
+ context.readline_match_block(/(?<minute_1>\d+)% in last 1 minute/) do |block|
44
+ block.warning_serious(cpu, :minute_1, self)
45
+ end
46
+ context.readline_match_block(/(?<minutes_5>\d+)% in last 5 minutes/) do |block|
47
+ block.warning_serious(cpu, :minutes_5, self)
48
+ end
49
+ end
50
50
  end
51
51
 
@@ -3,52 +3,52 @@
3
3
  require "aio/core"
4
4
 
5
5
  class Aio::Module::Cmd::H3C::DisplayVersion < Aio::Module::Cmd::H3C
6
- include Aio::Module
6
+ include Aio::Module
7
7
 
8
- def initialize
9
- super({
10
- :cmd_full => "display version",
11
- :cmd_short => "dis ver",
12
- :author => "Elin",
13
- :description => "This is H3C Command# display version",
14
- :ranking => Ranking_1,
15
- :key_stand => true,
16
- :platform => "route",
17
- :benchmark => {
18
- }
19
- })
20
- end
8
+ def initialize
9
+ super({
10
+ :cmd_full => "display version",
11
+ :cmd_short => "dis ver",
12
+ :author => "Elin",
13
+ :description => "This is H3C Command# display version",
14
+ :ranking => Ranking_1,
15
+ :key_stand => true,
16
+ :platform => "route",
17
+ :benchmark => {
18
+ }
19
+ })
20
+ end
21
21
 
22
- def parse
23
- cont = self.context.dup
24
- soft_info = {}
25
- useful[:software] = soft_info
26
- cont.readline_match_block(/(?<device_type>H3C) Comware Platform Software/) do |block|
27
- key_stand_h3c
28
- end
29
- cont.readline_match_block(/Comware Software, Version (?<version>.*)/) do |block|
30
- block.update(soft_info, :version)
31
- key_stand_version(block[:version])
32
- end
33
- cont.readline_match_block(/.*/)
34
- cont.readline_match_block(/H3C (?<device_model>.*) uptime is (?<uptime>.*)/) do |block|
35
- block.update(soft_info, :device_model)
36
- block.update(soft_info, :uptime)
37
- key_stand_model(block[:device_model])
38
- case block[:device_model]
39
- when /3600|8800/ # 当是S3600,S5500,S8800 的时候
40
- key_stand_template Template_2
41
- else
42
- key_stand_template Template_1
43
- end
44
- end
22
+ def parse
23
+ cont = self.context.dup
24
+ soft_info = {}
25
+ useful[:software] = soft_info
26
+ cont.readline_match_block(/(?<device_type>H3C) Comware Platform Software/) do |block|
27
+ key_stand_h3c
28
+ end
29
+ cont.readline_match_block(/Comware Software, Version (?<version>.*)/) do |block|
30
+ block.update(soft_info, :version)
31
+ key_stand_version(block[:version])
32
+ end
33
+ cont.readline_match_block(/.*/)
34
+ cont.readline_match_block(/H3C (?<device_model>.*) uptime is (?<uptime>.*)/) do |block|
35
+ block.update(soft_info, :device_model)
36
+ block.update(soft_info, :uptime)
37
+ key_stand_model(block[:device_model])
38
+ case block[:device_model]
39
+ when /3600|8800/ # 当是S3600,S5500,S8800 的时候
40
+ key_stand_template Template_2
41
+ else
42
+ key_stand_template Template_1
43
+ end
44
+ end
45
45
 
46
- cont.readline_match_block_loop(/\[SubSlot (?<slot_id>\d)\](?<slot>.*)/, reg_blank) do |block|
47
- next if block[:slot] =~ /No/
48
- slot_id = block[:slot_id].to_i
49
- block.update_hash(soft_info, :slot, "slot_#{slot_id}", block[:slot])
50
- end
46
+ cont.readline_match_block_loop(/\[SubSlot (?<slot_id>\d)\](?<slot>.*)/, reg_blank) do |block|
47
+ next if block[:slot] =~ /No/
48
+ slot_id = block[:slot_id].to_i
49
+ block.update_hash(soft_info, :slot, "slot_#{slot_id}", block[:slot])
50
+ end
51
51
 
52
- end
52
+ end
53
53
 
54
54
  end