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,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