aio_elin 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+