Skip to content

Commit 43945ff

Browse files
author
sjava
committed
test
1 parent 6416189 commit 43945ff

3 files changed

Lines changed: 91 additions & 82 deletions

File tree

device/olt/Huawei.py

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
import sys
55
import re
66
from toolz import cons, concat, unique, merge_with, compose
7-
from functools import reduce
7+
from functools import reduce, partial
88

99
hw_prompt = "#"
1010
hw_pager = "---- More.*----"
11+
prompter = "#"
12+
pager = "---- More.*----"
1113
logfile = sys.stdout
1214

1315

@@ -34,12 +36,11 @@ def doSome(child, command):
3436
result = []
3537
child.sendline(command)
3638
while True:
37-
index = child.expect([hw_prompt, hw_pager], timeout=120)
39+
index = child.expect([prompter, pager], timeout=120)
40+
result.append(child.before)
3841
if index == 0:
39-
result.append(child.before)
4042
break
4143
else:
42-
result.append(child.before)
4344
child.send(' ')
4445
continue
4546
rslt = ''.join(result).replace('\x1b[37D', '')
@@ -188,48 +189,41 @@ def port(x):
188189
return ['success', rec3, ip]
189190

190191

191-
def traffic(ip='', username='', password='', port=''):
192+
def get_port_traffic(child, port):
193+
s, p = port.rsplit('/', 1)
194+
child.sendline('conf')
195+
child.expect(prompter)
196+
child.sendline('interface giu {slot}'.format(slot=s))
197+
child.expect(prompter)
198+
temp = child.before
199+
if 'Failure:' in temp:
200+
child.sendline('interface eth {slot}'.format(slot=s))
201+
child.expect(prompter)
202+
rslt = doSome(child, 'disp port traffic {port}'.format(port=p))
203+
child.expect(prompter)
204+
child.sendline('quit')
205+
child.expect(prompter)
206+
child.sendline('quit')
207+
child.expect(prompter)
208+
rslt1 = rslt.split('\r\n')
209+
rec = [x.strip().split('=')[1] for x in rslt1 if 'octets' in x]
210+
rec1 = [round(int(x) * 8 / 1000000, 1) for x in rec]
211+
return dict(name=port, in_traffic=rec1[0], out_traffic=rec1[1])
212+
213+
214+
def get_traffics(ip='', username='', password='', ports=None):
192215
try:
193-
result = []
194216
child = telnet(ip, username, password)
195-
s, p = port.rsplit('/', 1)
196-
child.sendline('disp board {slot}'.format(slot=s))
197-
while True:
198-
index = child.expect([hw_prompt, hw_pager], timeout=120)
199-
if index == 0:
200-
result.append(child.before)
201-
break
202-
else:
203-
result.append(child.before)
204-
child.send(" ")
205-
continue
206-
if 'GICF' in ''.join(result):
207-
cmd = 'interface giu {slot}'.format(slot=s)
208-
else:
209-
cmd = 'interface eth {slot}'.format(slot=s)
210-
child.sendline('conf')
211-
child.expect(hw_prompt)
212-
child.sendline(cmd)
213-
child.expect(hw_prompt)
214-
child.sendline('disp port traffic {port}'.format(port=p))
215-
child.expect(hw_prompt)
216-
rslt = child.before
217-
child.sendline('quit')
218-
child.expect(hw_prompt)
219-
child.sendline('quit')
220-
child.expect(hw_prompt)
217+
gpt = partial(get_port_traffic, child)
218+
traffics = [gpt(x) for x in ports]
221219
child.sendline('quit')
222220
child.expect(':')
223221
child.sendline('y')
224222
child.close()
225223
except (pexpect.EOF, pexpect.TIMEOUT) as e:
226-
return ['fail', None, ip, port]
227-
rslt1 = rslt.split('\r\n')[1:-1]
228-
rec = [x.replace('\x1b[37D', '').strip().split('=')[1]
229-
for x in rslt1 if 'octets' in x]
230-
rec1 = [round(int(x) * 8 / 1000000, 1) for x in rec]
224+
return ['fail', None, ip]
231225

232-
return ['success', rec1, ip, port]
226+
return ['success', traffics, ip]
233227

234228

235229
def doSomething(ip='', username='', password='', command=''):

device/olt/Zte.py

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
from itertools import product
77
from toolz import unique, partition, partitionby, remove
88
import re
9+
from functools import partial
910

1011
zte_prompt = "#"
1112
zte_pager = "--More--"
13+
prompter = "#"
14+
pager = "--More--"
1215
logfile = sys.stdout
1316

1417

@@ -25,6 +28,21 @@ def telnet(ip="", username="", password=""):
2528
return child
2629

2730

31+
def doSome(child, cmd):
32+
result = []
33+
child.sendline(cmd)
34+
while True:
35+
index = child.expect([prompter, pager], timeout=120)
36+
result.append(child.before)
37+
if index == 0:
38+
break
39+
else:
40+
child.send(' ')
41+
continue
42+
rslt = ''.join(result).replace('\x08', '')
43+
return rslt.replace(cmd + '\r\n', '')
44+
45+
2846
def card_check(ip='', username='', password=''):
2947
try:
3048
result = []
@@ -156,30 +174,24 @@ def zhongji(ip='', username='', password=''):
156174
return ['success', rec3, ip]
157175

158176

