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