aio_elin 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +675 -0
- data/README.md +9 -0
- data/config.rb +39 -0
- data/lib/aio/base/debug.rb +30 -0
- data/lib/aio/base/toolkit/array.rb +24 -0
- data/lib/aio/base/toolkit/date.rb +46 -0
- data/lib/aio/base/toolkit/deep_clone.rb +10 -0
- data/lib/aio/base/toolkit/diff.rb +104 -0
- data/lib/aio/base/toolkit/excel_office.rb +421 -0
- data/lib/aio/base/toolkit/excel_wps.rb +437 -0
- data/lib/aio/base/toolkit/excel_wps.rb.bak +299 -0
- data/lib/aio/base/toolkit/ipaddr.rb +28 -0
- data/lib/aio/base/toolkit/os.rb +26 -0
- data/lib/aio/base/toolkit/regexp.rb +32 -0
- data/lib/aio/base/toolkit/string.rb +28 -0
- data/lib/aio/base/toolkit/table.rb +441 -0
- data/lib/aio/base/toolkit/test_diff.rb +9 -0
- data/lib/aio/base/toolkit/test_excel.rb +118 -0
- data/lib/aio/base/toolkit/test_word.rb +58 -0
- data/lib/aio/base/toolkit/word_wps.rb +492 -0
- data/lib/aio/base/toolkit.rb +18 -0
- data/lib/aio/base.rb +10 -0
- data/lib/aio/core/device/cisco.rb +13 -0
- data/lib/aio/core/device/cmd_switch.rb +113 -0
- data/lib/aio/core/device/h3c.rb +12 -0
- data/lib/aio/core/device/huawei.rb +10 -0
- data/lib/aio/core/device/juniper.rb +10 -0
- data/lib/aio/core/device/maipu.rb +11 -0
- data/lib/aio/core/device/methods.rb +233 -0
- data/lib/aio/core/device/methods.rb.bak +199 -0
- data/lib/aio/core/device/parent_device.rb +275 -0
- data/lib/aio/core/device.rb +15 -0
- data/lib/aio/core/device_manager.rb +207 -0
- data/lib/aio/core/module/cmd.rb +160 -0
- data/lib/aio/core/module/description.rb +67 -0
- data/lib/aio/core/module/input_style.rb +98 -0
- data/lib/aio/core/module/output_style.rb +80 -0
- data/lib/aio/core/module/platform.rb +30 -0
- data/lib/aio/core/module/ranking.rb +24 -0
- data/lib/aio/core/module/special_style.rb +30 -0
- data/lib/aio/core/module/template.rb +13 -0
- data/lib/aio/core/module.rb +15 -0
- data/lib/aio/core/module_loader.rb +161 -0
- data/lib/aio/core/module_loader.rb.bak +148 -0
- data/lib/aio/core/module_manager.rb +112 -0
- data/lib/aio/core/module_manager.rb.bak +78 -0
- data/lib/aio/core/parse/file.rb +19 -0
- data/lib/aio/core/parse/parser.rb +91 -0
- data/lib/aio/core/parse/parser_machine/bak/has_cmd_state.rb +14 -0
- data/lib/aio/core/parse/parser_machine/bak/has_context_state.rb +11 -0
- data/lib/aio/core/parse/parser_machine/bak/no_cmd_state.rb +11 -0
- data/lib/aio/core/parse/parser_machine/bak/no_context_state.rb +11 -0
- data/lib/aio/core/parse/parser_machine/full_state.rb +12 -0
- data/lib/aio/core/parse/parser_machine/has_device_state.rb +44 -0
- data/lib/aio/core/parse/parser_machine/no_device_state.rb +12 -0
- data/lib/aio/core/parse/parser_machine/parent_state.rb +26 -0
- data/lib/aio/core/parse/parser_machine.rb +47 -0
- data/lib/aio/core/parse.rb +6 -0
- data/lib/aio/core/text/context.rb +211 -0
- data/lib/aio/core/text/line_string.rb +74 -0
- data/lib/aio/core/text/warning.rb +179 -0
- data/lib/aio/core/text.rb +7 -0
- data/lib/aio/core/warning/description.rb +47 -0
- data/lib/aio/core/warning/warning_summarize.rb +232 -0
- data/lib/aio/core/warning.rb +6 -0
- data/lib/aio/core.rb +32 -0
- data/lib/aio/license.rb +687 -0
- data/lib/aio/resource/cover_picture.png +0 -0
- data/lib/aio/resource/line.png +0 -0
- data/lib/aio/resource/logo.png +0 -0
- data/lib/aio/ui/banner.rb +85 -0
- data/lib/aio/ui/readable_text.rb +75 -0
- data/lib/aio/ui/verbose.rb +29 -0
- data/lib/aio/ui/version.rb +9 -0
- data/lib/aio/ui.rb +138 -0
- data/lib/aio.rb +13 -0
- data/lib/modules/cmd/cisco/show_clock.rb +32 -0
- data/lib/modules/cmd/cisco/show_cpu.rb +32 -0
- data/lib/modules/cmd/cisco/show_env.rb +71 -0
- data/lib/modules/cmd/cisco/show_failover.rb +39 -0
- data/lib/modules/cmd/cisco/show_interface_ip_brief.rb +24 -0
- data/lib/modules/cmd/cisco/show_interfaces.rb +177 -0
- data/lib/modules/cmd/cisco/show_inv.rb +43 -0
- data/lib/modules/cmd/cisco/show_ip_interface_brief.rb +42 -0
- data/lib/modules/cmd/cisco/show_ip_ospf_nei.rb +38 -0
- data/lib/modules/cmd/cisco/show_ip_route_summary.rb +81 -0
- data/lib/modules/cmd/cisco/show_memory.rb +27 -0
- data/lib/modules/cmd/cisco/show_process_cpu.rb +35 -0
- data/lib/modules/cmd/cisco/show_process_memory.rb +63 -0
- data/lib/modules/cmd/cisco/show_version.rb +97 -0
- data/lib/modules/cmd/h3c/display_clock.rb +32 -0
- data/lib/modules/cmd/h3c/display_cpu.rb +51 -0
- data/lib/modules/cmd/h3c/display_device_manuinfo.rb +45 -0
- data/lib/modules/cmd/h3c/display_fan.rb +91 -0
- data/lib/modules/cmd/h3c/display_interface.rb +203 -0
- data/lib/modules/cmd/h3c/display_ip_interface_brief.rb +34 -0
- data/lib/modules/cmd/h3c/display_ip_routing.rb +68 -0
- data/lib/modules/cmd/h3c/display_ip_routing_stat.rb +90 -0
- data/lib/modules/cmd/h3c/display_memory.rb +35 -0
- data/lib/modules/cmd/h3c/display_ospf_peer.rb +38 -0
- data/lib/modules/cmd/h3c/display_power.rb +90 -0
- data/lib/modules/cmd/h3c/display_version.rb +54 -0
- data/lib/modules/cmd/h3c/display_vrrp_verbose.rb +86 -0
- data/lib/modules/cmd/maipu/show_env.rb +34 -0
- data/lib/modules/cmd/maipu/show_ip_route.rb +74 -0
- data/lib/modules/cmd/maipu/show_ip_route_statistic.rb +36 -0
- data/lib/modules/cmd/maipu/show_memory.rb +31 -0
- data/lib/modules/cmd/maipu/show_system_fan.rb +66 -0
- data/lib/modules/cmd/maipu/show_system_power.rb +66 -0
- data/lib/modules/cmd/maipu/show_version.rb +50 -0
- data/lib/modules/description/style/crc.rb +22 -0
- data/lib/modules/description/style/input_errors.rb +22 -0
- data/lib/modules/description/style/overrun.rb +22 -0
- data/lib/modules/description/style/proc_ratio.rb +22 -0
- data/lib/modules/description/style/protocol.rb +22 -0
- data/lib/modules/description/style/register.rb +22 -0
- data/lib/modules/description/style/runts.rb +22 -0
- data/lib/modules/description/style/template.rb +22 -0
- data/lib/modules/description/style/total_output_drops.rb +22 -0
- data/lib/modules/input/style/compare_xml.rb +89 -0
- data/lib/modules/input/style/console.rb +222 -0
- data/lib/modules/input/style/console.rb.bak +114 -0
- data/lib/modules/input/style/xinhua_nat.rb +70 -0
- data/lib/modules/output/style/boc_day.rb +223 -0
- data/lib/modules/output/style/cmds.rb +77 -0
- data/lib/modules/output/style/compare_json.rb +26 -0
- data/lib/modules/output/style/compare_report.rb +31 -0
- data/lib/modules/output/style/compare_xml.rb +86 -0
- data/lib/modules/output/style/excel_table_office.rb +407 -0
- data/lib/modules/output/style/excel_table_wps.rb +400 -0
- data/lib/modules/output/style/summary_report.rb +563 -0
- data/lib/modules/special/style/compare.rb +110 -0
- metadata +176 -0
@@ -0,0 +1,223 @@
|
|
1
|
+
#coding=utf-8
|
2
|
+
|
3
|
+
require "aio/core"
|
4
|
+
|
5
|
+
class Aio::Module::OutputStyle::BocDay < Aio::Module::OutputStyle
|
6
|
+
include Aio::Ui::Verbose
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
super({
|
10
|
+
:author => "Elin",
|
11
|
+
:description => "这个模块是中行每天日常早间巡检输出表格",
|
12
|
+
:file_suffix => "txt",
|
13
|
+
})
|
14
|
+
end
|
15
|
+
|
16
|
+
def generate
|
17
|
+
file = File.new(output_file, "w+")
|
18
|
+
$stdout = file
|
19
|
+
|
20
|
+
|
21
|
+
tables = {}
|
22
|
+
init(tables, "1#网省行地市骨干及地市下联")
|
23
|
+
tables["1#网省行地市骨干及地市下联"][:row] = [
|
24
|
+
["地市联通7606", "A_HBWHC_WBN_DR"],
|
25
|
+
["地市电信7606", "A_HBWHA_WBN_DR"],
|
26
|
+
["地市电信H3C 8808", "A_HBWHA_MAN_DR"],
|
27
|
+
]
|
28
|
+
|
29
|
+
init(tables, "2#网省行地市骨干及地市下联")
|
30
|
+
tables["2#网省行地市骨干及地市下联"][:row] = [
|
31
|
+
["地市联通7606", "B_HBWHC_WBN_DR"],
|
32
|
+
["地市电信7606", "B_HBWHA_WBN_DR"],
|
33
|
+
["地市电信H3C 8808", "B_HBWHA_MAN_DR"],
|
34
|
+
]
|
35
|
+
|
36
|
+
init(tables, "1#省行核心设备")
|
37
|
+
tables["1#省行核心设备"][:row] = [
|
38
|
+
["核心-1", "A_HBWHA_COR_CS01"],
|
39
|
+
["核心-2", "A_HBWHA_COR_CS02"],
|
40
|
+
["楼层汇聚-1", "A_HBWHB_CAM_DS01"],
|
41
|
+
["楼层汇聚-2", "A_HBWHB_CAM_DS02"],
|
42
|
+
]
|
43
|
+
|
44
|
+
init(tables, "2#省行核心设备")
|
45
|
+
tables["2#省行核心设备"][:row] = [
|
46
|
+
["澳门路4507R-1", "B_HBWHA_CAM_DS01"],
|
47
|
+
["澳门路4507R-2", "B_HBWHA_CAM_DS02"],
|
48
|
+
["6506-1", "B_HBWHA_COR_CS01"],
|
49
|
+
["6506-2", "B_HBWHA_COR_CS02"],
|
50
|
+
["同城7206-联通", "B_HBWHC_WBN_DR"],
|
51
|
+
["同城7206-电信", "B_HBWHA_WBN_DR"],
|
52
|
+
]
|
53
|
+
|
54
|
+
init(tables, "2#广电4507")
|
55
|
+
tables["2#广电4507"][:row] = [
|
56
|
+
["广电4507-1", "B_HBWHB_CAM_DS01"],
|
57
|
+
["广电4507-2", "B_HBWHB_CAM_DS02"],
|
58
|
+
]
|
59
|
+
|
60
|
+
init(tables, "1#网地市上联路由器")
|
61
|
+
tables["1#网地市上联路由器"][:row] = [
|
62
|
+
["鄂州1", "A_HBEZA_WBN_AR01"],
|
63
|
+
["鄂州2", "A_HBEZA_WBN_AR02"],
|
64
|
+
["恩施1", "A_HBESA_WBN_AR01"],
|
65
|
+
["恩施2", "A_HBESA_WBN_AR02"],
|
66
|
+
["黄冈1", "A_HBHGA_WBN_AR01"],
|
67
|
+
["黄冈2", "A_HBHGA_WBN_AR02"],
|
68
|
+
["黄石1", "A_HBHSA_WBN_AR01"],
|
69
|
+
["黄石2", "A_HBHSA_WBN_AR02"],
|
70
|
+
["荆门1", "A_HBJMA_WBN_AR01"],
|
71
|
+
["荆门2", "A_HBJMA_WBN_AR02"],
|
72
|
+
["荆州1", "A_HBJZA_WBN_AR01"],
|
73
|
+
["荆州2", "A_HBJZA_WBN_AR02"],
|
74
|
+
["潜江1", "A_HBQJA_WBN_AR01"],
|
75
|
+
["潜江2", "A_HBQJA_WBN_AR02"],
|
76
|
+
["三峡1", "A_HBSXA_WBN_AR01"],
|
77
|
+
["三峡2", "A_HBSXA_WBN_AR02"],
|
78
|
+
["十堰1", "A_HBSYA_WBN_AR01"],
|
79
|
+
["十堰2", "A_HBSYA_WBN_AR02"],
|
80
|
+
["随州1", "A_HBSZA_WBN_AR01"],
|
81
|
+
["随州2", "A_HBSZA_WBN_AR02"],
|
82
|
+
["天门1", "A_HBTMA_WBN_AR01"],
|
83
|
+
["天门2", "A_HBTMA_WBN_AR02"],
|
84
|
+
["仙桃1", "A_HBXTA_WBN_AR01"],
|
85
|
+
["仙桃2", "A_HBXTA_WBN_AR02"],
|
86
|
+
["咸宁1", "A_HBXNA_WBN_AR01"],
|
87
|
+
["咸宁2", "A_HBXNA_WBN_AR02"],
|
88
|
+
["襄樊1", "A_HBXFA_WBN_AR01"],
|
89
|
+
["襄樊2", "A_HBXFA_WBN_AR02"],
|
90
|
+
["孝感1", "A_HBXGA_WBN_AR01"],
|
91
|
+
["孝感2", "A_HBXGA_WBN_AR02"],
|
92
|
+
]
|
93
|
+
|
94
|
+
init(tables, "2#网地市上联路由器")
|
95
|
+
tables["2#网地市上联路由器"][:row] = [
|
96
|
+
["鄂州1", "B_HBEZA_WBN_AR01"],
|
97
|
+
["鄂州2", "B_HBEZA_WBN_AR02"],
|
98
|
+
["恩施1", "B_HBESA_WBN_AR01"],
|
99
|
+
["恩施2", "B_HBESA_WBN_AR02"],
|
100
|
+
["黄冈1", "B_HBHGA_WBN_AR01"],
|
101
|
+
["黄冈2", "B_HBHGA_WBN_AR02"],
|
102
|
+
["黄石1", "B_HBHSA_WBN_AR01"],
|
103
|
+
["黄石2", "B_HBHSA_WBN_AR02"],
|
104
|
+
["荆门1", "B_HBJMA_WBN_AR01"],
|
105
|
+
["荆门2", "B_HBJMA_WBN_AR02"],
|
106
|
+
["荆州1", "B_HBJZA_WBN_AR01"],
|
107
|
+
["荆州2", "B_HBJZA_WBN_AR02"],
|
108
|
+
["潜江1", "B_HBQJA_WBN_AR01"],
|
109
|
+
["潜江2", "B_HBQJA_WBN_AR02"],
|
110
|
+
["三峡1", "B_HBSXA_WBN_AR01"],
|
111
|
+
["三峡2", "B_HBSXA_WBN_AR02"],
|
112
|
+
["十堰1", "B_HBSYA_WBN_AR01"],
|
113
|
+
["十堰2", "B_HBSYA_WBN_AR02"],
|
114
|
+
["随州1", "B_HBSZA_WBN_AR01"],
|
115
|
+
["随州2", "B_HBSZA_WBN_AR02"],
|
116
|
+
["天门1", "B_HBTMA_WBN_AR01"],
|
117
|
+
["天门2", "B_HBTMA_WBN_AR02"],
|
118
|
+
["仙桃1", "B_HBXTA_WBN_AR01"],
|
119
|
+
["仙桃2", "B_HBXTA_WBN_AR02"],
|
120
|
+
["咸宁1", "B_HBXNA_WBN_AR01"],
|
121
|
+
["咸宁2", "B_HBXNA_WBN_AR02"],
|
122
|
+
["襄樊1", "B_HBXFA_WBN_AR01"],
|
123
|
+
["襄樊2", "B_HBXFA_WBN_AR02"],
|
124
|
+
["孝感1", "B_HBXGA_WBN_AR01"],
|
125
|
+
["孝感2", "B_HBXGA_WBN_AR02"],
|
126
|
+
]
|
127
|
+
|
128
|
+
tidy_tables(tables)
|
129
|
+
|
130
|
+
res = %Q^
|
131
|
+
|
132
|
+
#{tables["1#网省行地市骨干及地市下联"][:klass].to_s}
|
133
|
+
|
134
|
+
#{tables["2#网省行地市骨干及地市下联"][:klass].to_s}
|
135
|
+
|
136
|
+
#{tables["1#省行核心设备"][:klass].to_s}
|
137
|
+
|
138
|
+
#{tables["2#省行核心设备"][:klass].to_s}
|
139
|
+
|
140
|
+
#{tables["2#广电4507"][:klass].to_s}
|
141
|
+
|
142
|
+
#{tables["1#网地市上联路由器"][:klass].to_s}
|
143
|
+
|
144
|
+
#{tables["2#网地市上联路由器"][:klass].to_s}
|
145
|
+
|
146
|
+
^
|
147
|
+
file.write(res)
|
148
|
+
$stdout = STDOUT
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
def tidy_tables(tables)
|
153
|
+
tables.each_pair do |desc, info|
|
154
|
+
klass = info[:klass]
|
155
|
+
info[:row].each do |row|
|
156
|
+
device_name = row[1]
|
157
|
+
|
158
|
+
# 当没有这个设备的时候,还是正常输出
|
159
|
+
if device_manager[device_name].nil?
|
160
|
+
row << ""
|
161
|
+
row << ""
|
162
|
+
row << ""
|
163
|
+
next
|
164
|
+
end
|
165
|
+
|
166
|
+
output_warning(device_name)
|
167
|
+
|
168
|
+
type = device_manager[device_name].device_info[:device_model]
|
169
|
+
cpu = device_manager[device_name].cpu_percent + "%"
|
170
|
+
mem = device_manager[device_name].memory_percent + "%"
|
171
|
+
|
172
|
+
row << (type.nil? ? "" : type)
|
173
|
+
row << (cpu.nil? ? "" : cpu)
|
174
|
+
row << (mem.nil? ? "" : mem)
|
175
|
+
|
176
|
+
klass << row
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
# 初始化tables
|
182
|
+
def init(tables, name)
|
183
|
+
tables[name] = {}
|
184
|
+
tables[name][:row] = []
|
185
|
+
tables[name][:klass] = table_main(name)
|
186
|
+
end
|
187
|
+
|
188
|
+
def table_main(header = "")
|
189
|
+
col = ["设备用处", "设备名", "设备型号", "CPU(%)", "Memory(%)"]
|
190
|
+
table = Aio::Base::Toolkit::Table.new(
|
191
|
+
'Header' => header,
|
192
|
+
'HeaderIndent' => 2,
|
193
|
+
'Columns' => col,
|
194
|
+
#'CellPad' => 10,
|
195
|
+
'Indent' => 4)
|
196
|
+
end
|
197
|
+
|
198
|
+
def output_warning(device_name)
|
199
|
+
dn = device_manager[device_name]
|
200
|
+
|
201
|
+
if dn.has_warning?
|
202
|
+
print_error device_name
|
203
|
+
|
204
|
+
if dn.has_warning_serious?
|
205
|
+
print_error " 严重的警告信息"
|
206
|
+
dn.warning_info_serious.each_pair { |k, v| print_error " #{k} 出现的次数: #{v.size}" }
|
207
|
+
end
|
208
|
+
|
209
|
+
if dn.has_warning_ordinary?
|
210
|
+
print_error " 普通的警告信息"
|
211
|
+
dn.warning_info_ordinary.each_pair { |k, v| print_error " #{k} 出现的次数: #{v.size}" }
|
212
|
+
end
|
213
|
+
|
214
|
+
if dn.has_warning_compare?
|
215
|
+
print_error " 对比的警告信息"
|
216
|
+
dn.warning_info_compare.each_pair { |k, v| print_error " #{k} => "; pp v }
|
217
|
+
end
|
218
|
+
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
end
|
223
|
+
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#coding=utf-8
|
2
|
+
|
3
|
+
require "aio/core"
|
4
|
+
require "pathname"
|
5
|
+
|
6
|
+
class Aio::Module::OutputStyle::Cmds < Aio::Module::OutputStyle
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
super({
|
10
|
+
:author => "Elin",
|
11
|
+
:description => "这个模块将生成一个文件夹,其中每个文件为各种设备的巡检命令, 此模块不需要Input Module",
|
12
|
+
:file_suffix => "Null",
|
13
|
+
})
|
14
|
+
end
|
15
|
+
|
16
|
+
def generate
|
17
|
+
# 获得 cmds = {cmd_name => cmd_info}
|
18
|
+
cmds = module_manager.get_modules_by_type("cmd")
|
19
|
+
|
20
|
+
# 取得pf = {device => [cmd, ...]}
|
21
|
+
pf = {}
|
22
|
+
cmds.each_pair do |cmd, info|
|
23
|
+
device = info[:module_layer_2]
|
24
|
+
pf[device] = [] unless pf.has_key?(device)
|
25
|
+
pf[device] << info[:klass].cmd_full
|
26
|
+
end
|
27
|
+
|
28
|
+
# 各种设备的修改方法
|
29
|
+
terminal = {
|
30
|
+
"cisco" => ["ter leng 0", "ter leng 24"],
|
31
|
+
"h3c" => ["screen-length 0", "screen-length 24"],
|
32
|
+
"maipu" => ["more off", "more on"],
|
33
|
+
"juniper" => [" | no-more"],
|
34
|
+
}
|
35
|
+
|
36
|
+
text = {}
|
37
|
+
# 生成Terminal格式
|
38
|
+
pf.each_pair do |device, arr|
|
39
|
+
name = device + "_terminal"
|
40
|
+
text[name] = []
|
41
|
+
|
42
|
+
# 当是cisco, h3c, maipu 的时候使用一种方式
|
43
|
+
if device == "cisco" or device == "h3c" or device == "maipu"
|
44
|
+
text[name] << terminal[device][0]
|
45
|
+
arr.each do |cmd|
|
46
|
+
text[name] << cmd
|
47
|
+
end
|
48
|
+
text[name] << terminal[device][1]
|
49
|
+
|
50
|
+
# 当是 juniper 的时候使用cmd后面跟参数
|
51
|
+
elsif device == "juniper"
|
52
|
+
arr.each do |cmd|
|
53
|
+
text[name] << cmd + terminal[device][0]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# 最后将数组改为文本
|
58
|
+
text[name] = text[name].join("\r\n!\r\n")
|
59
|
+
end
|
60
|
+
|
61
|
+
# 生成空格的格式
|
62
|
+
pf.each_pair do |device, arr|
|
63
|
+
name = device + "_blank"
|
64
|
+
text[name] = arr.join("\r\n#{' '*10}\r\n!\r\n")
|
65
|
+
text[name] << "\r\n#{' '*10}\r\n!\r\n"
|
66
|
+
end
|
67
|
+
|
68
|
+
pn = Pathname.new(output_file)
|
69
|
+
Dir.mkdir(output_file) unless pn.directory?
|
70
|
+
|
71
|
+
text.each_pair do |name, text|
|
72
|
+
file = File.new(File.join(output_file, name), "w+")
|
73
|
+
file.write(text)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#coding=utf-8
|
2
|
+
|
3
|
+
require "aio/core"
|
4
|
+
require "json"
|
5
|
+
|
6
|
+
|
7
|
+
class Aio::Module::OutputStyle::CompareJson < Aio::Module::OutputStyle
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
super({
|
11
|
+
:author => "Elin",
|
12
|
+
:description => "这个模块输出为json文件,用于和基准值比较。",
|
13
|
+
:file_suffix => "js",
|
14
|
+
})
|
15
|
+
end
|
16
|
+
|
17
|
+
def generate
|
18
|
+
file = File.new(output_file, "w+")
|
19
|
+
device_hash = {}
|
20
|
+
each_devices_with_useful do |device_name, useful|
|
21
|
+
device_hash[device_name] = useful
|
22
|
+
end
|
23
|
+
#puts device_hash.to_json
|
24
|
+
file.puts device_hash.to_json
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#coding=utf-8
|
2
|
+
|
3
|
+
require "aio/core"
|
4
|
+
require "pp"
|
5
|
+
|
6
|
+
class Aio::Module::OutputStyle::CompareReport < Aio::Module::OutputStyle
|
7
|
+
|
8
|
+
include Aio::Ui::Verbose
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
super({
|
12
|
+
:author => "Elin",
|
13
|
+
:description => "这个模块用来输出比较信息报告",
|
14
|
+
:file_suffix => "txt",
|
15
|
+
})
|
16
|
+
end
|
17
|
+
|
18
|
+
def generate
|
19
|
+
file = File.new(output_file, "w+")
|
20
|
+
|
21
|
+
$stdout = file
|
22
|
+
device_manager.each_devices do |device_name, klass|
|
23
|
+
pp device_name
|
24
|
+
pp klass.warning_klass
|
25
|
+
puts
|
26
|
+
end
|
27
|
+
|
28
|
+
$stdout = STDOUT
|
29
|
+
end
|
30
|
+
|
31
|
+
end # class
|
@@ -0,0 +1,86 @@
|
|
1
|
+
#coding=utf-8
|
2
|
+
|
3
|
+
require "aio/core"
|
4
|
+
require "rexml/document"
|
5
|
+
|
6
|
+
=begin
|
7
|
+
<CompareModule description='这个模块输出为XML文件,用于和基准值比较' author='Elin'>
|
8
|
+
<device device_name='COS_1'>
|
9
|
+
<cpu cmd='display cpu-usage'>
|
10
|
+
<slot_id val='1'>
|
11
|
+
<seonds_5 val='9%'>
|
12
|
+
<minute_1 val='9%'>
|
13
|
+
<minutes_5 val='9%'>
|
14
|
+
</cpu>
|
15
|
+
...
|
16
|
+
</device>
|
17
|
+
...
|
18
|
+
</CompareModule>
|
19
|
+
=end
|
20
|
+
|
21
|
+
class Aio::Module::OutputStyle::CompareXML < Aio::Module::OutputStyle
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
super({
|
25
|
+
:author => "Elin",
|
26
|
+
:description => "这个模块输出为XML文件,用于和基准值比较。",
|
27
|
+
:file_suffix => "xml",
|
28
|
+
})
|
29
|
+
end
|
30
|
+
|
31
|
+
def generate
|
32
|
+
file = File.new(output_file, "w+")
|
33
|
+
doc = REXML::Document.new
|
34
|
+
root = doc.add_element("CompareModule",{
|
35
|
+
'description' => self.output_info[:description],
|
36
|
+
'author' => self.output_info[:author]}
|
37
|
+
)
|
38
|
+
# 第一层, device 节
|
39
|
+
each_devices_with_useful do |device_name, useful|
|
40
|
+
device_root = root.add_element('device', {'device_name' => device_name})
|
41
|
+
useful.each_pair do |cmd_name, info|
|
42
|
+
info.each_pair do |c, i|
|
43
|
+
cmd_root = device_root.add_element(c.to_s, {'cmd' => cmd_name})
|
44
|
+
if i.class == Hash
|
45
|
+
loop_element(device_root, cmd_root, i)
|
46
|
+
elsif i.kind_of? String
|
47
|
+
cmd_root.add_attribute('val', i)
|
48
|
+
else
|
49
|
+
# 这一段留作观察,很有可能没有作用
|
50
|
+
puts "output/style/compare_xml.rb# add_element"
|
51
|
+
cmd_root.add_element(c.to_s, {'val' => i.to_s})
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
#doc.write(STDOUT, 2); puts
|
57
|
+
doc.write(file, 2)
|
58
|
+
end
|
59
|
+
|
60
|
+
# 迭代方法
|
61
|
+
def loop_element(parent, son, info)
|
62
|
+
# 如果val为Hash,则继续循环
|
63
|
+
info.each_pair do |key, val|
|
64
|
+
if val.class == Hash
|
65
|
+
grandson = son.add_element(safe(key))
|
66
|
+
loop_element(son, grandson, val)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
info.each_pair do |key, val|
|
71
|
+
next if val.class == Hash
|
72
|
+
son.add_element(safe(key), {'val' => val.to_s})
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# 将可能的字符串问题转化为特殊安全字符,再在解析时恢复
|
77
|
+
# 恢复地方是 input/style/compare_xml# convert
|
78
|
+
# 1.接口中的 / 字符转化为两个下划线 __
|
79
|
+
# 2.路由表中以数字开头的在字符串前面加上 _i
|
80
|
+
def safe(key)
|
81
|
+
key = key.to_s
|
82
|
+
key.gsub!('/', '__') if /\//.match(key)
|
83
|
+
key.insert(0, "_i") if /^\d+/.match(key)
|
84
|
+
key
|
85
|
+
end
|
86
|
+
end
|