def main(): file_name, lan_servers, product_servers, user, password, host = param_check(sys.argv) session = utility.generate_session_name() start = time.time() essh = serverlist.get_jump_server() print("makeup remote server: " + essh.host) ensure_remote_usable(essh, session, user, password, host) sha1sum = utility.calc_sha1sum(file_name) size = os.path.getsize(file_name) tasks = [] files = [] if len(lan_servers) != 0: print(lan_servers, len(lan_servers)) client_count = len(lan_servers) + 1 block_size = size / client_count + client_count files = utility.split_file(file_name, str(block_size)) for index, name in enumerate(lan_servers): transfer_file = files[index] server_info = serverlist.get_lan_server(name) task = threading.Thread(target=remote_upload, args=(transfer_file, server_info, essh, session)) tasks.append(task) task = threading.Thread(target=local_upload, args=(files[len(lan_servers)], essh, session)) tasks.append(task) else: task = threading.Thread(target=local_upload, args=(file_name, essh, session)) tasks.append(task) for t in tasks: t.setDaemon(True) t.start() while True: time.sleep(1) if is_all_task_finished(tasks): break finish = time.time() child = login_server(essh) tmp_path = os.path.join(essh.tmpPath, session) child.sendline("cd " + tmp_path) if len(lan_servers) != 0: merge_file(child, files, file_name, sha1sum) for f in files: os.remove(f) print("-----------------File upload success.-----------------------") print("Total cost " + str(finish - start)) print(file_name + ": " + sha1sum) print("-----------------Begin dispatch file.-----------------------") remote_server_dispatch(child, file_name, product_servers) child.close()
def param_check(argv): usage = "usage: %prog [options] arg" parser = OptionParser(usage) parser.add_option("-f", "--file", dest="filename", help="transfer the file to remote server") parser.add_option("-c", "--conf", dest="config", help="the server conf file") parser.add_option("-l", "--lan-servers", dest="lan_servers", help="use lan servers to speed scp, eg:server1,server2[,server_n]") parser.add_option("-d", "--destination-servers", dest="dest_servers", help="destination that file would be upload. eg:server1[,server_n]") parser.add_option("-u", "--user", dest="user", help="email user name, eg:[email protected]") parser.add_option("-p", "--password", dest="password", help="email password") parser.add_option("-H", "--host", dest="pop3", help="pop3 server host name, eg:pop3.xunlei.com") (option, args) = parser.parse_args(argv) if option.filename is None or option.config is None or option.dest_servers is None \ or option.user is None or option.password is None or option.pop3 is None: parser.error("\nIncorrect number of arguments. \nUse option \'--help\'.") filename = option.filename if not os.path.exists(filename) or not os.path.isfile(filename): utility.pexit("File \"" + filename + "\" is not a file or not exist.") config = option.config if not os.path.exists(config) or not os.path.isfile(config): utility.pexit("File \"" + config + "\" is not a file or not exist.") serverlist.load_config(config) lan_servers = [] if option.lan_servers is not None: lan_servers = option.lan_servers.split(',') for name in lan_servers: info = serverlist.get_lan_server(name) if info is None: utility.pexit("server \"" + name + "\" is not exist") product_servers = option.dest_servers.split(',') for server_name in product_servers: info = serverlist.get_product_server(server_name) if info is None: utility.pexit("server \"" + server_name + "\" is not exist") return filename, lan_servers, product_servers, option.user, option.password, option.pop3
def login(name): if name == "essh": jump = serverlist.get_jump_server() child = auto_login_essh(jump) return child else: server = serverlist.get_lan_server(name) if server is not None: child = login_server(server) return child server = serverlist.get_product_server(name) if server is not None: jump = serverlist.get_jump_server() child = auto_login_essh(jump) child = jump_login(child, server) return child utility.pexit("server \"" + name + "\" not exists.")
def login(name): if name == "essh": jump = serverlist.get_jump_server() child = auto_login_essh(jump) return child else: server = serverlist.get_lan_server(name) if server is not None: child = login_server(server) return child server = serverlist.get_product_server(name) if server is not None: jump = serverlist.get_jump_server() child = auto_login_essh(jump) child = jump_login(child, server) return child utility.pexit('server "' + name + '" not exists.')
def main(): file_name, lan_servers, product_servers, user, password, host = param_check( sys.argv) session = utility.generate_session_name() start = time.time() essh = serverlist.get_jump_server() print("makeup remote server: " + essh.host) ensure_remote_usable(essh, session, user, password, host) sha1sum = utility.calc_sha1sum(file_name) size = os.path.getsize(file_name) tasks = [] files = [] if len(lan_servers) != 0: print(lan_servers, len(lan_servers)) client_count = len(lan_servers) + 1 block_size = size / client_count + client_count files = utility.split_file(file_name, str(block_size)) for index, name in enumerate(lan_servers): transfer_file = files[index] server_info = serverlist.get_lan_server(name) task = threading.Thread(target=remote_upload, args=(transfer_file, server_info, essh, session)) tasks.append(task) task = threading.Thread(target=local_upload, args=(files[len(lan_servers)], essh, session)) tasks.append(task) else: task = threading.Thread(target=local_upload, args=(file_name, essh, session)) tasks.append(task) for t in tasks: t.setDaemon(True) t.start() while True: time.sleep(1) if is_all_task_finished(tasks): break finish = time.time() child = login_server(essh) tmp_path = os.path.join(essh.tmpPath, session) child.sendline("cd " + tmp_path) if len(lan_servers) != 0: merge_file(child, files, file_name, sha1sum) for f in files: os.remove(f) print("-----------------File upload success.-----------------------") print("Total cost " + str(finish - start)) print(file_name + ": " + sha1sum) print("-----------------Begin dispatch file.-----------------------") remote_server_dispatch(child, file_name, product_servers) child.close()
def param_check(argv): usage = "usage: %prog [options] arg" parser = OptionParser(usage) parser.add_option("-f", "--file", dest="filename", help="transfer the file to remote server") parser.add_option("-c", "--conf", dest="config", help="the server conf file") parser.add_option( "-l", "--lan-servers", dest="lan_servers", help="use lan servers to speed scp, eg:server1,server2[,server_n]") parser.add_option( "-d", "--destination-servers", dest="dest_servers", help="destination that file would be upload. eg:server1[,server_n]") parser.add_option("-u", "--user", dest="user", help="email user name, eg:[email protected]") parser.add_option("-p", "--password", dest="password", help="email password") parser.add_option("-H", "--host", dest="pop3", help="pop3 server host name, eg:pop3.xunlei.com") (option, args) = parser.parse_args(argv) if option.filename is None or option.config is None or option.dest_servers is None \ or option.user is None or option.password is None or option.pop3 is None: parser.error( "\nIncorrect number of arguments. \nUse option \'--help\'.") filename = option.filename if not os.path.exists(filename) or not os.path.isfile(filename): utility.pexit("File \"" + filename + "\" is not a file or not exist.") config = option.config if not os.path.exists(config) or not os.path.isfile(config): utility.pexit("File \"" + config + "\" is not a file or not exist.") serverlist.load_config(config) lan_servers = [] if option.lan_servers is not None: lan_servers = option.lan_servers.split(',') for name in lan_servers: info = serverlist.get_lan_server(name) if info is None: utility.pexit("server \"" + name + "\" is not exist") product_servers = option.dest_servers.split(',') for server_name in product_servers: info = serverlist.get_product_server(server_name) if info is None: utility.pexit("server \"" + server_name + "\" is not exist") return filename, lan_servers, product_servers, option.user, option.password, option.pop3