def getStatus(self, db_session: Session, session: str, startMessage: int, getNodes: bool) -> AddHostStatus: """ Raises: NotFound """ with self._addHostLock: nodeList = self._nodeDbApi.getNodesByAddHostSession( db_session, session) if getNodes else TortugaObjectList() # Lock and copy for data consistency if not self._sessions.exists(session): raise NotFound('Invalid add host session ID [%s]' % (session)) session = self._sessions.get(session) status_copy = AddHostStatus() # Copy simple data status = AddHostStatus.getFromDict(session['status']) for key in status.getKeys(): status_copy.set(key, status.get(key)) # Get slice of status messages messages = status.getMessageList()[startMessage:] status_copy.setMessageList(messages) if nodeList: status_copy.getNodeList().extend(nodeList) return status_copy
def getStatus(self, session=None, startMessage=0, getNodes=False): """ Get the status of addhost...if session is non-none get info for that session only. Startmessage controls the number of removed from the start of the server side message list. If getNodes is true also include the nodes for this session. Returns: AddHostStatus object Throws: TortugaException """ url = self._buildUrl('v1/addhost/%s/status' % (session)) # Add query parameters url += '?startMessage={0}&getNodes={1}'.format( startMessage, str(getNodes)) try: _, responseDict = self.sendSessionRequest(url) return AddHostStatus.getFromDict(responseDict.get("addhoststatus")) except TortugaException: raise except Exception as ex: raise TortugaException(exception=ex)
def update_session(self, session_id: str, running: Optional[bool] = None): self.getLogger().debug( 'Updating add host session [%s] (status: running=%s)' % (session_id, str(running))) with self._addHostLock: session = self._sessions.get(session_id) status = AddHostStatus.getFromDict(session['status']) session['status'] = status.getCleanDict() self._sessions.set(session_id, session)
def createNewSession(self) -> str: self.getLogger().debug('createNewSession()') with self._addHostLock: # Create new add nodes session session_id = str(uuid.uuid4()) self._sessions.set(session_id, {'status': AddHostStatus().getCleanDict()}) return session_id
def createNewSession(self) -> str: self.getLogger().debug('createNewSession()') with self._addHostLock: # Create new add nodes session session_id = str(uuid.uuid4()) self._sessions[session_id] = { 'status': AddHostStatus(), } return session_id
def updateStatus(self, addHostSession: str, msg: str) -> None: self._addHostLock.acquire() try: if not self._sessions.exists(addHostSession): self.getLogger().warning( 'updateStatus(): unknown session ID [%s]' % (addHostSession)) return addHostStatus = AddHostStatus.getFromDict( self._sessions.get(addHostSession)['status']) addHostStatus.getMessageList().append(msg) finally: self._addHostLock.release()
def getStatus(self, session, startMessage, getNodes): """ Raises: NotFound """ statusCopy = AddHostStatus() self._addHostLock.acquire() try: if getNodes and session is not None and \ self._nodeDbApi is not None: nodeList = self._nodeDbApi.getNodesByAddHostSession(session) else: nodeList = TortugaObjectList() # Lock and copy for data consistency if session not in self._sessions: raise NotFound('Invalid add host session ID [%s]' % (session)) sessionDict = self._sessions.get(session) # Copy simple data for key in sessionDict['status'].getKeys(): statusCopy.set(key, sessionDict['status'].get(key)) # Get slice of status messages messages = sessionDict['status'].getMessageList()[startMessage:] statusCopy.setMessageList(messages) statusCopy.getNodeList().extend(nodeList) return statusCopy finally: self._addHostLock.release()