-
Notifications
You must be signed in to change notification settings - Fork 7
/
ipvsadm.py
55 lines (49 loc) · 1.45 KB
/
ipvsadm.py
1
2
3
4
5
6
7
8
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/bin/env python
# -*- coding: utf-8 -*-
#
# usage: ipvsadm.py acctiveconn tcp 172.18.0.12:80 172.17.0.22:80
import sys
def parserArgs(args):
p = dict()
if args[1] not in ('active', 'inactive', 'weight') :
print 'type error'
sys.exit(1)
p['type'] = args[1]
p['proto'] = args[2].upper()
vip = args[3].split(':')
p['vipHex'] = ipToHexStr(vip[0])
p['vipPort'] = '%04X' % int(vip[1])
rip = args[4].split(':')
p['ripHex'] = ipToHexStr(rip[0])
p['ripPort'] = '%04X' % int(rip[1])
#print p
return p
def ipToHexStr(ip):
buf=list()
for i in ip.split('.'):
buf.append('%02X' % int(i))
return "".join(buf)
def findData(args):
vip = "%s %s:%s" % (args['proto'], args['vipHex'], args['vipPort'])
rip = " -> %s:%s" % (args['ripHex'], args['ripPort'])
vipStr = None
result = None
for line in file("/proc/net/ip_vs"):
if line.startswith(vip):
vipStr = True
continue
if vipStr is True and line.startswith(rip):
break
# -> AC110016:0050 Masq 1 10 157
import re
values = re.split('\s+', line)
#print values
# ['', '->', 'AC110016:0050', 'Masq', '1', '0', '0', '']
result = dict()
result['weight'] = values[4]
result['active'] = values[5]
result['inactive'] = values[6]
return result[args['type']]
if __name__ == "__main__":
args = parserArgs(sys.argv)
print findData(args)