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,45 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::H3C::DisplayDeviceManuinfo < Aio::Module::Cmd::H3C
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "display device manuinfo",
11
+ :cmd_short => "dis dev m",
12
+ :author => "Elin",
13
+ :description => "This is H3C Command# display device manuinfo",
14
+ :ranking => Ranking_1,
15
+ :platform => "all",
16
+ })
17
+ end
18
+
19
+ def parse
20
+ context = self.context.dup
21
+ inv_info = {}
22
+ useful[:inventory] = inv_info
23
+
24
+ context.readline_range_loop(/:/, reg_blank) do |cont|
25
+ slot_info = {}
26
+ name = ""
27
+ pid = ""
28
+
29
+ cont.readline_match_block(/(?<name>[^:]+):/) do |block|
30
+ name = block[:name]
31
+ end
32
+ cont.readline_match_block(/DEVICE_NAME : (?<pid>.*)/) do |block|
33
+ pid = block[:pid]
34
+ end
35
+ cont.readline_match_block(/DEVICE_SERIAL_NUMBER : (?<sn>.*)/) do |block|
36
+ sn = block[:sn]
37
+ inv_info[sn.to_sym] = slot_info
38
+ block.update(slot_info, :name, name)
39
+ block.update(slot_info, :description, "H3C")
40
+ block.update(slot_info, :pid, pid)
41
+ block.update(slot_info, :sn)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,91 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::H3C::DisplayFan < Aio::Module::Cmd::H3C
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "display fan",
11
+ :cmd_short => "dis fan",
12
+ :author => "Elin",
13
+ :description => "This is H3C Command# display fan",
14
+ :ranking => Ranking_1,
15
+ :platform => "all",
16
+ :benchmark => {
17
+ :fan_status => ["=~", /Normal/],
18
+ },
19
+ })
20
+ end
21
+
22
+ def parse
23
+ cont = self.context.dup
24
+ useful[:fan] = {}
25
+ case device_template
26
+ when Template_1
27
+ cont.readline_range_loop(/Slot/, /Slot/) do |cont_layer|
28
+ parse_slot(cont_layer)
29
+ end
30
+ when Template_2
31
+ cont.readline_range_loop(/Unit/, /Unit/) do |cont_layer|
32
+ parse_unit(cont_layer)
33
+ end
34
+ end
35
+
36
+ end
37
+
38
+ =begin
39
+ # 遇到的有两种情况,开头是Slot 或者是 Unit
40
+ def parse_def(context)
41
+ case context[0]
42
+ when /Slot/
43
+ parse_slot(context)
44
+ when /Unit/
45
+ parse_unit(context)
46
+ end
47
+ end
48
+ =end
49
+
50
+ def parse_slot(context)
51
+ fan = {}
52
+ context.readline_match_block(/Slot (?<slot_id>\d+)/) do |block|
53
+ useful[:fan] = {}
54
+ useful[:fan]["slot_#{block[:slot_id]}"] = fan
55
+ block.update(fan, :slot_id)
56
+ end
57
+ context.readline_range_loop(/FAN \d+/, reg_blank) do |cont_layer|
58
+ parse_slot_2(cont_layer, fan)
59
+ end
60
+ end
61
+
62
+ def parse_slot_2(context, fan)
63
+ fan_id = nil
64
+ context.readline_match_block(/FAN (?<fan_id>\d+)/) do |block|
65
+ fan_id = block[:fan_id]
66
+ fan["fan_#{fan_id}"] = {}
67
+ block.update(fan["fan_#{fan_id}"], :fan_id)
68
+ end
69
+ context.readline_match_block(/State : (?<fan_status>.*)/) do |block|
70
+ block.warning_serious(fan["fan_#{fan_id}"], :fan_status, self)
71
+ end
72
+ end
73
+
74
+ def parse_unit(context)
75
+ fan = {}
76
+ context.readline_match_block(/Unit (?<slot_id>\d+)/) do |block|
77
+ useful[:fan]["slot_#{block[:slot_id]}"] = fan
78
+ block.update(fan, :slot_id)
79
+ end
80
+ context.readline_match_block_loop(/Fan (?<fan_id>\d+) State: (?<fan_status>.*)/, reg_blank) do |block|
81
+ fan_id = block[:fan_id]
82
+ fan["fan_#{fan_id}"] = {}
83
+ block.update(fan["fan_#{fan_id}"], :fan_id)
84
+ block.warning_serious(fan["fan_#{fan_id}"], :fan_status, self)
85
+ end
86
+ end
87
+
88
+ end
89
+
90
+
91
+
@@ -0,0 +1,203 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::H3C::DisplayInterface < Aio::Module::Cmd::H3C
6
+
7
+ include Aio::Module
8
+
9
+ def initialize
10
+ super({
11
+ :cmd_full => "display interface",
12
+ :cmd_short => "dis inter",
13
+ :author => "Elin",
14
+ :description => "This is H3C Command# display interface",
15
+ :ranking => Ranking_1,
16
+ :platform => "switch",
17
+ :benchmark => {
18
+ :duplex => ["=~", /full/],
19
+ :input_errors => ["<", 10],
20
+ :output_errors => ["<", 10],
21
+ :runts => ["<", 10],
22
+ :giants => ["<", 10],
23
+ :throttles => ["<", 10],
24
+ :crc => ["<", 1000],
25
+ :frame => ["<", 10],
26
+ :overruns => ["<", 10],
27
+ :aborts => ["<", 10],
28
+ :underruns => ["<", 10],
29
+ :deferred => ["<", 10],
30
+ :carrier => ["<", 10],
31
+ :input_drops => ["<", 10],
32
+ :output_drops => ["<", 10],
33
+ :collisions => ["<", 10],
34
+ :last_collisions => ["<", 10],
35
+ :lost_carrier => ["<", 10],
36
+ }
37
+ })
38
+ end
39
+
40
+ Reg_Bridge_Aggregation = /Bridge-Aggregation/
41
+ Reg_Ethernet = /Ethernet/
42
+ Reg_Loopback = /LoopBack/
43
+ Reg_Vlanif = /Vlan/
44
+
45
+ def parse
46
+ cont = self.context.dup
47
+ useful[:interface] = {}
48
+ loop do
49
+ cont.readline_range(/.*/, reg_blank) do |cont_layer|
50
+ switch_iface(cont_layer)
51
+ end
52
+ end
53
+ end
54
+
55
+ def switch_iface(context)
56
+ i = 0
57
+ while(i < 5)
58
+ if context[i] =~ /current/
59
+ break
60
+ end
61
+ i += 1
62
+ end
63
+ case context[i]
64
+ when Reg_Bridge_Aggregation
65
+ parse_bridge(context)
66
+ when Reg_Ethernet
67
+ parse_eth(context)
68
+ when Reg_Loopback
69
+ parse_loopback(context)
70
+ when Reg_Vlanif
71
+ parse_vlanif(context)
72
+ end
73
+ end
74
+
75
+ def parse_bridge(context)
76
+ iface = {}
77
+ iface_id = nil
78
+ context.readline_match_block(/(?<iface_id>Bridge-Aggregation\d+) current state\s?:\s?(?<state>.*)/) do |block|
79
+ iface_id = block[:iface_id]
80
+ useful[:interface][iface_id] = iface
81
+ block.update(iface, :iface_id)
82
+ block.update(iface, :state)
83
+ end
84
+ context.readline_match_block(/IP Packet Frame Type: PKTFMT_ETHNT_2, Hardware Address: (?<mac>.*)/) do |block|
85
+ block.update(iface, :mac)
86
+ end
87
+ context.readline_match_block(/Description: (?<description>.*)/) do |block|
88
+ block.update(iface, :description)
89
+ end
90
+ context.readline_match_block(/(?<speed>.*) mode, (?<duplex>.*) mode/) do |block|
91
+ block.update(iface, :speed)
92
+ block.warning_serious(iface, :duplex, self) if iface[:state] =~ /UP/
93
+ end
94
+ context.readline_match_block(/Port link-type: (?<link_type>.*)/) do |block|
95
+ block.update(iface, :link_type)
96
+ end
97
+ same_line_1(context, iface, iface_id) if iface[:state] =~ /UP/
98
+ end
99
+
100
+ def parse_eth(context)
101
+ iface = {}
102
+ iface_id = nil
103
+ context.readline_match_block(/(?<iface_id>.*) current state\s?:\s?(?<state>.*)/) do |block|
104
+ iface_id = block[:iface_id].strip
105
+ useful[:interface][iface_id] = iface
106
+ block.update(iface, :iface_id)
107
+ block.update(iface, :state)
108
+ end
109
+ return if iface.nil?
110
+ context.readline_match_block(/Hardware Address: (?<mac>.*)/) do |block|
111
+ block.update(iface, :mac)
112
+ end
113
+ context.readline_match_block(/Description: (?<description>.*)/) do |block|
114
+ block.update(iface, :description)
115
+ end
116
+ context.readline_match_block(/(?<speed>.*) mode, (?<duplex>.*) mode/) do |block|
117
+ block.update(iface, :speed)
118
+ block.warning_serious(iface, :duplex, self) if iface[:state] =~ /UP/
119
+ end
120
+ same_line_1(context, iface, iface_id) if iface[:state] =~ /UP/
121
+ end
122
+
123
+ def same_line_1(context, iface, iface_id)
124
+ context.readline_match_block(/Input: (?<input_errors>\d+) input errors, (?<runts>\d+) runts, (?<giants>\d+) giants, (?<throttles>\d+) throttles/) do |block|
125
+ #####
126
+ block.warning_ordinary(iface, :input_errors, self)
127
+ block.warning_ordinary(iface, :runts, self)
128
+ block.warning_ordinary(iface, :giants, self)
129
+ block.warning_ordinary(iface, :throttles, self)
130
+ end
131
+ context.readline_match_block(/(?<crc>\d+) CRC, (?<frame>\d+) frame, - overruns, (?<aborts>\d+) aborts/) do |block|
132
+ block.warning_serious(iface, :crc, self)
133
+ block.warning_ordinary(iface, :frame, self)
134
+ block.warning_ordinary(iface, :aborts, self)
135
+ end
136
+ context.readline_match_block(/Output: (?<output_errors>\d+) output errors, - underruns, - buffer failures/) do |block|
137
+ block.warning_ordinary(iface, :output_errors, self)
138
+ end
139
+ context.readline_match_block(/(?<aborts>\d+) aborts, (?<deferred>\d+) deferred, (?<collisions>\d+) collisions, (?<last_collisions>\d+) late collisions/) do |block|
140
+ block.warning_ordinary(iface, :aborts, self)
141
+ block.warning_ordinary(iface, :deferred, self)
142
+ block.warning_ordinary(iface, :collisions, self)
143
+ block.warning_ordinary(iface, :last_collisions, self)
144
+ end
145
+
146
+ context.readline_match_block(/(?<lost_carrier>\d+) lost carrier/) do |block|
147
+ block.warning_ordinary(iface, :lost_carrier, self)
148
+ end
149
+ end
150
+
151
+ def parse_loopback(context)
152
+ iface = {}
153
+ iface_id = nil
154
+ context.readline_match_block(/(?<iface_id>LoopBack\d+) current state\s?:\s?(?<state>.*)/) do |block|
155
+ iface_id = block[:iface_id]
156
+ useful[:interface][iface_id] = iface
157
+ block.update(iface, :iface_id)
158
+ block.update(iface, :state)
159
+ end
160
+ same_line_2(context, iface, iface_id)
161
+ end
162
+
163
+ def parse_vlanif(context)
164
+ iface = {}
165
+ iface_id = nil
166
+ context.readline_match_block(/(?<iface_id>.*) current state: (?<state>.*)/) do |block|
167
+ iface_id = block[:iface_id]
168
+ useful[:interface][iface_id] = iface
169
+ block.update(iface, :iface_id)
170
+ block.update(iface, :state)
171
+ end
172
+ same_line_2(context, iface, iface_id)
173
+ end
174
+
175
+ def same_line_2(context, iface, iface_id)
176
+ context.readline_match_block(/Line protocol current state: (?<proto_state>.*)/) do |block|
177
+ block.update(iface, :proto_state)
178
+ end
179
+ context.readline_match_block(/Description: (?<description>.*)/) do |block|
180
+ block.update(iface, :description)
181
+ end
182
+ context.readline_match_block(/Internet (?<addr>.*)/) do |block|
183
+ if block[:addr] =~ /Address (.*) Primary/
184
+ block.update(iface, :ip_addr, $1)
185
+ end
186
+ end
187
+ context.readline_match_block(/Hardware Address: (?<mac>.*)/) do |block|
188
+ block.update(iface, :mac)
189
+ end
190
+
191
+ if iface[:state] =~ /UP/
192
+ context.readline_match_block(/input, \d+ bytes, (?<input_drops>\d+) drops/) do |block|
193
+ block.warning_ordinary(iface, :input_drops, self)
194
+ end
195
+ context.readline_match_block(/output, \d+ bytes, (?<output_drops>\d+) drops/) do |block|
196
+ block.warning_ordinary(iface, :output_drops, self)
197
+ end
198
+ end
199
+ end
200
+
201
+ end
202
+
203
+
@@ -0,0 +1,34 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::H3C::DisplayIpInterfaceBrief < Aio::Module::Cmd::H3C
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "display ip interface brief",
11
+ :cmd_short => "dis ip int b",
12
+ :author => "Elin",
13
+ :description => "This is H3C Command# display ip interface brief",
14
+ :ranking => Ranking_1,
15
+ :platform => "all",
16
+ })
17
+ end
18
+
19
+ def parse
20
+ context = self.context.dup
21
+ useful[:interface_brief] = {}
22
+ context.readline_match_block(/Interface Physical Protocol IP Address/) {|b|b}
23
+ context.readline_match_block_loop(/(?<interface_id>[^\s]+) (?<status>[^\s]+) (?<protocol>[^\s]+) (?<ip>[^\s]+)/, reg_blank) do |block|
24
+ iface = {}
25
+ iface_id = block[:interface_id]
26
+ useful[:interface_brief][iface_id.to_sym] = iface
27
+ block.update(iface, :interface_id)
28
+ block.update(iface, :ip)
29
+ block.update(iface, :status)
30
+ block.update(iface, :protocol)
31
+ end
32
+ end
33
+ end
34
+
@@ -0,0 +1,68 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::H3C::DisplayIpRouting < Aio::Module::Cmd::H3C
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "display ip routing-table",
11
+ :cmd_short => "dis ip rout",
12
+ :author => "Elin",
13
+ :ranking => Ranking_2,
14
+ :description => "This is H3C Command# display ip routing-table",
15
+ :platform => "all",
16
+ :benchmark => {}
17
+ })
18
+ end
19
+
20
+ def parse
21
+ cont = self.context.dup
22
+ routing = {}
23
+ useful[:routing] = routing
24
+
25
+ cont.readline_match_block(/Destinations : (?<destinations>\d+) Routes : (?<routes>\d+)/) do |block|
26
+ block.update(routing, :destinations)
27
+ block.update(routing, :routes)
28
+ end
29
+ cont.readline_match_block(//)
30
+ cont.readline_match_block(/Destination\/Mask Proto Pre Cost NextHop Interface/)
31
+ cont.readline_match_block(//)
32
+ loop do
33
+ cont.readline_range_if(/^\d+/, /^\s+/) do |cont_layer|
34
+ parse_routing(cont_layer)
35
+ end
36
+ end
37
+ end
38
+
39
+ def parse_routing(context)
40
+ router = nil
41
+ context.readline_match_block(/(?<dest>[^\s]*) (?<proto>[^\s]*) (?<pre>\d+) (?<cost>\d+) (?<next_hop>.*) (?<iface>.*)/) do |block|
42
+ route = {}
43
+ router = block[:dest]
44
+ useful[:routing][router] = {}
45
+ useful[:routing][router][:first] = route
46
+ block.update(useful[:routing][router], :dest)
47
+ block.update(route, :proto)
48
+ block.update(route, :pre)
49
+ block.update(route, :cost)
50
+ block.update(route, :next_hop)
51
+ block.update(route, :iface)
52
+ end
53
+
54
+ if context.size == 2
55
+ context.readline_match_block(/ (?<proto>.*) (?<pre>\d+) (?<cost>\d+) (?<next_hop>.*) (?<iface>.*)/) do |block|
56
+ route = {}
57
+ router = block[:dest]
58
+ useful[:routing][router][:secend] = route
59
+ block.update(route, :proto)
60
+ block.update(route, :pre)
61
+ block.update(route, :cost)
62
+ block.update(route, :next_hop)
63
+ block.update(route, :iface)
64
+ end
65
+ end
66
+ end
67
+ end
68
+
@@ -0,0 +1,90 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::H3C::DisplayIpRoutingStat < Aio::Module::Cmd::H3C
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "display ip routing-table statistics",
11
+ :cmd_short => "dis ip rout stat",
12
+ :author => "Elin",
13
+ :description => "This is H3C Command# display ip routing-table statistics",
14
+ :ranking => Ranking_1,
15
+ :platform => "all",
16
+ :benchmark => {}
17
+ })
18
+ end
19
+
20
+ def parse
21
+ cont = self.context.dup
22
+ stat = {}
23
+ useful[:route_summary] = stat
24
+
25
+ #cont.readline_match_block(/Proto route active added deleted freed/)
26
+ cont.readline_match_block(/DIRECT (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
27
+ stat_dir = {}
28
+ stat[:direct] = stat_dir
29
+ block.update(stat_dir, :route)
30
+ block.update(stat_dir, :active)
31
+ block.update(stat_dir, :added)
32
+ block.update(stat_dir, :deleted)
33
+ block.update(stat_dir, :freed)
34
+ end
35
+ cont.readline_match_block(/STATIC (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
36
+ stat_sta = {}
37
+ stat[:static] = stat_sta
38
+ block.update(stat_sta, :route)
39
+ block.update(stat_sta, :active)
40
+ block.update(stat_sta, :added)
41
+ block.update(stat_sta, :deleted)
42
+ block.update(stat_sta, :freed)
43
+ end
44
+ cont.readline_match_block(/RIP (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
45
+ stat_rip = {}
46
+ stat[:rip] = stat_rip
47
+ block.update(stat_rip, :route)
48
+ block.update(stat_rip, :active)
49
+ block.update(stat_rip, :added)
50
+ block.update(stat_rip, :deleted)
51
+ block.update(stat_rip, :freed)
52
+ end
53
+ cont.readline_match_block(/OSPF (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
54
+ stat_ospf = {}
55
+ stat[:ospf] = stat_ospf
56
+ block.update(stat_ospf, :route)
57
+ block.update(stat_ospf, :active)
58
+ block.update(stat_ospf, :added)
59
+ block.update(stat_ospf, :deleted)
60
+ block.update(stat_ospf, :freed)
61
+ end
62
+ cont.readline_match_block(/IS-IS (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
63
+ stat_isis = {}
64
+ stat[:isis] = stat_isis
65
+ block.update(stat_isis, :route)
66
+ block.update(stat_isis, :active)
67
+ block.update(stat_isis, :added)
68
+ block.update(stat_isis, :deleted)
69
+ block.update(stat_isis, :freed)
70
+ end
71
+ cont.readline_match_block(/BGP (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
72
+ stat_bgp = {}
73
+ stat[:bgp] = stat_bgp
74
+ block.update(stat_bgp, :route)
75
+ block.update(stat_bgp, :active)
76
+ block.update(stat_bgp, :added)
77
+ block.update(stat_bgp, :deleted)
78
+ block.update(stat_bgp, :freed)
79
+ end
80
+ cont.readline_match_block(/Total (?<route>\d+) (?<active>\d+) (?<added>\d+) (?<deleted>\d+) (?<freed>\d+)/) do |block|
81
+ stat_total = {}
82
+ stat[:total] = stat_total
83
+ block.update(stat_total, :route)
84
+ block.update(stat_total, :active)
85
+ block.update(stat_total, :added)
86
+ block.update(stat_total, :deleted)
87
+ block.update(stat_total, :freed)
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,35 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::H3C::DisplayMemory < Aio::Module::Cmd::H3C
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "display memory",
11
+ :cmd_short => "dis mem",
12
+ :author => "Elin",
13
+ :description => "This is H3C Command# display memory",
14
+ :ranking => Ranking_1,
15
+ :platform => "all",
16
+ :benchmark => {}
17
+ })
18
+ end
19
+
20
+ def parse
21
+ cont = self.context.dup
22
+ memory = {}
23
+ useful[:memory] = memory
24
+ cont.readline_match_block(/System Total Memory\(bytes\): (?<total_memory>\d+)/) do |block|
25
+ #block.update(memory, :total_memory)
26
+ end
27
+ cont.readline_match_block(/Total Used Memory\(bytes\): (?<used_memory>\d+)/) do |block|
28
+ #block.update(memory, :used_memory)
29
+ end
30
+ cont.readline_match_block(/Used Rate: (?<used_rate>\d+)%/) do |block|
31
+ block.update(memory, :used_rate)
32
+ end
33
+ end
34
+ end
35
+
@@ -0,0 +1,38 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::H3C::DisplayOspfPeer < Aio::Module::Cmd::H3C
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "display ospf peer",
11
+ :cmd_short => "dis ospf p",
12
+ :author => "Elin",
13
+ :description => "This is H3C Command# display ospf peer",
14
+ :ranking => Ranking_1,
15
+ :platform => "all"
16
+ })
17
+ end
18
+
19
+ def parse
20
+ context = self.context.dup
21
+ useful[:ospf_neighbor] = {}
22
+ count = 0
23
+ context.readline_range_loop(/Route/, reg_blank) do |cont|
24
+ cont.readline_match_block(/Route/) {|b|b}
25
+ cont.readline_match_block_loop(/(?<neighbor_id>[^\s]+) (?<address>[^\s]+) (?<pri>\d+) (.*) (?<interface>.*) (?<state>.*)/, reg_blank) do |block|
26
+ nei = {}
27
+ nei_id = block[:neighbor_id]
28
+ useful[:ospf_neighbor][nei_id.to_sym] = nei
29
+ block.update(nei, :neighbor_id)
30
+ block.update(nei, :pri)
31
+ block.update(nei, :state)
32
+ block.update(nei, :address)
33
+ block.update(nei, :interface)
34
+ count += 1
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,90 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::H3C::DisplayPower < Aio::Module::Cmd::H3C
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "display power",
11
+ :cmd_short => "dis pow",
12
+ :author => "Elin",
13
+ :description => "This is H3C Command# display power",
14
+ :ranking => Ranking_1,
15
+ :platform => "all",
16
+ :benchmark => {
17
+ :power_status => ["=~", /Normal/, /Absent/],
18
+ },
19
+ })
20
+ end
21
+
22
+ def parse
23
+ cont = self.context.dup
24
+ useful[:power] = {}
25
+ case device_template
26
+ when Template_1
27
+ cont.readline_range_loop(/Slot/, /Slot/) do |cont_layer|
28
+ parse_slot(cont_layer)
29
+ end
30
+ when Template_2
31
+ cont.readline_range_loop(/Unit/, /Unit/) do |cont_layer|
32
+ parse_unit(cont_layer)
33
+ end
34
+ end
35
+ end
36
+
37
+ =begin
38
+ def parse_def(context)
39
+ case context[0]
40
+ when /Slot/
41
+ parse_slot(context)
42
+ when /Unit/
43
+ parse_unit(context)
44
+ end
45
+ end
46
+ =end
47
+
48
+ def parse_slot(context)
49
+ power = {}
50
+ context.readline_match_block(/Slot (?<slot_id>\d+)/) do |block|
51
+ useful[:power] = {}
52
+ useful[:power]["slot_#{block[:slot_id]}"] = power
53
+ block.update(power, :slot_id)
54
+ end
55
+ context.readline_range_loop(/Power/, reg_blank) do |cont_layer|
56
+ parse_power(cont_layer, power)
57
+ end
58
+ end
59
+
60
+ def parse_unit(context)
61
+ power = {}
62
+ context.readline_match_block(/Unit (?<slot_id>\d+)/) do |block|
63
+ useful[:power] = {}
64
+ useful[:power]["slot_#{block[:slot_id]}"] = power
65
+ block.update(power, :slot_id)
66
+ end
67
+ context.readline_range_loop(/power/, /power/, {:before=>true}) do |cont_layer|
68
+ parse_power(cont_layer, power)
69
+ end
70
+ end
71
+
72
+ def parse_power(context, power)
73
+ power_id_info = {}
74
+ context.readline_match_block(/[Pp]ower (?<power_id>\d+)/) do |block|
75
+ power_id = block[:power_id]
76
+ power["power_#{power_id}"] = power_id_info
77
+ block.update(power_id_info, :power_id)
78
+ end
79
+ context.readline_match_block(/State : (?<power_status>.*)/) do |block|
80
+ block.warning_serious(power_id_info, :power_status, self)
81
+ end
82
+
83
+ context.readline_match_block(/Type : (?<type>.*)/) do |block|
84
+ block.update(power_id_info, :type)
85
+ end
86
+ end
87
+ end
88
+
89
+
90
+