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,10 @@
1
+ module Aio::Device
2
+ class Juniper < ParentDevice
3
+
4
+ def initialize
5
+ super
6
+ @device_type = "juniper"
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ module Aio::Device
2
+ class Maipu < ParentDevice
3
+
4
+ def initialize
5
+ super
6
+ @device_type = "maipu"
7
+ end
8
+
9
+ end
10
+ end
11
+
@@ -0,0 +1,233 @@
1
+ #
2
+ # 这个模块用于统一命令方法,方便一起管理
3
+ #
4
+ module Aio::Device
5
+ module Methods
6
+
7
+ class << self
8
+ include Aio::Ui::Verbose
9
+
10
+ def klass=(klass)
11
+ @@klass = klass
12
+ end
13
+
14
+ def klass
15
+ @@klass
16
+ end
17
+
18
+ # CPU 利用率百分比
19
+ def cpu_percent
20
+ begin
21
+ cmd = CmdSwitch.cpu(klass)
22
+ return klass.cmds_useful[cmd][:cpu][:minutes_5] if kind_of?(Cisco, H3C)
23
+ return 0 if klass.kind_of? Maipu
24
+ rescue Exception
25
+ puts_error
26
+ return ""
27
+ end
28
+ end
29
+
30
+ # Memory 利用率百分比
31
+ def memory_percent
32
+ begin
33
+ cmd = CmdSwitch.memory(klass)
34
+ return klass.cmds_useful[cmd][:memory][:used_rate] if klass.kind_of? H3C
35
+ return klass.cmds_useful[cmd][:memory][:proc_ratio] if klass.kind_of? Cisco
36
+ return klass.cmds_useful[cmd][:memory][:used_percent] if klass.kind_of? Maipu
37
+ rescue Exception
38
+ puts_error
39
+ return ""
40
+ end
41
+ end
42
+
43
+ # IOS 版本
44
+ def ios_version
45
+ begin
46
+ cmd = CmdSwitch.version(klass)
47
+ return klass.cmds_useful[cmd][:software][:version] if kind_of?(Cisco, H3C, Maipu)
48
+ rescue Exception
49
+ puts_error
50
+ return ""
51
+ end
52
+ end
53
+
54
+ # IOS 特性集
55
+ def soft_image
56
+ begin
57
+ cmd = CmdSwitch.version(klass)
58
+ return klass.cmds_useful[cmd][:software][:soft_image] if kind_of?(Cisco, H3C, Maipu)
59
+ rescue Exception
60
+ puts_error
61
+ return ""
62
+ end
63
+ end
64
+
65
+ # 运行时间
66
+ def uptime
67
+ begin
68
+ cmd = CmdSwitch.version(klass)
69
+ return klass.cmds_useful[cmd][:software][:uptime] if kind_of?(Cisco, H3C, Maipu)
70
+ rescue Exception
71
+ puts_error
72
+ return ""
73
+ end
74
+ end
75
+
76
+ # 判断温度是否有警告
77
+ def warning_env?
78
+ begin
79
+ if klass.kind_of? Maipu
80
+ return (klass.include_warning?(:mainboard_temperature) and klass.include_warning?(:cpu_temperature))
81
+ end
82
+ return klass.include_warning?(:cpu_status) if klass.kind_of? Cisco
83
+ rescue Exception
84
+ puts_error
85
+ end
86
+ end
87
+
88
+
89
+ # 判断电源是否有警告
90
+ def warning_power?
91
+ begin
92
+ return klass.include_warning?(:power_status) if kind_of?(Cisco, H3C, Maipu)
93
+ rescue Exception
94
+ puts_error
95
+ end
96
+ end
97
+
98
+ # 判断风扇是否有警告
99
+ def warning_fan?
100
+ begin
101
+ return klass.include_warning?(:fan_status) if kind_of?(Cisco, H3C, Maipu)
102
+ rescue Exception
103
+ puts_error
104
+ end
105
+ end
106
+
107
+ # 只判断最关键的三个信息
108
+ def warning_interface?
109
+ begin
110
+ if kind_of?(Cisco, Maipu, H3C)
111
+ tmp = klass.include_warning?(:input_errors)
112
+ tmp = tmp or klass.include_warning(:crc)
113
+ tmp = tmp or klass.include_warning(:output_errors)
114
+ return tmp
115
+ end
116
+ rescue Exception
117
+ puts_error
118
+ end
119
+ end
120
+
121
+ # 板卡序列号信息
122
+ # 返回数组: [{:name, :pid, :sn, :description}]
123
+ def inventory
124
+ cmd = CmdSwitch.inventory(klass)
125
+ begin
126
+ if kind_of?(Cisco, H3C)
127
+ keys = klass.cmds_useful[cmd][:inventory].keys
128
+ res = []
129
+ keys.each do |sn|
130
+ res << klass.cmds_useful[cmd][:inventory][sn.to_sym]
131
+ end
132
+ return res
133
+ else
134
+ return [{:name => "", :pid => "", :sn => "", :description => ""}]
135
+ end
136
+
137
+ rescue Exception => e
138
+ puts_error
139
+ return [{:name => "", :pid => "", :sn => "", :description => ""}]
140
+ end
141
+ end
142
+
143
+ def clock
144
+ begin
145
+ cmd = CmdSwitch.clock(klass)
146
+ pool = ["time", "zone", "week", "year", "month", "day"]
147
+ res = []
148
+ pool.each do |key|
149
+ res << klass.cmds_useful[cmd][:clock][key.to_sym]
150
+ end
151
+ return res
152
+ rescue Exception
153
+ puts_error
154
+ return ["", "", "", "", "", ""]
155
+ end
156
+ end
157
+
158
+ def get_manager_ip
159
+ return klass.manager_ip unless klass.manager_ip.nil?
160
+
161
+ begin
162
+ cmd = []
163
+ cmd[0] = CmdSwitch.interface(klass)
164
+ cmd[1] = CmdSwitch.interface_brief(klass)
165
+
166
+ total = []
167
+ manager = ""
168
+
169
+ return unless kind_of?(Cisco, H3C)
170
+
171
+ # 如果是 show interfaces
172
+ if klass.has_cmd?(cmd[0])
173
+ total = klass.cmds_useful[cmd[0]][:interface]
174
+
175
+ total.each_value do |info|
176
+ if (info[:iface_id] == (klass.interface[:loopback] + "0")) and info[:state] =~ /(?i)up/
177
+ manager = info[:addr]
178
+ end
179
+ end
180
+
181
+ # 如果是 show ip interface brief
182
+ elsif klass.has_cmd?(cmd[1])
183
+ total = klass.cmds_useful[cmd[1]][:interface_brief]
184
+
185
+ total.each_value do |info|
186
+ # 如果有环回口,那么就直接输出
187
+ if (info[:interface_id] == klass.interface[:loopback] + "0") and (info[:status] =~ /(?i)up/)
188
+ manager = info[:ip]
189
+ end
190
+ end
191
+ end
192
+ return manager
193
+
194
+ rescue Exception
195
+ puts_error
196
+ return ""
197
+ end
198
+ end
199
+
200
+
201
+
202
+ private
203
+
204
+ # 判断klass是否是指定的Device类型
205
+ def kind_of?(*type)
206
+ type.each do |t|
207
+ return true if klass.kind_of?(t)
208
+ end
209
+ return false
210
+ end
211
+
212
+ # 统一的错误回显
213
+ def puts_error
214
+ res = /`(?<method>.*)'/.match(caller[1])
215
+ print_error "<#{res[:method]}>方法未执行成功 #{klass.class} : #{klass.device_name}"
216
+ end
217
+
218
+ # 对于有相同路径的cmds_useful,可以使用此方法
219
+ # 将按照给出的设备类型返回cmds_useful
220
+ # 方便命令的统一管理
221
+ def type_send(*types)
222
+ types.each do |type|
223
+ if klass.kind_of?(type)
224
+ yield klass.cmds_useful
225
+ else
226
+ next
227
+ end
228
+ end
229
+ end
230
+
231
+ end
232
+ end
233
+ end
@@ -0,0 +1,199 @@
1
+ #
2
+ # 这个模块用于统一命令方法,方便一起管理
3
+ #
4
+ module Aio::Device
5
+ module Methods
6
+
7
+ class << self
8
+ include Aio::Ui::Verbose
9
+
10
+ # CPU 利用率百分比
11
+ def cpu_percent(klass)
12
+ begin
13
+ return klass.cmds_useful["display cpu-usage"][:cpu][:minutes_5] if klass.kind_of? H3C
14
+ return klass.cmds_useful["show process cpu"][:cpu][:minutes_5] if klass.kind_of? Cisco
15
+ return 0 if klass.kind_of? Maipu
16
+ rescue Exception
17
+ puts_error(klass)
18
+ return ""
19
+ end
20
+ end
21
+
22
+ # Memory 利用率百分比
23
+ def memory_percent(klass)
24
+ begin
25
+ return klass.cmds_useful["display memory"][:memory][:used_rate] if klass.kind_of? H3C
26
+ return klass.cmds_useful["show process memory"][:memory][:proc_ratio] if klass.kind_of? Cisco
27
+ return klass.cmds_useful["show memory"][:memory][:used_percent] if klass.kind_of? Maipu
28
+ rescue Exception
29
+ puts_error(klass)
30
+ return ""
31
+ end
32
+ end
33
+
34
+ # IOS 版本
35
+ def ios_version(klass)
36
+ begin
37
+ return klass.cmds_useful["show version"][:software][:version] if klass.kind_of? Cisco
38
+ return klass.cmds_useful["display version"][:software][:version] if klass.kind_of? H3C
39
+ return klass.cmds_useful["show version"][:software][:version] if klass.kind_of? Maipu
40
+ rescue Exception
41
+ puts_error(klass)
42
+ return ""
43
+ end
44
+ end
45
+
46
+ # IOS 特性集
47
+ def soft_image(klass)
48
+ begin
49
+ return klass.cmds_useful["show version"][:software][:soft_image] if klass.kind_of? Cisco
50
+ return klass.cmds_useful["display version"][:software][:soft_image] if klass.kind_of? H3C
51
+ return klass.cmds_useful["show version"][:software][:soft_image] if klass.kind_of? Maipu
52
+ rescue Exception
53
+ puts_error(klass)
54
+ return ""
55
+ end
56
+ end
57
+
58
+ # 运行时间
59
+ def uptime(klass)
60
+ begin
61
+ return klass.cmds_useful["show version"][:software][:uptime] if klass.kind_of? Cisco
62
+ return klass.cmds_useful["display version"][:software][:uptime] if klass.kind_of? H3C
63
+ return klass.cmds_useful["show version"][:software][:uptime] if klass.kind_of? Maipu
64
+ rescue Exception
65
+ puts_error(klass)
66
+ return ""
67
+ end
68
+ end
69
+
70
+ # 判断温度是否有警告
71
+ def warning_env?(klass)
72
+ begin
73
+ if klass.kind_of? Maipu
74
+ return (klass.include_warning?(:mainboard_temperature) and klass.include_warning?(:cpu_temperature))
75
+ end
76
+ return klass.include_warning?(:cpu_status) if klass.kind_of? Cisco
77
+ rescue Exception
78
+ puts_error(klass)
79
+ end
80
+ end
81
+
82
+
83
+ # 判断电源是否有警告
84
+ def warning_power?(klass)
85
+ begin
86
+ return klass.include_warning?(:power_status) if kind_of?(klass, Cisco, H3C, Maipu)
87
+ #return klass.include_warning?(:power_status) if klass.kind_of? H3C
88
+ #return klass.include_warning?(:power_status) if klass.kind_of? Maipu
89
+ rescue Exception
90
+ puts_error(klass)
91
+ end
92
+ end
93
+
94
+ # 判断风扇是否有警告
95
+ def warning_fan?(klass)
96
+ begin
97
+ return klass.include_warning?(:fan_status) if kind_of?(klass, Cisco, H3C, Maipu)
98
+ #return klass.include_warning?(:fan_status) if klass.kind_of? H3C
99
+ #return klass.include_warning?(:fan_status) if klass.kind_of? Maipu
100
+ rescue Exception
101
+ puts_error(klass)
102
+ end
103
+ end
104
+
105
+ # 只判断最关键的三个信息
106
+ def warning_interface?(klass)
107
+ begin
108
+ if kind_of?(klass, Cisco, Maipu, H3C)
109
+ tmp = klass.include_warning?(:input_errors)
110
+ tmp = tmp or klass.include_warning(:crc)
111
+ tmp = tmp or klass.include_warning(:output_errors)
112
+ return tmp
113
+ end
114
+ rescue Exception
115
+ puts_error(klass)
116
+ end
117
+ end
118
+
119
+ # 板卡序列号信息
120
+ # 返回数组: [{:name, :pid, :sn, :description}]
121
+ def inventory(klass)
122
+ cmd = case klass
123
+ when Cisco
124
+ "show inventory"
125
+ when H3C
126
+ "display device manuinfo"
127
+ end
128
+
129
+ begin
130
+ if klass.kind_of? Cisco or klass.kind_of? H3C
131
+ keys = klass.cmds_useful[cmd][:inventory].keys
132
+ res = []
133
+ keys.each do |sn|
134
+ res << klass.cmds_useful[cmd][:inventory][sn.to_sym]
135
+ end
136
+ return res
137
+ else
138
+ return [{:name => "", :pid => "", :sn => "", :description => ""}]
139
+ end
140
+
141
+ rescue Exception => e
142
+ puts_error(klass)
143
+ return [{:name => "", :pid => "", :sn => "", :description => ""}]
144
+ end
145
+ end
146
+
147
+ def clock(klass)
148
+ begin
149
+ cmd = case klass
150
+ when Cisco
151
+ "show clock"
152
+ when H3C
153
+ "display clock"
154
+ end
155
+ pool = ["time", "zone", "week", "year", "month", "day"]
156
+ res = []
157
+ pool.each do |key|
158
+ res << klass.cmds_useful[cmd][:clock][key.to_sym]
159
+ end
160
+ return res
161
+ rescue Exception
162
+ puts_error(klass)
163
+ return ["", "", "", "", "", ""]
164
+ end
165
+ end
166
+
167
+ private
168
+
169
+ # 判断klass是否是指定的Device类型
170
+ def kind_of?(klass, *type)
171
+ res = false
172
+ type.each do |t|
173
+ res = klass.kind_of?(t) or res
174
+ end
175
+ return res
176
+ end
177
+
178
+ # 统一的错误回显
179
+ def puts_error(klass)
180
+ res = /`(?<method>.*)'/.match(caller[1])
181
+ print_error "<#{res[:method]}>方法未执行成功 #{klass.class} : #{klass.device_name}"
182
+ end
183
+
184
+ # 对于有相同路径的cmds_useful,可以使用此方法
185
+ # 将按照给出的设备类型返回cmds_useful
186
+ # 方便命令的统一管理
187
+ def type_send(klass, *types)
188
+ types.each do |type|
189
+ if klass.kind_of?(type)
190
+ yield klass.cmds_useful
191
+ else
192
+ next
193
+ end
194
+ end
195
+ end
196
+
197
+ end
198
+ end
199
+ end