Commit 35cdede9 authored by Stefano Alberto Russo's avatar Stefano Alberto Russo
Browse files

Fixed issue in checking task interface status on the connect view.

parent 15054114
Loading
Loading
Loading
Loading
+31 −17
Original line number Original line Diff line number Diff line
@@ -1133,27 +1133,41 @@ def task_connect(request):
    # Ensure that the tunnel and proxy are set up
    # Ensure that the tunnel and proxy are set up
    setup_tunnel_and_proxy(task)
    setup_tunnel_and_proxy(task)
    
    
    # Set default interface status as unknown
    task.interface_status = 'unknown'

    # Check if task interface is up
    # Check if task interface is up
    if task.status == 'running':
    if task.status == 'running':

        logger.debug('Checking if task interface is running by trying to establish connection via local tunnel on port "{}"'.format(task.tcp_tunnel_port))
        logger.debug('Checking if task interface is running by trying to establish connection via local tunnel on port "{}"'.format(task.tcp_tunnel_port))
        s = socket.socket()

        if task.container.interface_protocol.startswith('http'):
            try:
            try:
            s.settimeout(1)
                if task.requires_tcp_tunnel:
            s.connect(('127.0.0.1', task.tcp_tunnel_port))
                    requests.get('{}://localhost:{}'.format(task.container.interface_protocol, task.tcp_tunnel_port), timeout=3)
            # Not necessary, we just check that the container interfcae is up
            #if not s.recv(10):
            #    logger.debug('No data read from socket')
            #    raise Exception('Could not read any data from socket')
        except Exception:
            logger.debug('Could not connect to task interface')
            task.interface_status = 'unknown'
                else:
                else:
            logger.debug('task interface is answering')
                    requests.get('{}://{}:{}'.format(task.container.interface_protocol, task.interface_ip, task.interface_port), timeout=3)
                logger.debug('Task interface is answering')
                task.interface_status = 'running'
                task.interface_status = 'running'
        finally:
            except Exception as e:
            s.close()
                logger.debug('Could not connect to task interface ({})'.format(e))

        else:
        else:
        task.interface_status = 'unknown'
            pass
            # # TODO: the following raises a TimeoutError even if the connection is active and with requests work. Why?
            # with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            #     s.settimeout(3)
            #     try:
            #         s.connect(('localhost', task.tcp_tunnel_port))
            #         if not s.recv(10):
            #             logger.debug('No data read from socket')
            #             raise Exception('Could not read any data from socket')
            #     except Exception as e:
            #         logger.debug('Could not connect to task interface via socket ({})'.format(e))
            #         task.interface_status = 'unknown'
            #     else:
            #         logger.debug('Task interface is answering via socket')
            #         task.interface_status = 'running'


    data ={}
    data ={}
    data['task'] = task
    data['task'] = task