def grace_close_timeout(agent_id, user, timeout=120): try: time.sleep(timeout) res, session = ra.session_exist(agent_id) if res: status = session[0] if status == ra.Status.Timeout: ra.db.edit_connection(agent_id=agent_id, status=ra.Status.Closing) remove_session(agent_id, user) else: logger.info('Session found for agent %s' % agent_id) logger.info("No longer under 'timeout' status. Nothing to do.") else: logger.info('No session found for agent %s' % agent_id) logger.info('Nothing to do.') except Exception as e: logger.error('Unable to close session from timeout thread.') logger.exception(e)
def grace_close_timeout(agent_id, user, timeout=120): try: time.sleep(timeout) res, session = ra.session_exist(agent_id) if res: status = session[0] if status == ra.Status.Timeout: ra.db.edit_connection( agent_id=agent_id, status=ra.Status.Closing ) remove_session(agent_id, user) else: logger.info('Session found for agent %s' % agent_id) logger.info("No longer under 'timeout' status. Nothing to do.") else: logger.info('No session found for agent %s' % agent_id) logger.info('Nothing to do.') except Exception as e: logger.error('Unable to close session from timeout thread.') logger.exception(e)
def terminate_rd_session( agent_id=None, user=Default.User, customer=Default.Customer ): if not agent_id: return { 'pass': False, 'message': 'No agent id was provided.' } res, session = ra.session_exist(agent_id) if res: status, web_port = session if status == ra.Status.Waiting: return { 'pass': False, 'message': ( 'Session still waiting for agent to respond.' ), ra.RaKey.Status: status } if status == ra.Status.Timeout: return { 'pass': False, 'message': ( 'Session already in the process to be closed.' ), ra.RaKey.Status: status, } return set_session_to_timeout(agent_id, user) else: message = "Could not find session for agent %s." % agent_id logger.error(message) return { 'pass': False, 'message': message, 'error': "Session not found." }
def terminate_rd_session(agent_id=None, user=Default.User, customer=Default.Customer): if not agent_id: return {'pass': False, 'message': 'No agent id was provided.'} res, session = ra.session_exist(agent_id) if res: status, web_port = session if status == ra.Status.Waiting: return { 'pass': False, 'message': ('Session still waiting for agent to respond.'), ra.RaKey.Status: status } if status == ra.Status.Timeout: return { 'pass': False, 'message': ('Session already in the process to be closed.'), ra.RaKey.Status: status, } return set_session_to_timeout(agent_id, user) else: message = "Could not find session for agent %s." % agent_id logger.error(message) return { 'pass': False, 'message': message, 'error': "Session not found." }
def new_rd_session(agent_id=None, user=Default.User, customer=Default.Customer): if not agent_id: return {'pass': False, 'message': 'No agent id was provided.'} res, session = ra.session_exist(agent_id) if res: status, web_port = session if status == ra.Status.Waiting: return { 'pass': False, 'message': ('Session exist for this agent. Waiting for response.'), ra.RaKey.Status: status } host = ra.get_hostname() uri = ra.create_vnc_uri(host, web_port) if status == ra.Status.Ready: return { 'pass': False, 'message': ('Session exist for this agent. Using session.'), ra.RaKey.Status: status, ra.RaKey.WebPort: web_port, ra.RaKey.Hostname: host, ra.RaKey.Uri: uri } if status == ra.Status.Timeout: ra.db.edit_connection(agent_id=agent_id, status=ra.Status.Ready) return { 'pass': False, 'message': ('Session exist for this agent. Reusing.'), ra.RaKey.Status: status, ra.RaKey.WebPort: web_port, ra.RaKey.Hostname: host, ra.RaKey.Uri: uri } if status == ra.Status.Closing: return { 'pass': False, 'message': ('Session exist but is being closed.' 'Please try again in a few seconds.'), ra.RaKey.Status: status, } operation = RaOperation(ra.RaValue.RemoteDesktop, agent_id, username=user, customer=customer, uri=ra.RaUri.StartRemoteDesktop % agent_id, method='POST') port = None tunnel_needed = True if tunnel_needed: params = None port_range = list(ra.PortRange) for p in ra.PortRange: params = reverse_tunnel_params(port_range) if ra.db.port_available(port=params[TunnelKey.HostPort]): break port_range.remove(p) params = None if params: port = params[TunnelKey.HostPort] ssh_port = params[TunnelKey.SSHPort] operation.set_tunnel(host_port=port, ssh_port=ssh_port) else: return { 'pass': False, 'message': "Could not resolve host port for tunnel." } operation_id = save_operation(operation) if operation_id: result, msg = ra.db.save_connection(agent_id=agent_id, host_port=port, status=ra.Status.Waiting) if result: operation.operation_id = operation_id ra.add_feedback(agent_id, ra.Status.Waiting) store_in_agent_queue(operation) return { 'pass': True, 'message': 'Remote desktop created. Waiting...' } else: return {'pass': False, 'message': msg} else: return { 'pass': False, 'message': "Unable to save operation. Invalid operation ID." }
def new_rd_session( agent_id=None, user=Default.User, customer=Default.Customer ): if not agent_id: return { 'pass': False, 'message': 'No agent id was provided.' } res, session = ra.session_exist(agent_id) if res: status, web_port = session if status == ra.Status.Waiting: return { 'pass': False, 'message': ( 'Session exist for this agent. Waiting for response.' ), ra.RaKey.Status: status } host = ra.get_hostname() uri = ra.create_vnc_uri(host, web_port) if status == ra.Status.Ready: return { 'pass': False, 'message': ( 'Session exist for this agent. Using session.' ), ra.RaKey.Status: status, ra.RaKey.WebPort: web_port, ra.RaKey.Hostname: host, ra.RaKey.Uri: uri } if status == ra.Status.Timeout: ra.db.edit_connection( agent_id=agent_id, status=ra.Status.Ready ) return { 'pass': False, 'message': ( 'Session exist for this agent. Reusing.' ), ra.RaKey.Status: status, ra.RaKey.WebPort: web_port, ra.RaKey.Hostname: host, ra.RaKey.Uri: uri } if status == ra.Status.Closing: return { 'pass': False, 'message': ( 'Session exist but is being closed.' 'Please try again in a few seconds.' ), ra.RaKey.Status: status, } operation = RaOperation( ra.RaValue.RemoteDesktop, agent_id, username=user, customer=customer, uri=ra.RaUri.StartRemoteDesktop % agent_id, method='POST' ) port = None tunnel_needed = True if tunnel_needed: params = None port_range = list(ra.PortRange) for p in ra.PortRange: params = reverse_tunnel_params(port_range) if ra.db.port_available( port=params[TunnelKey.HostPort] ): break port_range.remove(p) params = None if params: port = params[TunnelKey.HostPort] ssh_port = params[TunnelKey.SSHPort] operation.set_tunnel(host_port=port, ssh_port=ssh_port) else: return { 'pass': False, 'message': "Could not resolve host port for tunnel." } operation_id = save_operation(operation) if operation_id: result, msg = ra.db.save_connection( agent_id=agent_id, host_port=port, status=ra.Status.Waiting ) if result: operation.operation_id = operation_id ra.add_feedback(agent_id, ra.Status.Waiting) store_in_agent_queue(operation) return { 'pass': True, 'message': 'Remote desktop created. Waiting...' } else: return { 'pass': False, 'message': msg } else: return { 'pass': False, 'message': "Unable to save operation. Invalid operation ID." }