Class: Aio::Module::Cmd::H3C::DisplayInterface

Inherits:
Aio::Module::Cmd::H3C show all
Includes:
Aio::Module
Defined in:
lib/modules/cmd/h3c/display_interface.rb

Constant Summary collapse

Reg_Bridge_Aggregation =
/Bridge-Aggregation/
Reg_Ethernet =
/Ethernet/
Reg_Loopback =
/LoopBack/
Reg_Vlanif =
/Vlan/

Instance Attribute Summary

Attributes inherited from Aio::Module::Cmd

#cmd_info, #context, #device_info, #ext_info, #useful, #warning_klass

Instance Method Summary collapse

Methods inherited from Aio::Module::Cmd

#author, #benchmark, #clear_useful, #cmd_full, #cmd_short, #description, #division, #key_stand, #license, #platform, #ranking, #set_defaults, #type

Methods included from Ui::Verbose

#clear_line, #print_error, #print_good, #progress_bar

Constructor Details

#initializeDisplayInterface

Returns a new instance of DisplayInterface.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/modules/cmd/h3c/display_interface.rb', line 9

def initialize
  super({
    :cmd_full   => "display interface",
    :cmd_short  => "dis inter",
    :author     => "Elin",
    :description => "This is H3C Command# display interface",
    :ranking    => Ranking_1,
    :platform   => "switch",
    :benchmark  => {
      :duplex            => ["=~", /full/],
      :input_errors      => ["<", 10],
      :output_errors   => ["<", 10],
      :runts           => ["<", 10],
      :giants            => ["<", 10],
      :throttles       => ["<", 10],
      :crc               => ["<", 1000],
      :frame           => ["<", 10],
      :overruns          => ["<", 10],
      :aborts            => ["<", 10],
      :underruns       => ["<", 10],
      :deferred          => ["<", 10],
      :carrier         => ["<", 10],
      :input_drops     => ["<", 10],
      :output_drops      => ["<", 10],
      :collisions      => ["<", 10],
      :last_collisions   => ["<", 10],
      :lost_carrier    => ["<", 10],
    }
  })
end

Instance Method Details

#parseObject



45
46
47
48
49
50
51
52
53
# File 'lib/modules/cmd/h3c/display_interface.rb', line 45

def parse
  cont = self.context.dup
  useful[:interface] = {}
  loop do 
    cont.readline_range(/.*/, reg_blank) do |cont_layer|
      switch_iface(cont_layer)
    end 
  end 
end

#parse_bridge(context) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/modules/cmd/h3c/display_interface.rb', line 75

def parse_bridge(context)
  iface = {}
  iface_id = nil
  context.readline_match_block(/(?<iface_id>Bridge-Aggregation\d+) current state\s?:\s?(?<state>.*)/) do |block|
    iface_id = block[:iface_id]
    useful[:interface][iface_id] = iface
    block.update(iface, :iface_id)
    block.update(iface, :state)
  end
  context.readline_match_block(/IP Packet Frame Type: PKTFMT_ETHNT_2, Hardware Address: (?<mac>.*)/) do |block|
    block.update(iface, :mac)
  end
  context.readline_match_block(/Description: (?<description>.*)/) do |block|
    block.update(iface, :description)
  end
  context.readline_match_block(/(?<speed>.*) mode, (?<duplex>.*) mode/) do |block|
    block.update(iface, :speed)
    block.warning_serious(iface, :duplex, self) if iface[:state] =~ /UP/
  end
  context.readline_match_block(/Port link-type: (?<link_type>.*)/) do |block|
    block.update(iface, :link_type)
  end
  same_line_1(context, iface, iface_id) if iface[:state] =~ /UP/
end

#parse_eth(context) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/modules/cmd/h3c/display_interface.rb', line 100

def parse_eth(context)
  iface = {}
  iface_id = nil
  context.readline_match_block(/(?<iface_id>.*) current state\s?:\s?(?<state>.*)/) do |block|
    iface_id = block[:iface_id].strip
    useful[:interface][iface_id] = iface
    block.update(iface, :iface_id)
    block.update(iface, :state)
  end
  return if iface.nil?
  context.readline_match_block(/Hardware Address: (?<mac>.*)/) do |block|
    block.update(iface, :mac)
  end
  context.readline_match_block(/Description: (?<description>.*)/) do |block|
    block.update(iface, :description)
  end
  context.readline_match_block(/(?<speed>.*) mode, (?<duplex>.*) mode/) do |block|
    block.update(iface, :speed)
    block.warning_serious(iface, :duplex, self) if iface[:state] =~ /UP/
  end
  same_line_1(context, iface, iface_id) if iface[:state] =~ /UP/
