import time

if __name__ == '__main__':
    if len(sys.argv) != 3:
        print 'Usage:'
        print sys.argv[0],' username workdir'
        exit(-1)

    user_name = sys.argv[1]
    work_dir = sys.argv[2]

    if user_name == 'root':
        print 'It is dangerous to run commands using root! make sure!'
        exit(-1)
        
    full_node_list = node_common.get_full_node_list()
    
    print 'will run commands on %d nodes...'%len(full_node_list)
    for node in full_node_list:
        try:
            print 'handling node:', node
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect(node,port=22,username=user_name,password='******',timeout=5)

            #cmd = 'cd %s; svn update'%(work_dir)
            cmd = 'cd %s; ls pattern_reg'%(work_dir)
            print cmd
            stdin,stdout,stderr = ssh.exec_command(cmd)
            print 'execute remote command finished,stdout is:\n'
            print stdout.readlines()
        print sys.argv[0], ' MERGEFET_INC cq02-sw-kvm06.cq02 8100 12 /home/karlxu/preprocess/n-gram karlxu nj02-sw-kvmserver01.nj02 iter_i_2gram 2' 
        exit(-1)
    
    operation = sys.argv[1]
    cluster_server = sys.argv[2]
    listen_port = int(sys.argv[3])
    num_procs = int(sys.argv[4])
    work_dir = sys.argv[5]
    user_name = sys.argv[6]
    database_server = sys.argv[7]
    database_name = sys.argv[8]
    ngram = int(sys.argv[9])
    print 'command line:'
    print '%s %s %d %d %s %s %s %s %d'%(operation,cluster_server,listen_port,num_procs,work_dir,user_name,database_server,database_name,ngram)

    orig_client_list = node_common.get_full_node_list()
    #orig_client_list = ['nj02-sw-kvmserver00.nj02']
    client_list = _get_usable_client_list(orig_client_list,operation,user_name)
    
    print '\n'
    print 'executing remote command... num_clients=%d'%len(client_list)
    for client in client_list:
        try:
            print 'cluster_client = ', client
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect(client,port=22,username=user_name,password='******',timeout=4)
            real_num_procs = num_procs
            #if node_common.NJ02_VMHOST in client:
            #    real_num_procs = num_procs/2