Пример #1
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
Пример #2
0
def remove_guacamole_server():
    session = DBSession()
    try:
        query = session.query(GuacamoleServerLoad)
        results = query.filter(GuacamoleServerLoad.server_load==0).all()
        for res in results:
            validate_remove_guacamole_server(res.guacamole_server,res.load_upper_bound)
    except Exception,e:
        print e
Пример #3
0
def index():
    user_id = session.get('user_id', None)
    if user_id:
        db = DBSession()
        blogs = db.query(Blog).filter(Blog.user_id == user_id).all()
    else:
        # res = ''
        return render_template('login.html')
    return render_template('blog/blog_list.html', result=blogs)
Пример #4
0
def remove_guacamole_server():
    session = DBSession()
    try:
        query = session.query(GuacamoleServerLoad)
        results = query.filter(GuacamoleServerLoad.server_load == 0).all()
        for res in results:
            validate_remove_guacamole_server(res.guacamole_server,
                                             res.load_upper_bound)
    except Exception, e:
        print e
Пример #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
Пример #6
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
Пример #7
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
Пример #8
0
def login():
    name = request.form.get('name', default=None)
    password = request.form.get('password', default=None)
    db = DBSession()
    user = db.query(User).filter(User.name == name,
                                 User.password == password).first()
    if user:
        db.close()
        session['name'] = name
        session['user_id'] = user.id
        # message = '用户名' + name + '登录成功'
        return redirect(url_for('blog.index'))
    else:
        message = '用户名或密码错误'
        res = {'name': name, 'age': 12, 'sex': '男', 'message': message}

        return render_template('login.html', result=res)
Пример #9
0
def reset_guacamole_client():
    session = DBSession()
    query = session.query(GuacamoleClientInfo)
    #If I can add another condition for query to lock with update, for example, query.filter(GuacamoleClientInfo.guacamole_client_host=='').filter.......
    #Then this process can be more fine-grained
    result = query.filter(GuacamoleClientInfo.status==1).filter(GuacamoleClientInfo.user_info!='').with_lockmode('update').all()
    if result==None:
        return
    cur_time = datetime.now()
    for res in result:
        seconds = __time_diff(cur_time,res.latest_active_timestamp)
        if seconds>=client_time_limit:
            guacamole_client_vm = res.guacamole_client_vm
            guacamole_client_host = res.guacamole_client_host
            image = res.image
            
            res.user_info = ''
            res.status = 0
            res.image = ''
            protocol = res.protocol
            guacamole_server = res.guacamole_server
            query = session.query(GuacamoleServerLoad)
            result = query.filter(GuacamoleServerLoad.guacamole_server == guacamole_server).with_lockmode('update').first()
            result = __server_protocol_update(protocol,-1,result)
            
            signal = containerservice.shutdown_container(guacamole_client_vm,int(guacamole_client_host[guacamole_client_host.index(':')+1:]),image)
            if signal==False:
                #Record this error
                pass
    session.commit()
    session.close()
Пример #10
0
def read_config(config_file):
    session = DBSession()
    tree = ElementTree()
    tree.parse(config_file)
    root = tree.getroot()
    server = root.attrib['name']
    server_vm = root.attrib['virtual_machine']
    protocals = root.getchildren()
    acnt = [0, 0, 0, 0]
    cur_datetime = datetime.now()
    t = []
    for protocal in protocals:
        pro_name = protocal.attrib['name']
        clients = protocal.getchildren()
        cnt = 0
        for client in clients:
            cnt += 1
            client_name = client.attrib['name']
            client_host = client[0].text
            client_vm = client[1].text
            guacamoleClientInfo = GuacamoleClientInfo('', '', server,
                                                      client_name, pro_name,
                                                      client_host, client_vm,
                                                      0, cur_datetime)
            #t.append(guacamoleClientInfo)
            session.add(guacamoleClientInfo)
        #session.commit()
        if pro_name == 'vnc':
            acnt[0] = cnt
        elif pro_name == 'vnc-read-only':
            acnt[1] = cnt
        elif pro_name == 'ssh':
            acnt[2] = cnt
        else:
            acnt[3] = cnt

    guacamoleServerLoad = GuacamoleServerLoad(server, server_vm, acnt[0],
                                              acnt[1], acnt[2], acnt[3],
                                              sum(acnt), cur_datetime, 0)
    #guacamoleServerLoad.guacamole_client_info = t
    session.add(guacamoleServerLoad)
    session.commit()
    session.close()