end

#parse_loopback(context) ⇒ Object



151
152
153
154
155
156
157
158
159
160
161
# File 'lib/modules/cmd/h3c/display_interface.rb', line 151

def parse_loopback(context)
  iface = {}
  iface_id = nil
  context.readline_match_block(/(?<iface_id>LoopBack\d+) current state\s?:\s?(?<state>.*)/) do |block|
    iface_id = block[:iface_id]
    useful[:interface][iface_id] = iface
    block.update(iface, :iface_id)
    block.update(iface, :state)
  end
  same_line_2(context, iface, iface_id)
end

#parse_vlanif(context) ⇒ Object



163
164
165
166
167
168
169
170
171
172
173
# File 'lib/modules/cmd/h3c/display_interface.rb', line 163

def parse_vlanif(context)
  iface = {}
  iface_id = nil
  context.readline_match_block(/(?<iface_id>.*) current state: (?<state>.*)/) do |block|
    iface_id = block[:iface_id]
    useful[:interface][iface_id] = iface
    block.update(iface, :iface_id)
    block.update(iface, :state)
  end
  same_line_2(context, iface, iface_id)
end

#same_line_1(context, iface, iface_id) ⇒ Object



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/modules/cmd/h3c/display_interface.rb', line 123

def same_line_1(context, iface, iface_id)
  context.readline_match_block(/Input:  (?<input_errors>\d+) input errors, (?<runts>\d+) runts, (?<giants>\d+) giants, (?<throttles>\d+) throttles/) do |block|
    #####
    block.warning_ordinary(iface, :input_errors, self) 
    block.warning_ordinary(iface, :runts, self) 
    block.warning_ordinary(iface, :giants, self) 
    block.warning_ordinary(iface, :throttles, self) 
  end
  context.readline_match_block(/(?<crc>\d+) CRC, (?<frame>\d+) frame, - overruns, (?<aborts>\d+) aborts/) do |block|
    block.warning_serious(iface, :crc, self) 
    block.warning_ordinary(iface, :frame, self) 
    block.warning_ordinary(iface, :aborts, self) 
  end
  context.readline_match_block(/Output: (?<output_errors>\d+) output errors, - underruns, - buffer failures/) do |block|
    block.warning_ordinary(iface, :output_errors, self) 
  end
  context.readline_match_block(/(?<aborts>\d+) aborts, (?<deferred>\d+) deferred, (?<collisions>\d+) collisions, (?<last_collisions>\d+) late collisions/) do |block|
    block.warning_ordinary(iface, :aborts, self) 
    block.warning_ordinary(iface, :deferred, self) 
    block.warning_ordinary(iface, :collisions, self) 
    block.warning_ordinary(iface, :last_collisions, self) 
  end
    
  context.readline_match_block(/(?<lost_carrier>\d+) lost carrier/) do |block|
    block.warning_ordinary(iface, :lost_carrier, self) 
  end
end

#same_line_2(context, iface, iface_id) ⇒ Object



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
# File 'lib/modules/cmd/h3c/display_interface.rb', line 175

def same_line_2(context, iface, iface_id)
  context.readline_match_block(/Line protocol current state: (?<proto_state>.*)/) do |block|
    block.update(iface, :proto_state)
  end
  context.readline_match_block(/Description: (?<description>.*)/) do |block|
    block.update(iface, :description)
  end
  context.readline_match_block(/Internet (?<addr>.*)/) do |block|
    if block[:addr] =~ /Address (.*) Primary/
      block.update(iface, :ip_addr, $1)
    end
  end
  context.readline_match_block(/Hardware Address: (?<mac>.*)/) do |block|
    block.update(iface, :mac)
  end

  if iface[:state] =~ /UP/
    context.readline_match_block(/input, \d+ bytes, (?<input_drops>\d+) drops/) do |block|
      block.warning_ordinary(iface, :input_drops, self) 
    end
    context.readline_match_block(/output, \d+ bytes, (?<output_drops>\d+) drops/) do |block|
      block.warning_ordinary(iface, :output_drops, self) 
    end
  end
end

#switch_iface(context) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/modules/cmd/h3c/display_interface.rb', line 55

def switch_iface(context)
  i = 0
  while(i < 5)
    if context[i] =~ /current/
      break
    end
    i += 1
  end
  case context[i]
  when Reg_Bridge_Aggregation
    parse_bridge(context)
  when Reg_Ethernet
    parse_eth(context)
  when Reg_Loopback
    parse_loopback(context)
  when Reg_Vlanif
    parse_vlanif(context)
  end
end