Python wrapper for running instances of trisurf-ng
Samo Penic
2017-01-20 282bdafd491d8ce286fe13c40fbbc9379123f0d5
trisurf/tsmgr.py
@@ -15,10 +15,10 @@
else:
   from urlparse import urlparse
   from vtk import *
   from . import VTKRendering
#import io
from IPython import embed
#from IPython import embed
import __main__ as main
@@ -55,6 +55,7 @@
   parser.add_argument('-n', nargs='+', metavar='PROC_NO', type=int, help='OBSOLETE. Specifies process numbers.')
   parser.add_argument('-R','--raw',help='print status and the rest of the information in raw format', action="store_true")
   parser.add_argument('-x','--local-only',help='do not attempt to contact remote hosts. Run all operations only on local machine',action='store_true')
   parser.add_argument('--originating-host',nargs=1,help='specify which host started the remote connections. Useful mainly fo internal functionaly of tsmgr and analyses.')
   args = parser.parse_args(arguments)
   return args
@@ -74,6 +75,15 @@
def copyConfigAndConnect(hosts):
   print("Connecting to remote hosts and copying config files, tapes and snapshots")
   #create a list of files to be copied across all the remote hosts
   file_list=[]
   for h in hosts:
      for r in h['runs']:
         if(r.isFromSnapshot):
            file_list.append(r.snapshotFile)
         else:
            file_list.append(r.tapeFilename)
   file_list.append(main.__file__)
   for host in hosts:
      if(host['name'] !=socket.gethostname()): #if I am not the computer named in host name
         try:
@@ -84,19 +94,28 @@
            port=host['port']
         except:
            port=22 #default ssh port
         rm=Remote.Connection(hostname=host['address'],username=username, port=port)
         rm.connect()
         try:
            rm=Remote.Connection(hostname=host['address'],username=username, port=port)
            rm.connect()
         except:
            host['_conn']=None
            continue
#         print ("Sendind file:"+main.__file__)
         rm.send_file(main.__file__,'remote_control.py')
         for run in host['runs']:
            try:
               rm.send_file(run.tapeFile,run.tapeFile)
            except:
               pass
            try:
               rm.send_file(run.snapshotFile,run.snapshotFile)
            except:
               pass
         if('remotebasepath' in host):
            remote_dir=host['remotebasepath']
         else:
            remote_dir='trisurf_simulations'
         rm.send_multiple_files_in_directory(file_list,remote_dir)
#         rm.send_file(main.__file__,'remote_control.py')
#         for run in host['runs']:
#            try:
#               rm.send_file(run.tapeFile,run.tapeFile)
#            except:
#               pass
#            try:
#               rm.send_file(run.snapshotFile,run.snapshotFile)
#            except:
#               pass
         host['_conn']= rm
   # we are connected to all hosts...
   return hosts
@@ -116,6 +135,7 @@
def status_processes(args,host):
   print("in status processes")
   target_runs=getTargetRunIdxList(args)
   if target_runs==None:
      target_runs=list(range(1,len(host['runs'])+1))
@@ -241,12 +261,16 @@
def preview_vtu(args,host):
   #only for localhost at the moment
   if sys.version_info>=(3,0):
      print("Preview works only with python 2.7")
      exit(1)
   from . import VTKRendering
   target_runs=getTargetRunIdxList(args)
   if target_runs==None:
      target_runs=list(range(1,len(host['runs'])+1))
   if host['name'] == socket.gethostname():
      VTKRendering.Renderer(args,host)
      for i in target_runs:
         VTKRendering.Renderer(args,host,host['runs'][i-1])
   else:
      print("VTK rendering currently works on localhost only!")
def getListOfHostConfigurationByHostname(hosts,host):
   rhost=[]
@@ -287,16 +311,27 @@
            print("Host "+bcolors.WARNING+host['name']+bcolors.ENDC+" reports:")
         perform_action(args,host, analyses=analyses, hosts=hosts)
      elif not args['local_only']:
         output=host['_conn'].execute('python3 ./remote_control.py -x '+" ".join(argv))
         for line in output:
            print(line.replace('\n',''))
         if('remotebasepath' in host):
            remote_dir=host['remotebasepath']
         else:
            remote_dir='trisurf_simulations'
         #output=host['_conn'].execute('cd '+remote_dir)
         #print(remote_dir)
         #print(main.__file__)
         #print('python3 '+main.__file__+' -x '+" ".join(argv))
         if(host['_conn']!=None):
#            print("was here, "+'cd '+remote_dir+ '; python3 '+main.__file__+' -x --originating-host ' +socket.gethostname()+" "+" ".join(argv))
            output=host['_conn'].execute('cd '+remote_dir+ '; python3 '+main.__file__+' -x --originating-host ' +socket.gethostname()+" "+" ".join(argv))
            for line in output:
               print(line.replace('\n',''))
   if not args['local_only']:
      print("Closing connections to remote hosts")
      for host in hosts:
         if(host['name'] !=socket.gethostname()):
            host['_conn'].disconnect()
            if(host['_conn']):
               host['_conn'].disconnect()