159-
def traffic(ip='', username='', password='', port=''):
177+
def get_port_traffic(child, port):
178+
rslt = doSome(child, 'show interface {port}'.format(port=port))
179+
rslt1 = re.findall(r'120 seconds\D+(\d+) Bps,', rslt)
180+
r, s = [round(int(x) * 8 / 1000000, 1) for x in rslt1]
181+
return dict(name=port, in_traffic=r, out_traffic=s)
182+
183+
184+
def get_traffics(ip='', username='', password='', ports=''):
160185
try:
161186
result = []
162187
child = telnet(ip, username, password)
163-
child.sendline("show interface {port}".format(port=port))
164-
while True:
165-
index = child.expect([zte_prompt, zte_pager], timeout=120)
166-
if index == 0:
167-
result.append(child.before)
168-
child.sendline('exit')
169-
child.close()
170-
break
171-
else:
172-
result.append(child.before)
173-
child.send(' ')
174-
continue
175-
except (pexpect.EOF, pexpect.TIMEOUT) as e:
176-
return ['fail', None, ip, port]
177-
rslt = ''.join(result).split('\r\n')[1:-1]
178-
records = [x.replace('\x08', '').strip()
179-
for x in rslt if '120 seconds' in x]
180-
rec1 = [re.findall(r'(\d+) Bps', x)[0] for x in records]
181-
rec2 = [round(int(x) * 8 / 1000000, 1) for x in rec1]
182-
return ['success', rec2, ip, port]
188+
gpt = partial(get_port_traffic, child)
189+
traffics = [gpt(x) for x in ports]
190+
child.sendline('exit')
191+
child.close()
192+
except Exception as e:
193+
return ('fail', None, ip)
194+
return ('success', traffics, ip)
183195

184196

185197
def main():

olt.py

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -281,47 +281,50 @@ def zhongji_check():
281281
cmd, ip=x[0], sm=x[1], interface=x[2]), ports))
282282

283283
#############################################traffic####################
284-
zte_traffic = partial(Zte.traffic,
284+
zte_traffic = partial(Zte.get_traffics,
285285
username=zte_olt_username,
286286
password=zte_olt_password)
287-
hw_traffic = partial(Huawei.traffic,
287+
hw_traffic = partial(Huawei.get_traffics,
288288
username=hw_olt_username,
289289
password=hw_olt_password)
290290

291291

292292
def get_traffic(olt):
293293
functions = dict(hw=hw_traffic, zte=zte_traffic)
294-
no_company = lambda x, y: ['fail', None, x, y]
295-
ip, company, port = olt
296-
return functions.get(company, no_company)(ip=ip, port=port)
294+
no_company = lambda x, y: ['fail', None, x]
295+
ip, company, ports = olt
296+
return functions.get(company, no_company)(ip=ip, ports=ports)
297297

298298

299299
def traffic_output(lock, info):
300-
mark, result, ip, port = info
300+
mark, result, ip = info
301301
with lock:
302302
with open(log_file, 'a') as logging:
303-
logging.write("{ip}:{port}:{mark}\n".format(
304-
ip=ip, port=port, mark=mark))
303+
logging.write("{ip}:{mark}\n".format(ip=ip, mark=mark))
305304
if result and mark == 'success':
306305
with lock:
307-
with open(result_file, 'a') as frslt:
308-
frslt.write("{ip},{port},{down}M,{up}M\n".format(
309-
ip=ip, port=port, down=result[0], up=result[1]))
306+
for r in result:
307+
with open(result_file, 'a') as frslt:
308+
frslt.write("{ip},{port},{down},{up}\n".format(
309+
ip=ip, port=r['name'].strip(), down=r['in_traffic'], up=r['out_traffic']))
310310

311311

312312
def traffic_check():
313-
clear_log()
314-
cmd = 'match(n:Olt)-[*]-(p:Port) return n.ip,n.company,p.name'
315-
nodes = graph.cypher.execute(cmd)
316-
# nodes = graph.find('Olt')
317-
# nodes = graph.find('Olt', property_key='ip', property_value='172.18.0.46')
318-
olts = [(x[0], x[1], x[2].strip()) for x in nodes]
319-
pool = Pool(16)
320-
lock = Manager().Lock()
321-
func = partial(traffic_output, lock)
322-
list(pool.map(compose(func, get_traffic), olts))
323-
pool.close()
324-
pool.join()
313+
# clear_log()
314+
# cmd = 'match(n:Olt)-[*]-(p:Port) where n.company="hw" return n.ip,n.company,collect(p.name)'
315+
# nodes = graph.cypher.execute(cmd)
316+
# olts = [(x[0], x[1], x[2]) for x in nodes]
317+
# pool = Pool(16)
318+
# lock = Manager().Lock()
319+
# func = partial(traffic_output, lock)
320+
# list(pool.map(compose(func, get_traffic), olts))
321+
# pool.close()
322+
# pool.join()
323+
324+
records = (x.split(',') for x in open(result_file))
325+
cmd = "match (n:Olt)-[*]-(p:Port) where n.ip={ip} and p.name={name} set p.in_traffic={i},p.out_traffic={o}"
326+
list(map(lambda x: graph.cypher.execute(
327+
cmd, ip=x[0], name=x[1], i=x[2], o=x[3]), records))
325328

326329

327330
def hw_gpon():

0 commit comments

Comments
 (0)