Python wrapper for running instances of trisurf-ng
Samo Penic
2017-11-28 824b3e562b5e0e7f9450b06a45deabda6ebe20df
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
@@ -79,7 +80,7 @@
   for h in hosts:
      for r in h['runs']:
         if(r.isFromSnapshot):
            file_list.append(r.snapshotFilename)
            file_list.append(r.snapshotFile)
         else:
            file_list.append(r.tapeFilename)
   file_list.append(main.__file__)
@@ -93,8 +94,12 @@
            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__)
         if('remotebasepath' in host):
            remote_dir=host['remotebasepath']
@@ -130,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))
@@ -255,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=[]
@@ -281,16 +291,20 @@
      hosts=({'name':socket.gethostname(),'address':'127.0.0.1', 'runs':hosts},)
   #find the host at which the action is attended
#   print(args)
   if args['host']==None:
      #Only status and version commands are automatically executed on all the hosts. stopping or starting  or other actions is not!
      if(args['status']==False and args['version']==False):
         hosts=getListOfHostConfigurationByHostname(hosts,socket.gethostname())
#      if(args['status']==False and args['version']==False and):
#      hosts=getListOfHostConfigurationByHostname(hosts,socket.gethostname())
      pass
   else:
      hosts=getListOfHostConfigurationByHostname(hosts,args['host'])
   if len(hosts)==0:
      print ('Hostname "{}" does not exist in configuration file. Please check the spelling'.format(args['host'][0]))
      exit(1)
   if not args['local_only']:
#         print("copying to remotes, DEBUG")
#         print(hosts)
         hosts=copyConfigAndConnect(hosts)
   #do local stuff:
   for host in hosts:
@@ -305,16 +319,23 @@
            remote_dir=host['remotebasepath']
         else:
            remote_dir='trisurf_simulations'
         output=host['_conn'].execute('python3 ./'+remote_dir+'/'+main.__file__+' -x '+" ".join(argv))
         for line in output:
            print(line.replace('\n',''))
         #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()