class Aio::Module::InputStyle::XinhuaNat

Constants

Xinhua_Routing

Public Class Methods

new() click to toggle source
Calls superclass method Aio::Module::InputStyle::new
# File lib/modules/input/style/xinhua_nat.rb, line 10
def initialize
        super({
                :author                              => "Elin",
                :description => "这个模块专门针对中行网络标准化管理NAT软件",
                :platform                    => "ausware",
                :file_suffix => Regexp.new('\.diag$'),
                :pass_file           => [
                                                Regexp.new('RoutingTable.*'),
                                                Regexp.new('路由状态'),
                                        ]
        })
end

Public Instance Methods

parse() { |device_name, cmd, cont, manager_ip| ... } click to toggle source
# File lib/modules/input/style/xinhua_nat.rb, line 23
def parse
        # dir 为 Pathname 类
        dir = self.input_file
        
        # 分析第一层: 文件夹名称包含设备名称+管理IP
        ::Dir.foreach(dir) do |device_layer|
                if device_layer.downcase == "." or device_layer.downcase == ".."
                        next
                end

                tmp = []
                device_layer.reverse.split('_', 2).each do |res|
                        tmp << res.reverse
                end

                manager_ip  = tmp[0]
                device_name = tmp[1]


                # 分析第二层:文件后缀为.diag,此外还有个HSRP文件夹,但是可有一次搞定
                Find.find(File.join(dir, device_layer)) do |context_layer|

                        # 如果文件后缀名不是.diag则跳过
                        if ! self.file_suffix?(context_layer)
                                next
                        end

                        # 检查是否是需要略过的文件
                        if self.pass_file?(context_layer)
                                next
                        end

                        fo = File.open(context_layer, "r+", :encoding => "utf-8")
                        context = fo.each_line.to_a

                        # 分割输出,在路由状态中会有这种情况
                        split(context, Xinhua_Routing).each do |cont|
                                cmd = cont.shift.strip
                                yield device_name, cmd, cont, manager_ip
                        end
                end
        end
end
split(array, pattern) click to toggle source
# File lib/modules/input/style/xinhua_nat.rb, line 67
def split(array, pattern)
        Aio::Base::Toolkit::Array.split(array, pattern)
end