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
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
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
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
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
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()
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()
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