Beispiel #1
0
 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])
Beispiel #2
0
 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])
Beispiel #3
0
    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)
Beispiel #4
0
 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])
Beispiel #5
0
 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]
Beispiel #6
0
 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')