From 7d66b534e70d00483460b290780edfae9cc5de40 Mon Sep 17 00:00:00 2001 From: Marius Sandu-Popa Date: Fri, 29 Jan 2010 16:47:50 +0200 Subject: [PATCH] changes in dir client xml --- bt_comm/client/Client.py | 74 +++++++++++++++++++++++ bt_comm/client/ParserConf.py | 0 bt_comm/client/SSHCommander.py | 33 ++++++++--- bt_comm/client/XMLParser.py | 104 --------------------------------- bt_comm/xml/SSHCommander.py | 38 ------------ bt_comm/xml/TrafficControl.py | 100 ------------------------------- 6 files changed, 99 insertions(+), 250 deletions(-) create mode 100644 bt_comm/client/Client.py delete mode 100644 bt_comm/client/ParserConf.py delete mode 100644 bt_comm/client/XMLParser.py delete mode 100644 bt_comm/xml/SSHCommander.py delete mode 100644 bt_comm/xml/TrafficControl.py diff --git a/bt_comm/client/Client.py b/bt_comm/client/Client.py new file mode 100644 index 0000000..df47042 --- /dev/null +++ b/bt_comm/client/Client.py @@ -0,0 +1,74 @@ +import sys, socket +import pickle +from Util import * +MSGLEN = 1024 +HOST = "127.0.0.1" +PORT = 10001 + +class MySocket: + def __init__(self, sock=None): + if sock is None: + self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + else: + self.sock = sock + + def connect(self, host, port): + self.sock.connect((host, port)) + print "connected to %s %s"%(host, port) + + def send_msg(self, msg): + totalsent = 0 + while totalsent < len(msg): + sent = self.sock.send(msg[totalsent:]) + if sent == 0: + raise RuntimeError, "socket connection broken" + totalsent = totalsent + sent + + def send_command(self, msg_type, config_data): + self.send_msg(msg_type) + response = self.recv_msg() + if response == ACK_MSG: + print "aici" + + self.send_dict(config_data) + print "am trimis" + response = self.recv_msg() + + return response + + def recv_msg(self): + msg = '' + chunk = self.sock.recv(MSGLEN) + if chunk == '': + raise RuntimeError, "socket connection broken" + msg = msg + chunk + print msg + return msg + + # send a pickled dictionary + def send_dict(self, data): + dumped_data = pickle.dumps(data) + self.send_msg(dumped_data) + +if __name__ == "__main__": + + s = MySocket() + s.connect(HOST, PORT) + # test 1 + #s.send_msg("hello") + # test 2 + #dd = {'a':1, 'b':2} + #s.send_dict(dd) + #s.recv_msg() + + # test config + config_data = [{CLIENT:"tribler", FILE:"Tribler/Tools/cmdline.py", + RUN_TYPE:"script", + INTERPRETER:"python", PREFIX:"PYTHONPATH=.",SUFFIX:"", + UP_LIMIT_OPTION:"",DL_LIMIT_OPTION:"", PORT_OPTION:"-p", + LOG_DIR_OPTION:"-l",DL_DIR_OPTION:"-d"}] + + response = s.send_command(CONFIG_MSG, config_data) + print response + + diff --git a/bt_comm/client/ParserConf.py b/bt_comm/client/ParserConf.py deleted file mode 100644 index e69de29..0000000 diff --git a/bt_comm/client/SSHCommander.py b/bt_comm/client/SSHCommander.py index 71cfc41..716a065 100644 --- a/bt_comm/client/SSHCommander.py +++ b/bt_comm/client/SSHCommander.py @@ -2,14 +2,31 @@ import paramiko import os paramiko.util.log_to_file('/tmp/paramiko.log') -client = paramiko.SSHClient() -client.load_system_host_keys() -client.connect(hostname='141.85.37.237', username='marius', password='marius') -#client.connect(hostname='p2p-next-07.grid.pub.ro', username='p2p') -stdin, stdout, stderr = client.exec_command('touch gugu dudu') -stdin, stdout, stderr = client.exec_command('ls -l') -print stdout.readlines() -client.close() +class SSHCommander: + def __init__(self, hostname, username, password): + self.sshclient = paramiko.SSHClient() + self.sshclient.load_system_host_keys() + self.sshclient.connect(hostname=hostname, username=username, password=password) + + def emitCommand(self, comm): + stdin, stdout, stderr = self.sshclient.exec_command(comm) + print stdout.readlines() + + def closeConnection(self): + self.sshclient.close() + + +sshc = SSHCommander("141.85.37.93", "marius", "marius") +sshc.emitCommand("transmissioncli -D -U \[isoHunt\]\ ubuntu-9.10-desktop-i386.iso.torrent &> out.log") +#sshc.closeConnection() + +#~ #client.connect(hostname='p2p-next-07.grid.pub.ro', username='p2p') +#~ stdin, stdout, stderr = client.exec_command('touch gugu dudu') +#~ stdin, stdout, stderr = client.exec_command('ls -l') +#~ print stdout.readlines() +#~ client.close() + + #~ host = "p2p-next-09.grid.pub.ro" #~ port = 22 #~ transport = paramiko.Transport((host, port)) diff --git a/bt_comm/client/XMLParser.py b/bt_comm/client/XMLParser.py deleted file mode 100644 index 1f473b5..0000000 --- a/bt_comm/client/XMLParser.py +++ /dev/null @@ -1,104 +0,0 @@ -from lxml import etree - -class SwarmInstance: - def __init__(self, id, node_id, list): - self.id = id; - self.node_id = node_id; - self.btclient = list[0]; - self.upload_limit = list[1]; - self.download_limit = list[2]; - self.port = list[3]; - self.download_dir = list[4]; - self.upload_dir = list[5]; - - def __str__(self): - return '[%s: %s: %s: %s: %s: %s: %s: %s]' \ - %(self.id, self.node_id, self.btclient, self.upload_limit, \ - self.download_limit, self.port, self.upload_dir, self.download_dir); - -class NodeConfig: - def __init__(self, list): - self.id = list[0]; - self.public_address = list[1]; - self.public_port = list[2]; - self.private_address = list[3]; - self.private_port = list[4]; - self.ssh_port= list[5]; - self.clients_base_dir = list[6]; - - #~ def __str__(self): - #~ return '[%s: %s: %s: %s: %s: %s: %s]' \ - #~ %(self.id, self.btclient, self.upload_limit, self.download_limit, self.port, self.upload_dir, self.download_dir); - -class ClientConfig: - def __init__(self, id, node_path, filetype, options): - self.id = id; - self.filetype = filetype; - self.options = options; - #~ self.upload_limit_option= list[2]; - #~ self.download_limit_option = list[3]; - #~ self.port_option = list[4]; - #~ self.logging_dir_option = list[5]; - #~ self.download_dir_option = list[6]; - - #~ def __str__(self): - #~ return '[%s: %s: %s: %s: %s: %s: %s]' \ - #~ %(self.id, self.btclient, self.upload_limit, self.download_limit, self.port, self.upload_dir, self.download_dir); - -class FileType: - def __init__(self, list): - self.type = list[0]; - self.file = list[1]; - self.interpreter = list[2]; - self.prefix = list[3]; - self.sufix = list[4]; - - def __str__(self): - return '[%s: %s: %s: %s: %s: %s: %s]' \ - %(self.id, self.btclient, self.upload_limit, self.download_limit, self.port, self.upload_dir, self.download_dir); - -try: - tree = etree.parse("clients.xml") - root = tree.getroot() - clients_options = {} - for elem in root: - id = elem.get("id") - options = [elem2.text for elem2 in elem[1:]] - filetype = [elem[0].get("type")] - filetype.extend([elem2.text for elem2 in elem[0]]) - clients_options[id] = [filetype, options] - - print clients_options -except IOError as e: - print e - -try: - tree = etree.parse("nodes.xml") - root = tree.getroot() - nodes = {} - for elem in root: - id = elem.get("id") - list = [elem2.text for elem2 in elem[:len(elem)-1]] - client_paths = {} - for elem2 in elem[len(elem)-1]: - client_id = elem2.get("id"); - client_paths [client_id]=elem2[0].text; - nodes[id] = [client_paths, list] - print nodes - print "==================================" -except IOError as e: - print e - -try: - tree = etree.parse("swarm.xml") - root = tree.getroot() - swarm = {} - for elem in root: - id = elem.get("id") - list = [elem2.text for elem2 in elem[:len(elem)-1]] - swarm[id] = list - print swarm - print "==================================" -except IOError as e: - print e - diff --git a/bt_comm/xml/SSHCommander.py b/bt_comm/xml/SSHCommander.py deleted file mode 100644 index 716a065..0000000 --- a/bt_comm/xml/SSHCommander.py +++ /dev/null @@ -1,38 +0,0 @@ -import paramiko -import os -paramiko.util.log_to_file('/tmp/paramiko.log') - -class SSHCommander: - def __init__(self, hostname, username, password): - self.sshclient = paramiko.SSHClient() - self.sshclient.load_system_host_keys() - self.sshclient.connect(hostname=hostname, username=username, password=password) - - def emitCommand(self, comm): - stdin, stdout, stderr = self.sshclient.exec_command(comm) - print stdout.readlines() - - def closeConnection(self): - self.sshclient.close() - - -sshc = SSHCommander("141.85.37.93", "marius", "marius") -sshc.emitCommand("transmissioncli -D -U \[isoHunt\]\ ubuntu-9.10-desktop-i386.iso.torrent &> out.log") -#sshc.closeConnection() - -#~ #client.connect(hostname='p2p-next-07.grid.pub.ro', username='p2p') -#~ stdin, stdout, stderr = client.exec_command('touch gugu dudu') -#~ stdin, stdout, stderr = client.exec_command('ls -l') -#~ print stdout.readlines() -#~ client.close() - - -#~ host = "p2p-next-09.grid.pub.ro" -#~ port = 22 -#~ transport = paramiko.Transport((host, port)) - -#~ privatekeyfile = os.path.expanduser('~/.ssh/id_rsa') -#~ mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile) -#~ username = 'p2p' -#~ transport.connect(username = username, pkey = mykey) - diff --git a/bt_comm/xml/TrafficControl.py b/bt_comm/xml/TrafficControl.py deleted file mode 100644 index 2c28f08..0000000 --- a/bt_comm/xml/TrafficControl.py +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env python - -""" - Traffic control interface for Linux tc - 2010, Razvan Deaconescu, razvan.deaconescu@cs.pub.ro -""" - -import sys -import sqlite3 -import os.path - -DEBUG = False - -class TrafficControl: - """ - Basic class interface to Linux tc - """ - - def __init__(self, node_type): - self.node_type = node_type - self.upload_limit = -1 - self.download_limit = -1 - - def config(self, host_address, host_port, host_iface, - vm_address = None, vm_port = -1, vm_iface = None): - self.host_address = host_address - self.host_port = host_port - self.host_iface = host_iface - self.vm_address = vm_address - self.vm_port = vm_port - self.vm_iface = vm_iface - - """ - Set upload limit. Argument in KB/s (kilobytes/s) - """ - def set_upload_limit(self, upload_limit): - self.upload_limit = upload_limit - - """ - Set download limit. Argument in KB/s (kilobytes/s) - """ - def set_download_limit(self, download_limit): - self.download_limit = download_limit - - def get_upload_limit_commands(self): - upload_limit_commands = [] - upload_limit_commands.append("tc qdisc add dev %s root handle 1: htb default 90" % (self.host_iface)) - upload_limit_commands.append("tc class add dev %s parent 1: classid 1:1 htb rate %dkbps ceil %dkbps" % (self.host_iface, self.upload_limit, self.upload_limit)) - upload_limit_commands.append("tc class add dev %s parent 1:1 classid 1:10 htb rate %dkbps ceil %dkbps" % (self.host_iface, self.upload_limit, self.upload_limit)) - upload_limit_commands.append("tc qdisc add dev %s parent 1:10 handle 10: sfq perturb 10" % (self.host_iface)) - upload_limit_commands.append("tc filter add dev %s parent 1:0 protocol ip u32 match ip sport %d 0xffff flowid 1:10" % (self.host_iface, self.vm_port)) - - return upload_limit_commands - - def get_download_limit_commands(self): - download_limit_commands = [] - download_limit_commands.append("tc qdisc add dev %s root handle 1: htb default 90" % (self.vm_iface)) - download_limit_commands.append("tc class add dev %s parent 1: classid 1:1 htb rate %dkbps ceil %dkbps" % (self.vm_iface, self.download_limit, self.download_limit)) - download_limit_commands.append("tc class add dev %s parent 1:1 classid 1:10 htb rate %dkbps ceil %dkbps" % (self.vm_iface, self.download_limit, self.download_limit)) - download_limit_commands.append("tc qdisc add dev %s parent 1:10 handle 10: sfq perturb 10" % (self.vm_iface)) - download_limit_commands.append("tc filter add dev %s parent 1:0 protocol ip u32 match ip dst %s/32 flowid 1:10" % (self.vm_iface, self.vm_address)) - - return download_limit_commands - - def get_flush_commands(self): - flush_commands = [] - flush_commands.append("tc qdisc del dev %s root" % (self.host_iface)) - flush_commands.append("tc qdisc del dev %s root" % (self.vm_iface)) - - return flush_commands - - -def print_commands(commands, header): - print "\n\t== %s ==\n" % (header) - - for c in commands: - print c - -def main(): - - """ - Test case - """ - - tc = TrafficControl("openvz") - tc.config("141.85.224.201", 22, "eth1", - "172.16.10.1", 22, "venet0") - tc.set_upload_limit(512) - tc.set_download_limit(256) - - upload_limit_commands = tc.get_upload_limit_commands() - download_limit_commands = tc.get_download_limit_commands() - flush_commands = tc.get_flush_commands() - - print_commands(upload_limit_commands, "upload limit commands") - print_commands(download_limit_commands, "download limit commands") - print_commands(flush_commands, "flush commands") - -if __name__ == "__main__": - sys.exit(main()) -- 2.20.1