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,177 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::Cisco::ShowInterfaces < Aio::Module::Cmd::Cisco
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "show interfaces",
11
+ :cmd_short => "sh int",
12
+ :author => "Elin",
13
+ :description => "This is Cisco Command# show interfaces",
14
+ :ranking => Ranking_1,
15
+ :platform => "all",
16
+ :benchmark => {
17
+ :input_queue_drops => ["<=", 10],
18
+ :total_output_drops => ["<=", 10],
19
+ :output_queue_drops => ["<=", 10],
20
+ :runts => ["<=", 10],
21
+ :giants => ["<=", 10],
22
+ :throttles => ["<=", 10],
23
+ :input_errors => ["<=", 10],
24
+ :crc => ["<=", 1000],
25
+ :frame => ["<=", 10],
26
+ :overrun => ["<=", 10],
27
+ :ignored => ["<=", 10],
28
+ :output_errors => ["<=", 10],
29
+ :collisions => ["<=", 10],
30
+ :iface_resets => ["<=", 10],
31
+ }
32
+ })
33
+ end
34
+
35
+ Reg_Ethernet = /Ethernet[^\.]+/
36
+ Reg_Loopback = /Loopback/
37
+ Reg_SubIface = /Ethernet.*[\.]/
38
+
39
+ def parse
40
+ cont = self.context.dup
41
+ useful[:interface] = {}
42
+ cont.readline_range_loop(/, line protocol/, /, line protocol/,
43
+ {:before => true}) do |cont_layer|
44
+ case device_template
45
+ when Template_3 # 当是ASA的时候
46
+ parse_asa(cont_layer)
47
+ else
48
+ switch_iface(cont_layer)
49
+ end
50
+ end
51
+ end
52
+
53
+ def switch_iface(context)
54
+ case context[0]
55
+ when Reg_Ethernet
56
+ parse_eth(context)
57
+ when Reg_Loopback
58
+ parse_eth(context)
59
+ when Reg_SubIface
60
+ parse_subiface(context)
61
+ end
62
+ end
63
+
64
+ def parse_asa(context)
65
+ iface = {}
66
+ iface_id = nil
67
+
68
+ context.readline_match_block(/Interface (?<iface_id>.*) "(?<side>.*)", is (?<state>.*), line protocol is (?<proto_state>.*)/) do |block|
69
+ iface_id = block[:iface_id].strip
70
+ useful[:interface][iface_id] = iface
71
+ block.update(iface, :iface_id)
72
+ block.update(iface, :side)
73
+ block.update(iface, :state)
74
+ block.update(iface, :proto_state)
75
+ end
76
+
77
+ return if iface.empty?
78
+ context.readline_match_block(/MAC address (?<mac>[^,]*)/) do |block|
79
+ block.update(iface, :mac)
80
+ end
81
+ context.readline_match_block(/IP address (?<addr>.*), subnet mask (?<mask>.*)/) do |block|
82
+ block.update(iface, :addr)
83
+ block.update(iface, :mask, Aio::Base::Toolkit::IPAddr.mask_dotted_to_i(block[:mask]).to_s)
84
+ end
85
+ iface_stat(context, iface)
86
+ end
87
+
88
+ def parse_eth(context)
89
+ iface = {}
90
+ iface_id = nil
91
+
92
+ context.readline_match_block(/(?<iface_id>.*) is (?<state>.*), line protocol is (?<proto_state>.*)/) do |block|
93
+ iface_id = block[:iface_id].strip
94
+ useful[:interface][iface_id] = iface
95
+ block.update(iface, :iface_id)
96
+ block.update(iface, :state)
97
+ block.update(iface, :proto_state)
98
+ end
99
+
100
+ context.readline_match_block(/Hardware .* address is (?<mac>[^\s]*) /) do |block|
101
+ block.update(iface, :mac)
102
+ end
103
+ context.readline_match_block(/Description: (?<description>.*)/) do |block|
104
+ block.update(iface, :description)
105
+ end
106
+ context.readline_match_block(/Internet address is (?<addr>[^\/]+)\/(?<mask>\d+)/) do |block|
107
+ block.update(iface, :addr)
108
+ block.update(iface, :mask)
109
+ end
110
+ context.readline_match_block(/Encapsulation (?<encapsulation>[^\s]*)/) do |block|
111
+ block.update(iface, :encapsulation)
112
+ end
113
+ context.readline_match_block(/(?<duplex>.*[Dd]uplex), (?<speed>.*), /) do |block|
114
+ block.update(iface, :duplex)
115
+ block.update(iface, :speed)
116
+ end
117
+ iface_stat(context, iface)
118
+ end
119
+
120
+ # 接口的计数
121
+ def iface_stat(context, iface)
122
+ #只有当:state 为UP的才会进行下面的操作
123
+ if iface[:state] =~ /up/
124
+ context.readline_match_block(/Input queue: \d+\/\d+\/(?<input_queue_drops>\d+)\/\d+ \(size\/max\/drops\/flushes\); Total output drops: (?<total_output_drops>\d+)/) do |block|
125
+ block.warning_ordinary(iface, :input_queue_drops, self)
126
+ block.warning_ordinary(iface, :total_output_drops, self)
127
+ end
128
+ context.readline_match_block(/Output queue: \d+\/\d+\/(?<output_queue_drops>\d+) \(size\/max total\/drops\)/) do |block|
129
+ block.warning_ordinary(iface, :output_queue_drops, self)
130
+ end
131
+ context.readline_match_block(/(?<runts>\d+) runts, (?<giants>\d+) giants, (?<throttles>\d+) throttles/) do |block|
132
+ block.warning_ordinary(iface, :runts, self)
133
+ block.warning_ordinary(iface, :giants, self)
134
+ block.warning_ordinary(iface, :throttles, self)
135
+ end
136
+ context.readline_match_block(/(?<input_errors>\d+) input errors, (?<crc>\d+) CRC, (?<frame>\d+) frame, (?<overrun>\d+) overrun, (?<ignored>\d+) ignored/) do |block|
137
+ block.warning_serious(iface, :input_errors, self)
138
+ block.warning_serious(iface, :crc, self)
139
+ block.warning_ordinary(iface, :frame, self)
140
+ block.warning_ordinary(iface, :overrun, self)
141
+ block.warning_ordinary(iface, :ignored, self)
142
+ end
143
+ context.readline_match_block(/(?<output_errors>\d+) output errors, (?<collisions>\d+) collisions, (?<iface_resets>\d+) interface resets/) do |block|
144
+ block.warning_serious(iface, :output_errors, self)
145
+ block.warning_ordinary(iface, :collisions, self)
146
+ block.warning_ordinary(iface, :iface_resets, self)
147
+ end
148
+ end
149
+ end
150
+
151
+ def parse_subiface(context)
152
+ iface = {}
153
+ iface_id = nil
154
+ context.readline_match_block(/(?<iface_id>.*) is (?<state>.*), line protocol is (?<proto_state>.*)/) do |block|
155
+ iface_id = block[:iface_id]
156
+ useful[:interface][iface_id] = iface
157
+ update(iface, :iface_id)
158
+ update(iface, :state)
159
+ update(iface, :proto_state)
160
+ end
161
+ context.readline_match_block(/Hardware .* address is (?<mac>.*) /) do |block|
162
+ update(iface, :mac)
163
+ end
164
+ context.readline_match_block(/Description: (?<description>.*)/) do |block|
165
+ update(iface, :description)
166
+ end
167
+ context.readline_match_block(/Internet address is (?<addr>.*)/) do |block|
168
+ update(iface, :addr)
169
+ end
170
+ context.readline_match_block(/Encapsulation (?<encapsulation>.*) Virtual LAN, Vlan ID (?<vlan_id>.*)/) do |block|
171
+ update(iface, :encapsulation)
172
+ update(iface, :vlan_id)
173
+ end
174
+ end
175
+
176
+ end
177
+
@@ -0,0 +1,43 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::Cisco::ShowInv < Aio::Module::Cmd::Cisco
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "show inventory",
11
+ :cmd_short => "sh inv",
12
+ :author => "Elin",
13
+ :description => "This is Cisco Command# show inventory",
14
+ :platform => "all",
15
+ })
16
+ end
17
+
18
+ def parse
19
+ context = self.context.dup
20
+ inv_info = {}
21
+ useful[:inventory] = inv_info
22
+
23
+ context.readline_range_loop(/NAME:/, reg_blank) do |cont|
24
+ slot_info = {}
25
+ name = ""
26
+ description = ""
27
+
28
+ cont.readline_match_block(/NAME: "(?<name>.*)", DESCR: "(?<description>.*)"/) do |block|
29
+ name = block[:name]
30
+ description = block[:description]
31
+ end
32
+ cont.readline_match_block(/PID: (?<pid>[^\s]+).*SN: (?<sn>[^\s]+)/) do |block|
33
+ sn = block[:sn]
34
+ inv_info[sn.to_sym] = slot_info
35
+ block.update(slot_info, :name, name)
36
+ block.update(slot_info, :description, description)
37
+ block.update(slot_info, :pid)
38
+ block.update(slot_info, :sn)
39
+ end
40
+ end
41
+ end
42
+ end
43
+
@@ -0,0 +1,42 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::Cisco::ShowIpInterfaceBrief < Aio::Module::Cmd::Cisco
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "show ip interface brief",
11
+ :cmd_short => "sh ip int b",
12
+ :author => "Elin",
13
+ :description => "This is Cisco Command# show ip interface brief",
14
+ :ranking => Ranking_1,
15
+ :platform => RS,
16
+ :benchmark => { }
17
+ })
18
+ end
19
+
20
+ def parse
21
+ context = self.context.dup
22
+ useful[:interface_brief] = {}
23
+ context.readline_match_block(/Interface IP-Address OK\? Method Status Protocol/) {|b|b}
24
+ context.readline_match_block_loop(/(?<interface_id>[^\s]+) (?<ip>[^\s]+) (?<ok>[^\s]+) (?<method>[^\s]+) (?<status>(?:administratively\s)?[^\s]+) (?<protocol>[^\s]+)/, reg_blank) do |block|
25
+ iface = {}
26
+ iface_id = block[:interface_id]
27
+ useful[:interface_brief][iface_id.to_sym] = iface
28
+ block.update(iface, :interface_id)
29
+ block.update(iface, :ip)
30
+ block.update(iface, :ok)
31
+ block.update(iface, :method)
32
+ block.update(iface, :status)
33
+ # 当状态是起来的,但是协议为Down,则纳入警告
34
+ if (block[:status] =~ /up/) and !(block[:protocol] =~ /up/)
35
+ block.warning_serious(iface, :protocol, self, {:force => true})
36
+ else
37
+ block.warning_serious(iface, :protocol, self, {:force => false})
38
+ end
39
+ end
40
+ end
41
+ end
42
+
@@ -0,0 +1,38 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::Cisco::ShowIpOspfNeighbor < Aio::Module::Cmd::Cisco
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "show ip ospf neighbor",
11
+ :cmd_short => "sh ip o n",
12
+ :author => "Elin",
13
+ :description => "This is Cisco Command# show ip ospf neighbor",
14
+ :ranking => Ranking_1,
15
+ :platform => "all",
16
+ })
17
+ end
18
+
19
+ def parse
20
+ context = self.context.dup
21
+ useful[:ospf_neighbor] = {}
22
+ context.readline_match_block(/Neighbor ID/) {|b|b}
23
+ count = 0
24
+ context.readline_match_block_loop(/(?<neighbor_id>[^\s]+) (?<pri>\d+) (?<state>[^\s]+) (.*) (?<address>[^\s]+) (?<interface>.*)/, reg_blank) do |block|
25
+ nei = {}
26
+ nei_id = block[:neighbor_id]
27
+ useful[:ospf_neighbor][nei_id.to_sym] = nei
28
+ block.update(nei, :neighbor_id)
29
+ block.update(nei, :pri)
30
+ block.update(nei, :state)
31
+ block.update(nei, :address)
32
+ block.update(nei, :interface)
33
+ count += 1
34
+ end
35
+ end
36
+ end
37
+
38
+
@@ -0,0 +1,81 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::Cisco::ShowIpRouteSummary < Aio::Module::Cmd::Cisco
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "show ip route summary",
11
+ :cmd_short => "sh ip rou sum",
12
+ :author => "Elin",
13
+ :description => "This is Cisco Command# show ip route summary",
14
+ :platform => "all",
15
+ :benchmark => {}
16
+ })
17
+ end
18
+
19
+ def parse
20
+ cont = self.context.dup
21
+ summary = {}
22
+ useful[:route_summary] = summary
23
+
24
+ cont.readline_match_block(/Route Source Networks Subnets Replicates Overhead/)
25
+ cont.readline_match_block(/connected (?<networks>\d+) (?<subnets>\d+) (?<replicates>\d+)/) do |block|
26
+ summary_conn = {}
27
+ summary[:connected] = summary_conn
28
+ block.update(summary_conn, :networks)
29
+ block.update(summary_conn, :subnets)
30
+ block.update(summary_conn, :replicates)
31
+ end
32
+
33
+ cont.readline_match_block(/static (?<networks>\d+) (?<subnets>\d+) (?<replicates>\d+)/) do |block|
34
+ summary_static = {}
35
+ summary[:static] = summary_static
36
+ block.update(summary_static, :networks)
37
+ block.update(summary_static, :subnets)
38
+ block.update(summary_static, :replicates)
39
+ end
40
+
41
+ loop do
42
+ # 当出现 internal 则代表循环结束
43
+ if cont.count_line =~ /internal/
44
+ cont.readline_match_block(/internal (?<networks>\d+)/) do |block|
45
+ summary[:internal] = {}
46
+ block.update(summary[:internal], :networks)
47
+ end
48
+ break
49
+ end
50
+
51
+ # 当出现不是预想情况,则跳过
52
+ unless cont.count_line =~ /.*\s+\d+\s+\d+\s+\d+\s+\d+/
53
+ cont.next
54
+ next
55
+ end
56
+
57
+ # 有的多一个Replicates,整个数值有可能是5,也有可能是4
58
+ # 但是后面的 Replicates Overhead Memory 不做考虑,直接忽略
59
+ cont.readline_match_block(/(?<proto>[^\d\s]+) (?<proto_id>\d+) (?<networks>\d+) (?<subnets>\d+) (?<replicates>\d+) .*/) do |block|
60
+ proto = block[:proto]
61
+ proto_id = block[:proto_id]
62
+ summary_proto = {}
63
+ summary["#{proto}_#{proto_id}".to_sym] = summary_proto
64
+ block.update(summary_proto, :proto, proto)
65
+ block.update(summary_proto, :proto_id)
66
+ block.update(summary_proto, :networks)
67
+ block.update(summary_proto, :subnets)
68
+ block.update(summary_proto, :replicates)
69
+ end
70
+ end
71
+
72
+ cont.readline_match_block(/Total (?<networks>\d+) (?<subnets>\d+) (?<replicates>\d+)/) do |block|
73
+ summary_total = {}
74
+ summary[:total] = summary_total
75
+ block.update(summary_total, :networks)
76
+ block.update(summary_total, :subnets)
77
+ block.update(summary_total, :replicates)
78
+ end
79
+
80
+ end
81
+ end
@@ -0,0 +1,27 @@
1
+ #coding=utf-8
2
+
3
+ class Aio::Module::Cmd::Cisco::ShowMemory < Aio::Module::Cmd::Cisco
4
+ include Aio::Module
5
+
6
+ def initialize
7
+ super({
8
+ :cmd_full => "show memory",
9
+ :cmd_short => "sh mem",
10
+ :author => "Elin",
11
+ :description => "This is Cisco ASA Command# show memory",
12
+ :ranking => Ranking_1,
13
+ :platform => "asa",
14
+ :benchmark => {
15
+ :proc_ratio => ["<", 70.0],
16
+ }
17
+ })
18
+ end
19
+
20
+ def parse
21
+ cont = self.context.dup
22
+ useful[:memory] = {}
23
+ cont.readline_match_block(/Used memory: .* bytes \((?<proc_ratio>\d+)%/) do |block|
24
+ block.warning_serious(useful[:memory], :proc_ratio, self, {:string => block[:proc_ratio]})
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,35 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::Cisco::ShowProcessCPU < Aio::Module::Cmd::Cisco
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "show process cpu",
11
+ :cmd_short => "sh pro cpu",
12
+ :author => "Elin",
13
+ :description => "This is Cisco Command# show process cpu",
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
+
24
+ def parse
25
+ cont = self.context.dup
26
+ cpu = {}
27
+ useful[:cpu] = cpu
28
+
29
+ cont.readline_match_block(/one minute: (?<minute_1>\d+)%; five minutes: (?<minutes_5>\d+)%/) do |block|
30
+ #block.warning_serious(cpu, :seconds_5, self)
31
+ #block.warning_serious(cpu, :minute_1, self)
32
+ block.warning_serious(cpu, :minutes_5, self)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,63 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::Cisco::ShowProcessMemory < Aio::Module::Cmd::Cisco
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "show process memory",
11
+ :cmd_short => "sh pro m",
12
+ :author => "Elin",
13
+ :description => "This is Cisco Command# show process memory",
14
+ :ranking => Ranking_1,
15
+ :platform => "all",
16
+ :benchmark => {
17
+ :proc_ratio => ["<", 70.0],
18
+ :io_ratio => ["<", 70.0]
19
+ }
20
+ })
21
+ end
22
+
23
+ def parse
24
+ cont = self.context.dup
25
+ useful[:memory] = {}
26
+
27
+ case device_template
28
+ when Template_1
29
+ parse_def(cont)
30
+ when Template_2
31
+ if device_version =~ /12.2\(33\)/ # 当是Cisco7606 的时候,即使是12.2(17r)S4,Memory的模板也是默认模板
32
+ parse_def(cont)
33
+ else
34
+ parse_tmp_2(cont)
35
+ end
36
+ end
37
+ end
38
+
39
+ def parse_tmp_2(cont)
40
+ cont.readline_match_block(/System Memory : (?<proc_total>\d+)K total, (?<proc_used>\d+)K used/) do |block|
41
+ proc_ratio = ratio(block[:proc_used], block[:proc_total])
42
+ block.warning_serious(useful[:memory], :proc_ratio, self, {:string => proc_ratio})
43
+ end
44
+ end
45
+
46
+ def parse_def(cont)
47
+ cont.readline_match_block(/Processor Pool Total: (?<proc_total>\d+) Used: (?<proc_used>\d+)/) do |block|
48
+ proc_ratio = ratio(block[:proc_used], block[:proc_total])
49
+ block.warning_serious(useful[:memory], :proc_ratio, self, {:string => proc_ratio})
50
+ end
51
+ cont.readline_match_block(/I\/O Pool Total: (?<io_total>\d+) Used: (?<io_used>\d+)/) do |block|
52
+ io_ratio = ratio(block[:io_used], block[:io_total])
53
+ #block.warning_serious(useful[:memory], :io_ratio, self, io_ratio)
54
+ block.update(useful[:memory], :io_ratio, io_ratio)
55
+ end
56
+ end
57
+
58
+ # 返回为String
59
+ def ratio(fir, sec)
60
+ format("%.2f", ((fir.to_f / sec.to_f) * 100))
61
+ end
62
+ end
63
+
@@ -0,0 +1,97 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::Cisco::ShowVersion < Aio::Module::Cmd::Cisco
6
+ include Aio::Module
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
22
+
23
+ def parse
24
+ cont = self.context.dup
25
+ soft_info = {}
26
+ useful[:software] = soft_info
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
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
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
94
+
95
+ end
96
+
97
+
@@ -0,0 +1,32 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::H3C::DisplayClock < Aio::Module::Cmd::H3C
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "display clock",
11
+ :cmd_short => "dis clo",
12
+ :author => "Elin",
13
+ :description => "This is H3C Command# display clock",
14
+ :ranking => Ranking_1,
15
+ :platform => "all",
16
+ })
17
+ end
18
+
19
+ def parse
20
+ context = self.context.dup
21
+ clock = {}
22
+ useful[:clock] = clock
23
+ context.readline_match_block(/(?<time>[^\s]+) (?<zone>[^\s]+) (?<week>[^\s]+) (?<month>\d+)\/(?<day>\d+)\/(?<year>\d+)/) do |block|
24
+ block.update(clock, :time)
25
+ block.update(clock, :zone)
26
+ block.update(clock, :week)
27
+ block.update(clock, :year)
28
+ block.update(clock, :month)
29
+ block.update(clock, :day)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,51 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::H3C::DisplayCpu < Aio::Module::Cmd::H3C
6
+ include Aio::Module
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
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
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
50
+ end
51
+