Class: Aio::Ui::Console

Inherits:
Object
  • Object
show all
Includes:
Verbose
Defined in:
lib/aio/ui.rb

Constant Summary collapse

DefaultCompare =
"special/style/compare"
DefaultInputComapreXML =
"input/style/compare_xml"

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Verbose

#clear_line, #print_error, #print_good, #progress_bar

Constructor Details

#initialize(args) ⇒ Console

Returns a new instance of Console.



30
31
32
# File 'lib/aio/ui.rb', line 30

def initialize(args)
  self.banner = Banner.new.parse(args)
end

Instance Attribute Details

Aio::Ui::Banner



24
25
26
# File 'lib/aio/ui.rb', line 24

def banner
  @banner
end

#device_managerObject

Aio::DeviceManager



18
19
20
# File 'lib/aio/ui.rb', line 18

def device_manager
  @device_manager
end

#module_managerObject

Aio::ModuleManager



15
16
17
# File 'lib/aio/ui.rb', line 15

def module_manager
  @module_manager
end

#parserObject

Aio::Parse::Parser



21
22
23
# File 'lib/aio/ui.rb', line 21

def parser
  @parser
end

Instance Method Details

#proc_0Object

输出模块表



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/aio/ui.rb', line 44

def proc_0
  case banner.type
  when "cmd"
    mods = module_manager.get_modules_by_type("cmd")
    print ReadableText.dump_module_cmds(mods)
  when "input"
    mods = module_manager.get_modules_by_type("input")
    print ReadableText.dump_module_inputs(mods)
  when "output"
    mods = module_manager.get_modules_by_type("output")
    print ReadableText.dump_module_outputs(mods)
  else
    mods = module_manager.get_modules_by_type("cmd")
    print ReadableText.dump_module_cmds(mods)

    mods = module_manager.get_modules_by_type("input")
    print ReadableText.dump_module_inputs(mods)

    mods = module_manager.get_modules_by_type("output")
    print ReadableText.dump_module_outputs(mods)
  end
end

#proc_1Object

通过选择的输入输出模块进行操作



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/aio/ui.rb', line 68

def proc_1

  # 当完全没有指定input的时候,是可以跳过的
  if banner.has_input?
    input_klass = module_manager.get_module_klass_by_name(banner.input_style)
    input_klass.input_file = banner.input
    input_klass.ext_info = {:cmds_reg => device_manager.just_cmds_reg}

    parser.input_klass = input_klass
    parser.parse_by_module

    # 当有compare选项的时候,同时解析compare模块,并合并warning信息
    if banner.compare 
      print_good "正在加载比较模块"
      if banner.compare =~ /\.xml$/
        input_klass_compare = module_manager.get_module_klass_by_name(DefaultInputComapreXML)
      else
        print_error "请确认 -c 参数文件后缀"
        banner.banner
      end

      input_klass_compare.input_file = banner.compare
      compare_klass = module_manager.get_module_klass_by_name(DefaultCompare)

      print_good "比较模块加载成功"
      print_good "正在进行对比..."
      parser.input_klass = input_klass_compare
      parser.parse_by_compare(compare_klass)
      print_good "对比分析完成"

    end

    # Debug 处
    if Aio::Base::Debug.ui_enable? #or true
      puts "[Debug UI]"
      device_manager.devices.each_pair{|name, device_klass|
        pp name
        pp device_klass.cmds_useful["show version"]
        #pp device_klass.device_name
        #pp device_klass.cmds_useful
        #pp device_klass.warning_klass.warning_info
        puts
      }
      puts "[/Debug UI]"
    end

    device_manager.warning_summarize_tidy
  end	# 判断没有没 input 尾部

  # NOTE Debug 输出方法处
  #device_manager["PF_YYB_MP2900_1"].inventory

  print_good "正在加载输出模块 #{banner.output_style}"
  output_klass = module_manager.get_module_klass_by_name(banner.output_style)

  pn = Pathname.new(banner.output)
  dir, base = pn.split
  base = base.to_s
  unless base =~ /\./
    suffix = output_klass.file_suffix
    unless suffix == "" or /(?i)null/ =~ suffix
      base << "." + suffix
    end
  end

  print_good "正在输出文件 #{dir + base}"
  output_klass.device_manager = device_manager
  output_klass.module_manager = module_manager
  output_klass.output_file = banner.output
  output_klass.generate
  print_good "输出文件完成"
end

#processObject



34
35
36
37
38
39
40
41
# File 'lib/aio/ui.rb', line 34

def process
  case self.banner.mode
  when 0
    proc_0
  when 1
    proc_1
  end
end