diff --git a/tes/__init__.py b/tes/__init__.py index 3c4ee04ab77b21fdbdb223b0690aa5efe8cb1f3f..927642f499735823bace0aadcc2541ca8a281f1e 100644 --- a/tes/__init__.py +++ b/tes/__init__.py @@ -9,7 +9,7 @@ app.config['LOCAL_DEV'] = False app.config['DEBUG'] = True app.config['SECRET_KEY'] = 'asdasfdfj' import datetime -app.config['PERMANENT_SESSION_LIFETIME'] = datetime.timedelta(seconds=300) +app.config['PERMANENT_SESSION_LIFETIME'] = datetime.timedelta(seconds=3600) app.config['SESSION_REFRESH_EACH_REQUEST'] = True app.config['SESSION_COOKIE_NAME'] = 'tessession' app.config['TWSPROXY'] = 'http://localhost:4000/' diff --git a/tes/apiendpoints.py b/tes/apiendpoints.py index 8832296c027a72be8fa82a7e52c0edc3a7861400..5794cca9d33296320bdffa3fad70b48685d7deba 100644 --- a/tes/apiendpoints.py +++ b/tes/apiendpoints.py @@ -110,15 +110,24 @@ def get_conn_params(): logger.debug('entering get_conn_params') identitystr = request.args.get('identity') identityparams = json.loads(identitystr) - interfacestr = request.args.get('interface') - interfaceparams = json.loads(interfacestr) + try: + interfacestr = request.args.get('interface') + interfaceparams = json.loads(interfacestr) + except: + interfaceparams = {} + pass + try: + pathstr = request.args.get('path') + pathparams = json.loads(pathstr) + cdstr = request.args.get('cd') + cdparams = json.loads(cdstr) + except: + pathparams = None + cdparams = None try: appstr = request.args.get('app') appparams = json.loads(appstr) except: - import traceback - logger.error('exception retrieving app params') - logger.error(traceback.format_exc()) appparams = {} params = {} @@ -129,6 +138,8 @@ def get_conn_params(): params.update(interfaceparams) params['user'] = identityparams['username'] params['host'] = identityparams['site']['host'] + params['path'] = pathparams + params['cd'] = cdparams logger.debug('leaving get_conn_params') @@ -193,9 +204,15 @@ class JobStat(Resource): """ import logging logger = logging.getLogger() - params = get_conn_params() - sshsess = SSHSession.get_sshsession() - sshsess.refresh() + try: + params = get_conn_params() + except: + flask_restful.abort(400, "connection parameters not correctly defined") + try: + sshsess = SSHSession.get_sshsession() + sshsess.refresh() + except: + flask_restful.abort(500, "Error relating to the ssh sessions") try: host = params['identity']['site']['host'] except (TypeError, KeyError) as e: @@ -216,13 +233,27 @@ class JobStat(Resource): if not (res['stderr'] == '' or res['stderr'] is None or res['stderr'] == b''): logger.error(res['stderr']) flask_restful.abort(400, message=res['stderr'].decode()) - jobs = json.loads(res['stdout'].decode()) + try: + jobs = json.loads(res['stdout'].decode()) - # Attach the identity information to the job before returning it - for j in jobs: - j['identity'] = params['identity'] + # Attach the identity information to the job before returning it + for j in jobs: + j['identity'] = params['identity'] - return jobs + return jobs + except Exception as e: + import traceback + logger.error(e) + logger.error(traceback.format_exc()) + flask_resful.abort(400, message=e) + +class DirList(Resource): + def get(self): + params = get_conn_params() + sshsess = SSHSession.get_sshsession() + dirls = Ssh.sftpls(sshsess, host=params['identity']['site']['host'], + user=params['identity']['username'], path=params['path'],changepath=params['cd']) + return dirls class JobCancel(Resource): """ @@ -252,8 +283,16 @@ class JobSubmit(Resource): params = get_conn_params() logger.debug('entering JobSubmit.post {}'.format(params)) sshsess = SSHSession.get_sshsession() + data = request.get_json() + logger.debug(data) + try: + script = data['app']['startscript'].format(**data) + except: + flask_restful.abort(400,message='Incomplete job information was passed to the backend.') + logger.debug('script formated to {}'.format(script)) + res = Ssh.execute(sshsess, host=params['identity']['site']['host'], user=params['identity']['username'], - cmd=params['interface']['submitcmd'], stdin=params['app']['startscript']) + cmd=params['interface']['submitcmd'], stdin=script) if not (res['stderr'] == '' or res['stderr'] is None or res['stderr'] == b''): logger.debug('failed to submit job') logger.debug(res['stderr']) @@ -393,3 +432,4 @@ api.add_resource(JobConnect, '/connect/<int:jobid>/<string:batchhost>') # api.add_resource(SessionTest,'/sesstest') #api.add_resource(StartAgent,'/startagent') api.add_resource(SSHAgent,'/sshagent') +api.add_resource(DirList,'/ls')