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