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
Binary file
Binary file
Binary file
@@ -0,0 +1,85 @@
1
+ #coding=utf-8
2
+
3
+ module Aio::Ui
4
+
5
+ class Banner
6
+
7
+ attr_accessor :mode
8
+ attr_accessor :type
9
+ attr_accessor :input_style, :input
10
+ attr_accessor :ranking
11
+ attr_accessor :output_style, :output
12
+ attr_accessor :compare
13
+
14
+ def banner
15
+ res = %Q^
16
+ Usage: ./aio [option] <var>
17
+
18
+ Options:
19
+ -l, --list [type] 显示所有或者所选type类型的模块信息
20
+ -c, --compare <path1> 被比较的文件路径
21
+ -is, --input-style <mod> 输入的模块名称
22
+ -i, --input <path> 输入信息的绝对路径
23
+ -r, --ranking <level> 选择命令的级别
24
+ -os, --output-style <mod> 输出的模块名称
25
+ -o, --output <path> 输出信息的路径
26
+ -h, --help 帮助
27
+ ^
28
+ print res
29
+ exit 0
30
+ end
31
+
32
+ def initialize
33
+ @type = ""
34
+ end
35
+
36
+ def parse(args=[])
37
+ banner if args.empty?
38
+
39
+ while(!args.empty?) do
40
+ arg = args.shift
41
+ case arg
42
+ when "-l", "--list"
43
+ @type = args.shift unless args[0] =~ /-/
44
+ self.mode = 0
45
+ when "-is", "--inupt-style"
46
+ @input_style = check(args.shift)
47
+ self.mode = 1
48
+ when "-i", "--input"
49
+ @input = check(args.shift)
50
+ when "-r", "--ranking"
51
+ @ranking = check(args.shift)
52
+ when "-c", "--compare"
53
+ @compare = check(args.shift)
54
+ when "-os", "--output-style"
55
+ @output_style = check(args.shift)
56
+ self.mode = 1
57
+ when "-o", "--output"
58
+ @output = check(args.shift)
59
+ when "-h", "--help"
60
+ banner
61
+ end
62
+ end
63
+
64
+ self
65
+ end
66
+
67
+ # 检查参数是否合法
68
+ def check(opt)
69
+ opt = opt.to_s
70
+ if opt.empty? and opt =~ /-/
71
+ banner
72
+ end
73
+
74
+ return opt
75
+ end
76
+
77
+ # 判断是否有 input 信息
78
+ def has_input?
79
+ return false if @input_style.nil? and @input.nil?
80
+ return true
81
+ end
82
+
83
+ end
84
+ end
85
+
@@ -0,0 +1,75 @@
1
+ module Aio::Ui
2
+
3
+ class ReadableText
4
+
5
+ DefaultIndent = 2
6
+
7
+ class << self
8
+
9
+ def dump_module_cmds(mods, h=nil, indent=DefaultIndent)
10
+ col = ["cmd name", "ranking", "device", "description"]
11
+ table = Aio::Base::Toolkit::Table.new(
12
+ 'Header' => h ||= 'Aio CMD Modules',
13
+ 'Indent' => indent,
14
+ 'Columns' => col,
15
+ 'CellPad' => 2,
16
+ 'SortIndex' => 2)
17
+
18
+ # info => { :module_type,
19
+ # :module_layer_2
20
+ # :full_path
21
+ # :klass
22
+ mods.each_pair do |mod_name, info|
23
+ row = []
24
+ row << info[:klass].cmd_full
25
+ row << info[:klass].ranking.to_s
26
+ row << info[:module_layer_2]
27
+ row << info[:klass].description
28
+ table << row
29
+ end
30
+
31
+ table.to_s + "\n"
32
+ end
33
+
34
+ def dump_module_inputs(mods, h=nil, indent=DefaultIndent)
35
+ col = ["input style", "platform", "description"]
36
+ table = Aio::Base::Toolkit::Table.new(
37
+ 'Header' => h || "Aio Input Modules",
38
+ 'Indent' => indent,
39
+ 'Columns' => col,
40
+ 'CellPad' => 2)
41
+
42
+ mods.each_pair do |mod_name, info|
43
+ row = []
44
+ row << mod_name
45
+ row << info[:klass].platform
46
+ row << info[:klass].description
47
+ table << row
48
+ end
49
+
50
+ table.to_s + "\n"
51
+ end
52
+
53
+ def dump_module_outputs(mods, h=nil, indent=DefaultIndent)
54
+ col = ["output style", "suffix", "description"]
55
+ table = Aio::Base::Toolkit::Table.new(
56
+ 'Header' => h || "Aio Output Modules",
57
+ 'Indent' => indent,
58
+ 'Columns' => col,
59
+ 'CellPad' => 2)
60
+
61
+ mods.each_pair do |mod_name, info|
62
+ row = []
63
+ row << mod_name
64
+ row << info[:klass].file_suffix
65
+ row << info[:klass].description
66
+ table << row
67
+ end
68
+
69
+ table.to_s + "\n"
70
+ end
71
+
72
+
73
+ end # self
74
+ end
75
+ end
@@ -0,0 +1,29 @@
1
+ #
2
+ # 这个类主要是用来显示进度信息以及进度条
3
+ # 方便Debug 和确认进度
4
+ #
5
+ module Aio::Ui
6
+ module Verbose
7
+
8
+ def progress_bar(total, num, info)
9
+ percent = ((num.to_f / total.to_f) * 100).to_i
10
+ buf = "#" * (percent / 2)
11
+ #printf("#{' ' * 120}\r")
12
+ printf("[%-50s] [%d%%], [%s]\r", buf, percent, info)
13
+ end
14
+
15
+ def print_good(str)
16
+ puts "[+] " << str
17
+ end
18
+
19
+ def print_error(str)
20
+ puts "[-] " << str
21
+ end
22
+
23
+ def clear_line
24
+ printf("#{' ' * 100}\r")
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,9 @@
1
+ module Aio
2
+ module Ui
3
+
4
+ module Version
5
+ RunVersion = "1.0.0"
6
+ end
7
+ end
8
+ end
9
+
data/lib/aio/ui.rb ADDED
@@ -0,0 +1,138 @@
1
+ #coding=utf-8
2
+
3
+ module Aio::Ui
4
+ require "aio/ui/version"
5
+ require "aio/ui/banner"
6
+ require "aio/ui/readable_text"
7
+ require "aio/ui/verbose"
8
+
9
+ class Console
10
+
11
+ include Aio::Ui::Verbose
12
+
13
+ # Aio::ModuleManager
14
+ attr_accessor :module_manager
15
+
16
+ # Aio::DeviceManager
17
+ attr_accessor :device_manager
18
+
19
+ # Aio::Parse::Parser
20
+ attr_accessor :parser
21
+
22
+ # Aio::Ui::Banner
23
+ attr_accessor :banner
24
+
25
+ DefaultCompare = "special/style/compare"
26
+
27
+ DefaultInputComapreXML = "input/style/compare_xml"
28
+
29
+ def initialize(args)
30
+ self.banner = Banner.new.parse(args)
31
+ end
32
+
33
+ def process
34
+ case self.banner.mode
35
+ when 0
36
+ proc_0
37
+ when 1
38
+ proc_1
39
+ end
40
+ end
41
+
42
+ # 输出模块表
43
+ def proc_0
44
+ case banner.type
45
+ when "cmd"
46
+ mods = module_manager.get_modules_by_type("cmd")
47
+ print ReadableText.dump_module_cmds(mods)
48
+ when "input"
49
+ mods = module_manager.get_modules_by_type("input")
50
+ print ReadableText.dump_module_inputs(mods)
51
+ when "output"
52
+ mods = module_manager.get_modules_by_type("output")
53
+ print ReadableText.dump_module_outputs(mods)
54
+ else
55
+ mods = module_manager.get_modules_by_type("cmd")
56
+ print ReadableText.dump_module_cmds(mods)
57
+
58
+ mods = module_manager.get_modules_by_type("input")
59
+ print ReadableText.dump_module_inputs(mods)
60
+
61
+ mods = module_manager.get_modules_by_type("output")
62
+ print ReadableText.dump_module_outputs(mods)
63
+ end
64
+ end
65
+
66
+ # 通过选择的输入输出模块进行操作
67
+ def proc_1
68
+
69
+ # 当完全没有指定input的时候,是可以跳过的
70
+ if banner.has_input?
71
+ input_klass = module_manager.get_module_klass_by_name(banner.input_style)
72
+ input_klass.input_file = banner.input
73
+ input_klass.ext_info = {:cmds_reg => device_manager.just_cmds_reg}
74
+
75
+ parser.input_klass = input_klass
76
+ parser.parse_by_module
77
+
78
+ # 当有compare选项的时候,同时解析compare模块,并合并warning信息
79
+ if banner.compare
80
+ print_good "正在加载比较模块"
81
+ if banner.compare =~ /\.xml$/
82
+ input_klass_compare = module_manager.get_module_klass_by_name(DefaultInputComapreXML)
83
+ else
84
+ print_error "请确认 -c 参数文件后缀"
85
+ banner.banner
86
+ end
87
+
88
+ input_klass_compare.input_file = banner.compare
89
+ compare_klass = module_manager.get_module_klass_by_name(DefaultCompare)
90
+
91
+ print_good "比较模块加载成功"
92
+ print_good "正在进行对比..."
93
+ parser.input_klass = input_klass_compare
94
+ parser.parse_by_compare(compare_klass)
95
+ print_good "对比分析完成"
96
+
97
+ end
98
+
99
+ # Debug 处
100
+ if Aio::Base::Debug.ui_enable? #or true
101
+ puts "[Debug UI]"
102
+ device_manager.devices.each_pair{|name, device_klass|
103
+ pp name
104
+ pp device_klass.cmds_useful["show version"]
105
+ #pp device_klass.device_name
106
+ #pp device_klass.cmds_useful
107
+ #pp device_klass.warning_klass.warning_info
108
+ puts
109
+ }
110
+ puts "[/Debug UI]"
111
+ end
112
+
113
+ device_manager.warning_summarize_tidy
114
+ end # 判断没有没 input 尾部
115
+
116
+ print_good "正在加载输出模块 #{banner.output_style}"
117
+ output_klass = module_manager.get_module_klass_by_name(banner.output_style)
118
+
119
+ pn = Pathname.new(banner.output)
120
+ dir, base = pn.split
121
+ base = base.to_s
122
+ unless base =~ /\./
123
+ suffix = output_klass.file_suffix
124
+ unless suffix == "" or /(?i)null/ =~ suffix
125
+ base << "." + suffix
126
+ end
127
+ end
128
+
129
+ print_good "正在输出文件 #{dir + base}"
130
+ output_klass.device_manager = device_manager
131
+ output_klass.module_manager = module_manager
132
+ output_klass.output_file = banner.output
133
+ output_klass.generate
134
+ print_good "输出文件完成"
135
+ end
136
+
137
+ end
138
+ end
data/lib/aio.rb ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ cwd = File.expand_path(File.dirname(__FILE__))
4
+ #cwd_lib = File.join(cwd, "lib")
5
+ $: << cwd
6
+
7
+ BaseFile = cwd
8
+
9
+ # core
10
+ require File.join(cwd, "aio", "core.rb")
11
+
12
+ # config
13
+ require File.join(cwd, "../config.rb")
@@ -0,0 +1,32 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::Cisco::ShowClock < Aio::Module::Cmd::Cisco
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "show clock",
11
+ :cmd_short => "sh clo",
12
+ :author => "Elin",
13
+ :description => "This is Cisco Command# show clock",
14
+ :ranking => Ranking_1,
15
+ :platform => "all",
16
+ })
17
+ end
18
+
19
+ def parse
20
+ context = self.context.dup
21
+ clock = {}
22
+ useful[:clock] = clock
23
+ context.readline_match_block(/(?<time>.*)\.\d+ (?<zone>[^\s]+) (?<week>[^\s]+) (?<month>[^\s]+) (?<day>[^\s]+) (?<year>[^\s]+)/) do |block|
24
+ block.update(clock, :time)
25
+ block.update(clock, :zone)
26
+ block.update(clock, :week)
27
+ block.update(clock, :year)
28
+ block.update(clock, :month, Aio::Base::Toolkit::Date.month_to_i(block[:month]))
29
+ block.update(clock, :day)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ #coding=utf-8
2
+
3
+ class Aio::Module::Cmd::Cisco::ShowCPU < Aio::Module::Cmd::Cisco
4
+ include Aio::Module
5
+
6
+ def initialize
7
+ super({
8
+ :cmd_full => "show cpu",
9
+ :cmd_short => "sh cpu",
10
+ :author => "Elin",
11
+ :description => "This is Cisco ASA Command# show cpu",
12
+ :ranking => Ranking_1,
13
+ :platform => "asa",
14
+ :benchmark => {
15
+ :seconds_5 => ["<", 50],
16
+ :minute_1 => ["<", 50],
17
+ :minutes_5 => ["<", 50],
18
+ }
19
+ })
20
+ end
21
+
22
+ def parse
23
+ cont = self.context.dup
24
+ cpu = {}
25
+ useful[:cpu] = cpu
26
+ cont.readline_match_block(/1 minute: (?<minute_1>\d+)%; 5 minutes: (?<minutes_5>\d+)%/) do |block|
27
+ block.warning_serious(cpu, :minute_1, self)
28
+ block.warning_serious(cpu, :minutes_5, self)
29
+ end
30
+ end
31
+ end
32
+
@@ -0,0 +1,71 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::Cisco::ShowEnv < Aio::Module::Cmd::Cisco
6
+ include Aio::Module
7
+
8
+ def initialize
9
+ super({
10
+ :cmd_full => "show environment",
11
+ :cmd_short => "sh env",
12
+ :author => "Elin",
13
+ :description => "This is Cisco Command# show environment",
14
+ :ranking => Ranking_1,
15
+ :platform => "all",
16
+ :benchmark => {
17
+ :power_status => ["==", "Normal"],
18
+ :fan_status => ["==", "OK"],
19
+ :cpu_status => ["==", "Normal"],
20
+ }
21
+ })
22
+ end
23
+
24
+ def parse
25
+ cont = self.context.dup
26
+
27
+ # 是有版本区别的,要分开对待
28
+ case device_template
29
+ when Template_1, Template_2
30
+ parse_tmp_1(cont)
31
+ end
32
+ end
33
+
34
+ def parse_tmp_1(cont)
35
+ useful[:power] = {}
36
+ cont.readline_match_block(/SYSTEM POWER SUPPLY STATUS/)
37
+ cont.readline_match_block(/==========================/)
38
+ cont.readline_range_loop(/Internal Power/, reg_blank) do |cont_layer|
39
+ power = {}
40
+ cont_layer.readline_match_block(/Internal Power Supply (?<power_id>\d+) Type: (?<type>.*)/) do |block|
41
+ power_id = block[:power_id]
42
+ useful[:power]["slot_#{power_id}"] = power
43
+ block.update(power, :power_id)
44
+ block.update(power, :type)
45
+ end
46
+ cont_layer.readline_match_block(/Output Status: (?<power_status>.*)/) do |block|
47
+ block.warning_serious(power, :power_status, self)
48
+ end
49
+ end
50
+
51
+ useful[:fan] = {}
52
+ cont.readline_match_block(/SYSTEM FAN STATUS/)
53
+ cont.readline_match_block(/=================/)
54
+ cont.readline_match_block_loop(/Fan (?<fan_id>\d+) (?<fan_status>.*),/, reg_blank) do |block|
55
+ fan = {}
56
+ fan_id = block[:fan_id]
57
+ useful[:fan]["slot_#{fan_id}"] = fan
58
+ block.update(fan, :fan_id)
59
+ block.warning_serious(fan, :fan_status, self)
60
+ end
61
+
62
+ cont.readline_match_block(/SYSTEM TEMPERATURE STATUS/)
63
+ cont.readline_match_block(/=========================/)
64
+ cont.readline_match_block(/CPU temperature: (?<cpu_temperature>\d+) Celsius, (?<cpu_status>.*)/) do |block|
65
+ useful[:temperature] = {}
66
+ block.update(useful[:temperature], :cpu_temperature)
67
+ block.warning_serious(useful[:temperature], :cpu_status, self)
68
+ end
69
+
70
+ end
71
+ end
@@ -0,0 +1,39 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::Cisco::ShowFailover < Aio::Module::Cmd::Cisco
6
+
7
+ include Aio::Module
8
+
9
+ def initialize
10
+ super({
11
+ :cmd_full => "show failover",
12
+ :cmd_short => "sh fail",
13
+ :author => "Elin",
14
+ :description => "This is Cisco ASA Command# show failover",
15
+ :ranking => Ranking_1,
16
+ :platform => FW,
17
+ })
18
+ end
19
+
20
+ def parse
21
+ context = self.context.dup
22
+ failover = {}
23
+ useful[:failover] = failover
24
+ context.readline_match_block(/Failover (?<status>.*)/) do |block|
25
+ block.update(failover, :status)
26
+ end
27
+
28
+ if failover[:status] =~ /On/
29
+ context.readline_match_block(/Failover unit (?<standby>.*)/) do |block|
30
+ block.update(failover, :standby)
31
+ end
32
+ context.readline_match_block(/Failover LAN Interface: failover (?<interface>[^\s]+) \((?<interface_status>[^\)]+)\)/) do |block|
33
+ block.update(failover, :interface)
34
+ block.update(failover, :interface_status)
35
+ end
36
+ end
37
+ end
38
+ end
39
+
@@ -0,0 +1,24 @@
1
+ #coding=utf-8
2
+
3
+ require "aio/core"
4
+
5
+ class Aio::Module::Cmd::Cisco::ShowInterfaceIpBrief < Aio::Module::Cmd::Cisco
6
+ include Aio::Module
7
+ include Aio::Ui::Verbose
8
+
9
+ def initialize
10
+ super({
11
+ :cmd_full => "show interface ip brief",
12
+ :cmd_short => "sh int ip b",
13
+ :author => "Elin",
14
+ :description => "This is Cisco ASA Command# show interface ip brief",
15
+ :ranking => Ranking_1,
16
+ :platform => FW,
17
+ })
18
+ end
19
+
20
+ def parse
21
+ call_cmd(Aio::Module::Cmd::Cisco::ShowIpInterfaceBrief)
22
+ end
23
+ end
24
+