def list_sessions(cls, request): """ List all session :param : request: request containing the launching parameters of the rendering resource :rtype : An HTTP response containing on ok status or a description of the error """ sm = session_manager.SessionManager() status = sm.list_sessions(SessionSerializer) return HttpResponse(status=status[0], content=status[1])
def get_session(cls, request, pk): """ Retrieves a user session :param : request: The REST request :rtype : A Json response containing on ok status or a description of the error """ sm = session_manager.SessionManager() status = sm.get_session(pk, request, SessionSerializer) return HttpResponse(status=status[0], content=status[1])
def execute(cls, request, command): """ Executes a command on the rendering resource :param : request: The REST request :param : command: Command to be executed on the rendering resource :rtype : A Json response containing on ok status or a description of the error """ # pylint: disable=R0912 try: session_id = session_manager.SessionManager( ).get_session_id_from_request(request) log.debug( 1, 'Processing command <' + command + '> for session ' + str(session_id)) session = Session.objects.get(id=session_id) response = None if command == 'schedule': response = cls.__schedule_job(session, request) elif command == 'open': response = cls.__open_process(session, request) elif command == 'status': status = cls.__session_status(session) response = HttpResponse(status=status[0], content=status[1]) elif command == 'log': status = cls.__rendering_resource_out_log(session) response = HttpResponse(status=status[0], content=status[1]) elif command == 'err': status = cls.__rendering_resource_err_log(session) response = HttpResponse(status=status[0], content=status[1]) elif command == 'job': status = cls.__job_information(session) response = HttpResponse(status=status[0], content=status[1]) elif command == 'imagefeed': status = cls.__image_feed(session_id) response = HttpResponse(status=status[0], content=status[1]) else: url = request.get_full_path() prefix = settings.BASE_URL_PREFIX + '/session/' cmd = url[url.find(prefix) + len(prefix) + 1:len(url)] response = cls.__forward_request(session, cmd, request) return response except (KeyError, TypeError) as e: log.debug(1, str(traceback.format_exc(e))) response = json.dumps({'contents': 'Cookie is missing'}) return HttpResponse(status=404, content=response) except Session.DoesNotExist as e: log.debug(1, str(traceback.format_exc(e))) response = json.dumps({'contents': 'Session does not exist'}) return HttpResponse(status=404, content=response) except Exception as e: msg = traceback.format_exc(e) log.error(str(msg)) response = json.dumps({'contents': str(msg)}) return HttpResponse(status=500, content=response)
def destroy_session(cls, request): """ Stops the renderer and destroys the user session :param : request: The REST request :rtype : An HTTP response containing on ok status or a description of the error """ sm = session_manager.SessionManager() session_id = sm.get_session_id_from_request(request) log.info(1, 'Remove image feed route if it exists') ifm = image_feed_manager.ImageFeedManager(session_id) status = ifm.remove_route() if status[0] != 200: log.error(status[1]) log.info(1, 'Remove session from db') status = sm.delete_session(session_id) log.info(1, 'Session deleted ' + str(session_id)) return HttpResponse(status=status[0], content=status[1])
def __verify_hostname(cls, session): """ Verify the existence of an hostname for the current session, and tries to populate it if null :param : session: Session holding the rendering resource """ log.info( 1, 'Verifying hostname ' + session.http_host + ' for session ' + str(session.id)) if not session.status == SESSION_STATUS_GETTING_HOSTNAME and \ session.job_id and session.http_host == '': session.status = SESSION_STATUS_GETTING_HOSTNAME session.save() log.info( 1, 'Querying JOB hostname for job id: ' + str(session.job_id)) hostname = job_manager.globalJobManager.hostname(session) if hostname == '': msg = 'Job scheduled but ' + session.renderer_id + ' is not yet running' log.error(msg) session.status = SESSION_STATUS_SCHEDULED session.save() response = json.dumps({'contents': str(msg)}) return [404, response] elif hostname == 'FAILED': sm = session_manager.SessionManager() sm.delete_session(session.id) msg = 'Job as been cancelled' log.error(msg) response = json.dumps({'contents': str(msg)}) return [404, response] else: session.http_host = hostname session.save() msg = 'Resolved hostname for job ' + str(session.job_id) + ' to ' + \ str(session.http_host) log.info(1, msg) response = json.dumps({'contents': str(msg)}) return [200, response] response = json.dumps( {'contents': str('Job is running on host ' + session.http_host)}) return [200, response]
def create_session(cls, request): """ Creates a user session :param : request: request containing the launching parameters of the rendering resource :rtype : An HTTP response containing on ok status or a description of the error """ sm = session_manager.SessionManager() # Create new session ID session_id = sm.get_session_id() try: status = sm.create_session(session_id, request.DATA['owner'], request.DATA['renderer_id']) response = HttpResponse(status=status[0], content=json.dumps( {'session_id': str(session_id)})) log.info(1, 'Session created ' + str(session_id)) return response except KeyError as e: return HttpResponse(status=401, content=str(e)) else: return HttpResponse(status=401, content='Unexpected exception')