File: //usr/local/qcloud/monitor/barad/plugin/collector/utils/proxy_client.py
#!/usr/bin/env python
import sys, os
import socket
import time
def usage():
print("usage: proxy_client.py")
print(" -h (print this help)")
print(" attach spdk-target-iqn disk-id")
print(" detach spdk-target-iqn [-f]")
print(" rescan spdk-target-iqn")
print("")
def main(argv):
# 0. argvs and help
op = argv[0]
if op == '-h' or op not in ['attach', 'detach', 'rescan']:
usage()
return 1
if len(argv) < 2: # detach without force; rescan
usage()
return 1
# 1. make request msg
if op == 'attach':
if len(argv) < 3:
usage()
return 1
request = 'attach ' + argv[1] + ' ' + argv[2]
elif op == 'detach':
# check force option
if len(argv) > 2 and argv[2] in ['-f', '--force']:
request = 'detach ' + argv[1] + ' --force'
else:
request = 'detach ' + argv[1] + ' --noforce'
elif op == 'rescan':
request = 'rescan ' + argv[1] + ' --nooption'
else:
usage()
return 1
sys.stdout.write('request: %s\n' %(request) )
sys.stdout.flush()
# 2. prepare socket client
sock = socket.socket()
#sock.settimeout(6)
conn = False
# try to reconnect when error occured
for _ in range(0,20):
try:
sock.connect(("169.254.68.1", 9966))
except socket.error as e:
time.sleep(1)
continue
conn = True
break
if not conn:
sys.stdout.write('Error: connect failed\n')
exit(1)
# 3. send request
sock.send(request.encode('utf-8'))
# 4. wait response
resp = sock.recv(256)
# 5. stdout
sys.stdout.write('get response: %s\n' %(resp.decode()) )
sys.stdout.flush()
# 6. exit
sock.close()
if __name__ == "__main__":
if len(sys.argv) < 2:
usage()
else:
main(sys.argv[1:])