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,400 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::OutputStyle::ExcelTableWps < Aio::Module::OutputStyle
6
+ include Aio::Module
7
+ include Aio::Device
8
+ include Aio::Base::Toolkit::ExcelWps
9
+ include Aio::Ui::Verbose
10
+
11
+ attr_accessor :worksheet
12
+
13
+ #TitleBanner = "湖北中行现场巡检报告"
14
+ TitleBanner = "现场巡检报告"
15
+ [
16
+ # 1号网核心
17
+ ["A_HBWHA_COR_CS01", "30.48.1.248"],
18
+ ["A_HBWHA_COR_CS02", "30.48.1.249"],
19
+ ["A_HBA02_WAN_AR01", "30.48.1.253"],
20
+ ["A_HBA02_WAN_AR02", "30.48.1.254"],
21
+ ["A_HBWHA_PUB_AS01", "30.48.14.21"],
22
+ ["A_HBWHA_PUB_AS02", "30.48.14.22"],
23
+ ["A_HBWHA_MAN_DR", "30.49.255.254"],
24
+ ["A_HBWHA_SVR_AS01", "30.48.255.250"],
25
+ ["A_HBWHA_SVR_AS02", "30.48.255.249"],
26
+ ["A_HBWHA_WBN_DR", "30.48.255.254"],
27
+ ["A_HBWHB_CAM_DS01", "30.48.254.254"],
28
+ ["A_HBWHB_CAM_DS02", "30.48.254.253"],
29
+ ["A_HBWHC_MAN_DR", "30.49.255.253"],
30
+ ["A_HBZ02_WAN_AR02", "30.48.1.251"],
31
+ ["A_HBWHC_WBN_DR", "30.48.255.253"],
32
+
33
+ # 2号网核心
34
+ ["B_HBWHA_COR_CS01", "21.160.127.1"],
35
+ ["B_HBWHA_COR_CS02", "21.160.127.2"],
36
+ ["B_HBA02_WAN_AR01", "22.160.120.253"],
37
+ ["B_HBA02_WAN_AR02", "22.160.120.254"],
38
+ ["B_HBWHA_WBN_DR", "21.160.127.195"],
39
+ ["B_HBWHA_MAN_DR01", "21.160.127.197"],
40
+ ["B_HBWHA_MAN_DR02", "21.160.127.198"],
41
+ ["B_HBWHA_CAM_DS01", "21.160.127.199"],
42
+ ["B_HBWHA_CAM_DS02", "21.160.127.200"],
43
+ ["B_HBWHA_SVR_DS01", "21.160.127.201"],
44
+ ["B_HBWHA_SVR_DS02", "21.160.127.202"],
45
+ ["B_HBWHA_ATM_DR01", "21.160.223.254"],
46
+ ["B_HBWHA_ATM_DR02", "21.160.223.253"],
47
+ ["B_HBWHC_WBN_DR", "21.160.128.195"],
48
+ ["B_HBWHB_CAM_DS01", "22.160.95.253"],
49
+ ["B_HBZ02_WAN_AR03", "22.160.120.251"],
50
+ ["B_HBWHB_CAM_DS02", "22.160.95.254"],
51
+ ]
52
+
53
+ def initialize
54
+ super({
55
+ :author => "Elin",
56
+ :description => "这个模块按照表格输出excel文件, 以WPS运行",
57
+ :file_suffix => "xls",
58
+ })
59
+ end
60
+
61
+ def generate
62
+ excel = WorkBook.new
63
+ #excel.show
64
+ excel.display_alerts = false
65
+ @worksheet = excel.add_worksheet("sheet")
66
+
67
+ # 设置整体列宽
68
+ @worksheet.width("a", 18)
69
+ @worksheet.width("b", 10)
70
+ @worksheet.width("c", 15)
71
+ @worksheet.width("d", 15)
72
+ @worksheet.width("e", 17)
73
+ @worksheet.width("f", 7)
74
+ @worksheet.width("g", 7)
75
+
76
+ # 设置整体行高
77
+ @worksheet.height(20)
78
+
79
+ # DevicePool.size.times do |t|
80
+ # device_name = DevicePool[t][0]
81
+ device_manager.devices.each_key do |device_name|
82
+ device_klass = device_manager[device_name]
83
+ device_info = {
84
+ :device_klass => device_klass,
85
+ :manager_ip => "", #DevicePool[t][1],
86
+ #:device_index => t
87
+ }
88
+ case device_klass
89
+ when Cisco, H3C, Maipu
90
+ generate_table(device_info)
91
+ else
92
+ print_error "未生成表格的设备: #{device_name}"
93
+ end
94
+ end
95
+
96
+ # 设置垂直分页符
97
+ @worksheet.pagebreak("H") if @worksheet.has_pagebreak?
98
+
99
+ # 恢复警告提示
100
+ excel.display_alerts = true
101
+
102
+ # 保存
103
+ begin
104
+ excel.save(output_file.to_s)
105
+ rescue Exception => e
106
+ puts e.message
107
+ ensure
108
+ excel.close
109
+ end
110
+
111
+ end
112
+
113
+ def generate_table(device_info)
114
+ generate_hander
115
+ generate_software(device_info)
116
+ generate_clock(device_info)
117
+ generate_inventory(device_info)
118
+ generate_line
119
+ generate_cpu_memory(device_info)
120
+ generate_environment(device_info)
121
+ generate_interface(device_info)
122
+ pagebreak
123
+ end
124
+
125
+ def generate_hander
126
+ @worksheet.add_row do |row|
127
+ row.merge("a", "g")
128
+ row.height = 30
129
+ row << TitleBanner
130
+ row.style("a", "TitleStyle")
131
+ end
132
+ @worksheet.add_row do |row|
133
+ row.merge("b", "g")
134
+ row << ["巡检命令", "1.基本信息"]
135
+ row.style("a", "BoldStyle")
136
+ row.style("b", "BoldStyle")
137
+ end
138
+ end
139
+
140
+ def generate_software(device_info)
141
+ device_klass = device_info[:device_klass]
142
+ cmd = CmdSwitch.version(device_klass)
143
+ @worksheet.add_row do |row|
144
+ row.merge("c", "d")
145
+ row.merge("f", "g")
146
+ row << [
147
+ cmd,
148
+ "设备名称", device_klass.device_name,
149
+ "设备型号", device_klass.device_info[:device_model]
150
+ ]
151
+ row.style("a", "BoldStyle")
152
+ end
153
+ @begin_row = @worksheet.current_row_id
154
+ if !device_info[:manager_ip].empty?
155
+ manager = device_info[:manager_ip]
156
+ else
157
+ manager = device_klass.get_manager_ip
158
+ end
159
+ @worksheet.add_row do |row|
160
+ row.merge("c", "d")
161
+ row.merge("f", "g")
162
+ row.height = 24
163
+ row << [
164
+ cmd,
165
+ #"管理IP", device_info[:manager_ip],
166
+ "管理IP", manager,
167
+ "IOS版本", device_klass.ios_version
168
+ ]
169
+ row.wraptext("f")
170
+ end
171
+ @worksheet.add_row do |row|
172
+ row.merge("c", "g")
173
+ row << [
174
+ cmd,
175
+ "IOS特性集", device_klass.soft_image
176
+ ]
177
+ end
178
+ @worksheet.add_row do |row|
179
+ row.merge("c", "g")
180
+ row << [
181
+ cmd,
182
+ "运行时间", device_klass.uptime
183
+ ]
184
+ end
185
+ @end_row = @worksheet.current_row_id
186
+ @worksheet.merge("a#{@begin_row}", "a#{@end_row}")
187
+ end
188
+
189
+ def generate_clock(device_info)
190
+ device_klass = device_info[:device_klass]
191
+ cmd = case device_klass
192
+ when Cisco, Maipu
193
+ "show clock"
194
+ when H3C
195
+ "display clock"
196
+ end
197
+ @worksheet.add_row do |row|
198
+ row.merge("c", "g")
199
+ tmp = device_klass.clock
200
+ time = Aio::Base::Toolkit::Date.time_to_s(tmp)
201
+ time.insert(0, "`") if time.size > 5
202
+ row << [
203
+ cmd,
204
+ "巡检时间", time
205
+ ]
206
+ row.style("a", "BoldStyle")
207
+ end
208
+ end
209
+
210
+ def generate_inventory(device_info)
211
+ device_klass = device_info[:device_klass]
212
+ cmd = CmdSwitch.inventory(device_klass)
213
+
214
+ @worksheet.add_row do |row|
215
+ row.merge("b", "c")
216
+ row.merge("f", "g")
217
+ row << [
218
+ cmd,
219
+ "硬件信息", "接口卡型号", "序列号", "备注"
220
+ ]
221
+ row.style("a", "BoldStyle")
222
+ row.wraptext("a")
223
+ end
224
+ @begin_row = @worksheet.current_row_id
225
+
226
+ # 循环添加inventory条目
227
+ inv = device_klass.inventory
228
+ inv.each do |info|
229
+ @worksheet.add_row do |row|
230
+ row.merge("b", "c")
231
+ row.merge("f", "g")
232
+ row << [
233
+ cmd,
234
+ info[:name], info[:pid], info[:sn], ""
235
+ ]
236
+ row.wraptext("b")
237
+ row.wraptext("e")
238
+ end
239
+ end
240
+
241
+ # 当不足10条的时候,填充空白条目至10条
242
+ if inv.size < 10
243
+ (10 - inv.size).times do |t|
244
+ @worksheet.add_row do |row|
245
+ row.merge("b", "c")
246
+ row.merge("f", "g")
247
+ row << [
248
+ cmd,
249
+ "", "", "", ""
250
+ ]
251
+ end
252
+ end
253
+ end
254
+ @end_row = @worksheet.current_row_id
255
+ @worksheet.merge("a#{@begin_row}", "a#{@end_row}")
256
+ end
257
+
258
+ def generate_line
259
+ @worksheet.add_row do |row|
260
+ row.merge("b", "g")
261
+ row << [
262
+ "", "2.运行状态巡检信息采集"
263
+ ]
264
+ row.style("b", "BoldStyle")
265
+ end
266
+ @worksheet.add_row do |row|
267
+ row.merge("d", "e")
268
+ row.merge("f", "g")
269
+ row << [
270
+ "", "项目", "内容", "结果", "备注"
271
+ ]
272
+ row.style("b", "BoldStyle")
273
+ row.style("c", "BoldStyle")
274
+ row.style("d", "BoldStyle")
275
+ row.style("f", "BoldStyle")
276
+ end
277
+ end
278
+
279
+ def generate_cpu_memory(device_info)
280
+ device_klass = device_info[:device_klass]
281
+ cmd_cpu = CmdSwitch.cpu(device_klass)
282
+ cmd_mem = CmdSwitch.memory(device_klass)
283
+
284
+ @worksheet.add_row do |row|
285
+ row.merge("d", "e")
286
+ row.merge("f", "g")
287
+ row << [
288
+ cmd_cpu, "路由状态",
289
+ "cpu 利用率(%)", device_klass.cpu_percent,
290
+ ""
291
+ ]
292
+ row.style("a", "BoldStyle")
293
+ end
294
+ @begin_row = @worksheet.current_row_id
295
+
296
+ @worksheet.add_row do |row|
297
+ row.merge("d", "e")
298
+ row.merge("f", "g")
299
+ row << [
300
+ cmd_mem, "路由状态",
301
+ "memory 利用率(%)", device_klass.memory_percent,
302
+ ""
303
+ ]
304
+ row.style("a", "BoldStyle")
305
+ end
306
+ end
307
+
308
+ def generate_environment(device_info)
309
+ device_klass = device_info[:device_klass]
310
+ cmd = case device_klass
311
+ when Cisco
312
+ ["show environment"] * 3
313
+ when H3C
314
+ [nil, "display power", "display fan"]
315
+ when Maipu
316
+ ["show environment", "show system power",
317
+ "show system fan" ]
318
+ else
319
+ ["show environment"] * 3
320
+ end
321
+
322
+ unless cmd[0].nil?
323
+ @worksheet.add_row do |row|
324
+ tmp = alarm_text(device_klass.warning_env?)
325
+ row.merge("d", "e")
326
+ row.merge("f", "g")
327
+ row << [
328
+ cmd[0], "路由状态",
329
+ "温度", tmp,
330
+ ""
331
+ ]
332
+ row.style("a", "BoldStyle")
333
+ end
334
+ end
335
+ beg_row = @worksheet.current_row_id
336
+
337
+ @worksheet.add_row do |row|
338
+ tmp = alarm_text(device_klass.warning_env?)
339
+ row.merge("d", "e")
340
+ row.merge("f", "g")
341
+ row << [
342
+ cmd[1], "路由状态",
343
+ "电源", tmp,
344
+ ""
345
+ ]
346
+ row.style("a", "BoldStyle")
347
+ end
348
+ @worksheet.add_row do |row|
349
+ tmp = alarm_text(device_klass.warning_env?)
350
+ row.merge("d", "e")
351
+ row.merge("f", "g")
352
+ row << [
353
+ cmd[2], "路由状态",
354
+ "风扇", tmp,
355
+ ""
356
+ ]
357
+ row.style("a", "BoldStyle")
358
+ end
359
+ end_row = @worksheet.current_row_id
360
+
361
+ # 如果cmd都是一样的,那么就合并
362
+ if cmd[0] == cmd[1] and cmd[1] == cmd[2]
363
+ @worksheet.merge("a#{beg_row}", "a#{end_row}")
364
+ end
365
+ end
366
+
367
+ def generate_interface(device_info)
368
+ device_klass = device_info[:device_klass]
369
+ cmd = CmdSwitch.interface(device_klass)
370
+
371
+ @worksheet.add_row do |row|
372
+ tmp = alarm_text(device_klass.warning_env?)
373
+ row.merge("d", "e")
374
+ row.merge("f", "g")
375
+ row << [
376
+ cmd, "路由状态",
377
+ "接口状态", tmp,
378
+ ""
379
+ ]
380
+ row.style("a", "BoldStyle")
381
+ end
382
+ @end_row = @worksheet.current_row_id
383
+
384
+ @worksheet.merge("b#{@begin_row}", "b#{@end_row}")
385
+ end
386
+
387
+ def pagebreak
388
+ @worksheet.current_row.pagebreak
389
+ end
390
+
391
+ def alarm_text(bool)
392
+ if bool == true
393
+ return "正常 □ 异常 ■"
394
+ else
395
+ return "正常 ■ 异常 □"
396
+ end
397
+ end
398
+
399
+ end
400
+