Пример #11
0
def read_config(config_file):
    session = DBSession()
    tree = ElementTree()
    tree.parse(config_file)
    root = tree.getroot()
    server = root.attrib["name"]
    server_vm = root.attrib["virtual_machine"]
    protocals = root.getchildren()
    acnt = [0, 0, 0, 0]
    cur_datetime = datetime.now()
    t = []
    for protocal in protocals:
        pro_name = protocal.attrib["name"]
        clients = protocal.getchildren()
        cnt = 0
        for client in clients:
            cnt += 1
            client_name = client.attrib["name"]
            client_host = client[0].text
            client_vm = client[1].text
            guacamoleClientInfo = GuacamoleClientInfo(
                "", "", server, client_name, pro_name, client_host, client_vm, 0, cur_datetime
            )
            # t.append(guacamoleClientInfo)
            session.add(guacamoleClientInfo)
        # session.commit()
        if pro_name == "vnc":
            acnt[0] = cnt
        elif pro_name == "vnc-read-only":
            acnt[1] = cnt
        elif pro_name == "ssh":
            acnt[2] = cnt
        else:
            acnt[3] = cnt

    guacamoleServerLoad = GuacamoleServerLoad(
        server, server_vm, acnt[0], acnt[1], acnt[2], acnt[3], sum(acnt), cur_datetime, 0
    )
    # guacamoleServerLoad.guacamole_client_info = t
    session.add(guacamoleServerLoad)
    session.commit()
    session.close()
Пример #12
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()
Пример #13
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()
Пример #14
0
def reset_guacamole_client():
    session = DBSession()
    query = session.query(GuacamoleClientInfo)
    #If I can add another condition for query to lock with update, for example, query.filter(GuacamoleClientInfo.guacamole_client_host=='').filter.......
    #Then this process can be more fine-grained
    result = query.filter(GuacamoleClientInfo.status == 1).filter(
        GuacamoleClientInfo.user_info != '').with_lockmode('update').all()
    if result == None:
        return
    cur_time = datetime.now()
    for res in result:
        seconds = __time_diff(cur_time, res.latest_active_timestamp)
        if seconds >= client_time_limit:
            guacamole_client_vm = res.guacamole_client_vm
            guacamole_client_host = res.guacamole_client_host
            image = res.image

            res.user_info = ''
            res.status = 0
            res.image = ''
            protocol = res.protocol
            guacamole_server = res.guacamole_server
            query = session.query(GuacamoleServerLoad)
            result = query.filter(
                GuacamoleServerLoad.guacamole_server ==
                guacamole_server).with_lockmode('update').first()
            result = __server_protocol_update(protocol, -1, result)

            signal = containerservice.shutdown_container(
                guacamole_client_vm,
                int(guacamole_client_host[guacamole_client_host.index(':') +
                                          1:]), image)
            if signal == False:
                #Record this error
                pass
    session.commit()
    session.close()
Пример #15
0
def get_user_list():
    db = DBSession()
    users = db.query(User).all()
    # 使用execute查询,返回的是一个元组集合,在页面可用user[下标获取]
    # ret = session.execute('SELECT user.id AS user_id, user.name AS user_name FROM user')
    return render_template('user/user_list.html', result=users)
Пример #16
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
Пример #17
0
def add_user():
    name = request.form.get('name', default=None)
    password = request.form.get('password', default=None)
    email = request.form.get('email', default=None)
    sex = request.form.get('sex', default=None)
    db = DBSession()
    u = db.query(User).filter(User.name == name).first()
    if u is not None:
        db.close()
        error_message = '用户名' + name + '已存在,请重新输入'
        res = {
            'code': 100,
            'message': error_message,
            'data': {
                'email': email,
                'name': name
            }
        }
        return render_template('user/register.html', result=res)
    else:
        user = User(id=get_uuid(),
                    name=name,
                    password=password,
                    email=email,
                    sex=sex,
                    create_time=datetime.now())
        db.add(user)
        db.commit()
        db.close()
        res = {'code': 200, 'message': 'success'}
        return render_template('login.html', result=res)
Пример #18
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