Python wrapper for running instances of trisurf-ng
Samo Penic
2019-07-15 7f64589f9f172b7965a086bcceed8c47a51daca7
trisurf/tsmgr.py
@@ -18,7 +18,7 @@
   
#import io
#from IPython import embed
from IPython import embed
import __main__ as main
@@ -56,6 +56,7 @@
   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.')
   parser.add_argument('--analysis-options', nargs='+', help='options passed down to analyses')
   args = parser.parse_args(arguments)
   return args
@@ -94,12 +95,8 @@
            port=host['port']
         except:
            port=22 #default ssh port
         try:
            rm=Remote.Connection(hostname=host['address'],username=username, port=port)
            rm.connect()
         except:
            host['_conn']=None
            continue
         rm=Remote.Connection(hostname=host['address'],username=username, port=port)
         rm.connect()
#         print ("Sendind file:"+main.__file__)
         if('remotebasepath' in host):
            remote_dir=host['remotebasepath']
@@ -135,7 +132,6 @@
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))
@@ -207,9 +203,9 @@
   exit(0)
def analyze(args,host,a_dict, analysis,hosts):
   if len(a_dict)==0:
      print ('Error: no analyses are specified in the tsmgr.start()!')
def analyze(args,host,analysis,hosts):
   if len(trisurf._analysis_list)==0:
      print ('Error: no decorated function with @analysis decorator!')
      exit(1)
   target_runs=getTargetRunIdxList(args)
   if target_runs==None:
@@ -217,11 +213,11 @@
   for i in target_runs:
      for anal in analysis:
         if(anal not in a_dict):
            print("Analysis '"+anal+"' is not known. Available analyses: "+", ".join(a_dict.keys())+".")
         if(anal not in trisurf._analysis_list):
            print("Analysis '"+anal+"' is not known. Available analyses: "+", ".join(trisurf._analysis_list.keys())+".")
            exit(0)
      for anal in analysis:
         retval=a_dict[anal](host['runs'][i-1],host=host, args=args, hosts=hosts)
         retval=trisurf._analysis_list[anal](host['runs'][i-1],host=host, args=args, hosts=hosts)
         #try:
         if(retval):
            exit(0)
@@ -252,7 +248,7 @@
      embed()
      exit(0)
   elif args['analysis']!= None:
      analyze(args,host,kwargs.get('analyses', {}), args['analysis'],kwargs.get('hosts',None))
      analyze(args,host, args['analysis'],kwargs.get('hosts',None))
      exit(0)
   else: #version requested
      print(getTrisurfVersion())
@@ -281,7 +277,7 @@
def start(hosts,argv=sys.argv[1:], analyses={}):
def start(hosts,argv=sys.argv[1:]):
   args=vars(ParseCLIArguments(argv))
   #Backward compatibility... If running just on localmode, the host specification is unnecessary. Check if only Runs are specified
   try:
@@ -309,7 +305,7 @@
            print("Host <font color='orange'>"+host['name']+"</font> reports:")
         else:
            print("Host "+bcolors.WARNING+host['name']+bcolors.ENDC+" reports:")
         perform_action(args,host, analyses=analyses, hosts=hosts)
         perform_action(args,host, hosts=hosts)
      elif not args['local_only']:
         if('remotebasepath' in host):
            remote_dir=host['remotebasepath']
@@ -319,19 +315,16 @@
         #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',''))
         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()):
            if(host['_conn']):
               host['_conn'].disconnect()
            host['_conn'].disconnect()