Ejemplo n.º 1
0
def get_guacamole_client(client_id, image,protocol,mylog):
    session = DBSession()
    guacamole_client = None
    try:
        query = session.query(GuacamoleClientInfo) 
        result = query.filter(GuacamoleClientInfo.user_info == client_id).filter(GuacamoleClientInfo.image == image).with_lockmode('update').first()
        if result != None:
            if result.status == 0:
                result.status = 1
            result.latest_active_timestamp = str(datetime.now())
            guacamole_server = result.guacamole_server
            guacamole_client_name = result.guacamole_client_name
            guacamole_client = guacamole_server+'client.xhtml?id=c/'+guacamole_client_name
            session.commit()
        else:
            session.commit()
            res = establish_guacamole_client(session,client_id, image,protocol)
            if res != None:
                guacamole_client = res
            else:
                create_guacamole_server(session,client_id, image,protocol)
                guacamole_client = get_guacamole_client(client_id, image,protocol,mylog)
    except Exception,e:
        session.rollback()
        print e
Ejemplo n.º 2
0
def cancel_guacamole_client(client_id,image,protocol=None):
    session = DBSession()
    guacamole_client_host = None
    guacamole_client_vm = None
    try:
        query = session.query(GuacamoleClientInfo)
        result = query.filter(GuacamoleClientInfo.user_info == client_id).filter(GuacamoleClientInfo.image == image).filter(GuacamoleClientInfo.protocol == protocol).with_lockmode('update').first()
        if result != None:               
            result.user_info = ''
            result.image = ''
            result.status = 0
            guacamole_server = result.guacamole_server
            guacamole_client_host = result.guacamole_client_host
            guacamole_client_vm = result.guacamole_client_vm
            
            query = session.query(GuacamoleServerLoad)
            result = query.filter(GuacamoleServerLoad.guacamole_server==guacamole_server).with_lockmode('update').first()
            if result==None:
                pass
            
            result = server_protocol_update(protocol, -1 , result)
            session.commit()
    except:
        print 'cancel a guacamole client failed...'
        session.rollback()
    finally:
        session.close()
        return guacamole_client_host,guacamole_client_vm
Ejemplo n.º 3
0
def validate_remove_guacamole_server(guacamole_server, load_upper_bound):
    session = DBSession()
    try:
        query = session.query(GuacamoleClientInfo)
        results = query.filter(
            GuacamoleClientInfo.guacamole_server == guacamole_server).filter(
                GuacamoleClientInfo.status == 0).with_lockmode('update').all()
        if len(results) < load_upper_bound:
            raise Exception
        cur_time = datetime.now()

        for res in results:
            cur_diff = __time_diff(cur_time, res.latest_active_timestamp)
            if cur_diff < server_time_limit:
                raise Exception
        for res in results:
            session.delete(res)
        query = session.query(GuacamoleServerLoad)
        server = query.filter(
            GuacamoleServerLoad.guacamole_server ==
            guacamole_server).with_lockmode('update').first()
        session.delete(server)
        session.commit()
        return True
    except Exception, e:
        print e
        session.rollback()
        return False
Ejemplo n.º 4
0
def get_guacamole_client(client_id, image, protocol, mylog):
    session = DBSession()
    guacamole_client = None
    try:
        query = session.query(GuacamoleClientInfo)
        result = query.filter(
            GuacamoleClientInfo.user_info == client_id).filter(
                GuacamoleClientInfo.image == image).with_lockmode(
                    'update').first()
        if result != None:
            if result.status == 0:
                result.status = 1
            result.latest_active_timestamp = str(datetime.now())
            guacamole_server = result.guacamole_server
            guacamole_client_name = result.guacamole_client_name
            guacamole_client = guacamole_server + 'client.xhtml?id=c/' + guacamole_client_name
            session.commit()
        else:
            session.commit()
            res = establish_guacamole_client(session, client_id, image,
                                             protocol)
            if res != None:
                guacamole_client = res
            else:
                create_guacamole_server(session, client_id, image, protocol)
                guacamole_client = get_guacamole_client(
                    client_id, image, protocol, mylog)
    except Exception, e:
        session.rollback()
        print e
Ejemplo n.º 5
0
def cancel_guacamole_client(client_id, image, protocol=None):
    session = DBSession()
    guacamole_client_host = None
    guacamole_client_vm = None
    try:
        query = session.query(GuacamoleClientInfo)
        result = query.filter(
            GuacamoleClientInfo.user_info == client_id).filter(
                GuacamoleClientInfo.image == image).filter(
                    GuacamoleClientInfo.protocol == protocol).with_lockmode(
                        'update').first()
        if result != None:
            result.user_info = ''
            result.image = ''
            result.status = 0
            guacamole_server = result.guacamole_server
            guacamole_client_host = result.guacamole_client_host
            guacamole_client_vm = result.guacamole_client_vm

            query = session.query(GuacamoleServerLoad)
            result = query.filter(
                GuacamoleServerLoad.guacamole_server ==
                guacamole_server).with_lockmode('update').first()
            if result == None:
                pass

            result = server_protocol_update(protocol, -1, result)
            session.commit()
    except:
        print 'cancel a guacamole client failed...'
        session.rollback()
    finally:
        session.close()
        return guacamole_client_host, guacamole_client_vm
Ejemplo n.º 6
0
def heart_beat(client_id, image):
    """Receive heart beat signal
    
    When a heart beat signal is received, the latest_active_timestamp of the record in database is updated
    """
    session = DBSession()
    try:
        query = session.query(GuacamoleClientInfo) 
        result = query.filter(GuacamoleClientInfo.user_info == client_id).filter(GuacamoleClientInfo.image == image).with_lockmode('update').first()
        if result != None:
            result.status = 1
            result.latest_active_timestamp = str(datetime.now())
        session.commit()
    except Exception:
        session.rollback()
    finally:
        session.close()
Ejemplo n.º 7
0
def heart_beat(client_id, image):
    """Receive heart beat signal
    
    When a heart beat signal is received, the latest_active_timestamp of the record in database is updated
    """
    session = DBSession()
    try:
        query = session.query(GuacamoleClientInfo)
        result = query.filter(
            GuacamoleClientInfo.user_info == client_id).filter(
                GuacamoleClientInfo.image == image).with_lockmode(
                    'update').first()
        if result != None:
            result.status = 1
            result.latest_active_timestamp = str(datetime.now())
        session.commit()
    except Exception:
        session.rollback()
    finally:
        session.close()
Ejemplo n.º 8
0
def validate_remove_guacamole_server(guacamole_server,load_upper_bound):
    session = DBSession()
    try:
        query = session.query(GuacamoleClientInfo)
        results = query.filter(GuacamoleClientInfo.guacamole_server==guacamole_server).filter(GuacamoleClientInfo.status==0).with_lockmode('update').all()
        if len(results)<load_upper_bound:
            raise Exception
        cur_time = datetime.now()
        
        for res in results:
            cur_diff = __time_diff(cur_time, res.latest_active_timestamp)
            if cur_diff<server_time_limit: 
                raise Exception    
        for res in results:
            session.delete(res)
        query = session.query(GuacamoleServerLoad)
        server = query.filter(GuacamoleServerLoad.guacamole_server==guacamole_server).with_lockmode('update').first()
        session.delete(server)
        session.commit()
        return True
    except Exception,e:
        print e
        session.rollback()
        return False