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