コード例 #1
0
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)
コード例 #2
0
ファイル: creator.py プロジェクト: akaasjager/vFense
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)
コード例 #3
0
ファイル: creator.py プロジェクト: akaasjager/vFense
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."
        }
コード例 #4
0
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."
        }
コード例 #5
0
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."
        }
コード例 #6
0
ファイル: creator.py プロジェクト: akaasjager/vFense
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."
        }