From 1cf51eaae7a6b154305847af2edbe55cbdfaa062 Mon Sep 17 00:00:00 2001 From: Loic Baron Date: Thu, 18 Dec 2014 15:19:46 +0100 Subject: [PATCH] myslice prefixed queries to speed up the portal --- manifoldapi/manifoldproxy.py | 1 + portal/actions.py | 37 ++++++++++++++----- portal/registrationview.py | 8 +++- portal/static/js/myslice.js | 31 +++++++++++++++- .../fed4fire/fed4fire_home-view.html | 23 +----------- portal/templates/onelab/onelab_home-view.html | 24 +----------- ui/topmenu.py | 4 +- 7 files changed, 69 insertions(+), 59 deletions(-) diff --git a/manifoldapi/manifoldproxy.py b/manifoldapi/manifoldproxy.py index 9897b506..9385bfa3 100644 --- a/manifoldapi/manifoldproxy.py +++ b/manifoldapi/manifoldproxy.py @@ -59,6 +59,7 @@ with the query passed using POST""" manifold_api_session_auth = {'AuthMethod': 'password', 'Username': admin_user, 'AuthString': admin_password} else: if 'manifold' in request.session: + print '===> manifoldproxy.proxy: before auth', manifold_query manifold_api_session_auth = request.session['manifold']['auth'] else: json_answer=json.dumps({'code':0,'value':[]}) diff --git a/portal/actions.py b/portal/actions.py index d9346714..7bd41433 100644 --- a/portal/actions.py +++ b/portal/actions.py @@ -25,6 +25,8 @@ import activity.slice # Get the list of authorities def authority_get_pis(request, authority_hrn): + + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 query = Query.get('authority').filter_by('authority_hrn', '==', authority_hrn).select('pi_users') results = execute_admin_query(request, query) print "authority_get_pis = %s" % results @@ -49,7 +51,9 @@ def authority_get_pi_emails(request, authority_hrn): return ['support@onelab.eu'] else: pi_user_hrns = [ hrn for x in pi_users for hrn in x['pi_users'] ] - query = Query.get('user').filter_by('user_hrn', 'included', pi_user_hrns).select('user_email') + + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 + query = Query.get('myslice:user').filter_by('user_hrn', 'included', pi_user_hrns).select('user_email') results = execute_admin_query(request, query) return [result['user_email'] for result in results] @@ -95,8 +99,10 @@ def clear_user_creds(request, user_email): def is_pi(wsgi_request, user_hrn, authority_hrn): # XXX could be done in a single query ! - # select pi_authorities from user where user_hrn == "ple.upmc.jordan_auge" - query = Query.get('user').filter_by('user_hrn', '==', user_hrn).select('pi_authorities') + # seauthorities from user where user_hrn == "ple.upmc.jordan_auge" + + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 + query = Query.get('myslice:user').filter_by('user_hrn', '==', user_hrn).select('pi_authorities') results = execute_admin_query(wsgi_request, query) if not results: # XXX Warning ? @@ -108,7 +114,9 @@ def is_pi(wsgi_request, user_hrn, authority_hrn): # SFA get record def sfa_get_user(request, user_hrn, pub): - query_sfa_user = Query.get('user').filter_by('user_hrn', '==', user_hrn) + + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 + query_sfa_user = Query.get('myslice:user').filter_by('user_hrn', '==', user_hrn) result_sfa_user = execute_admin_query(request, query_sfa_user) return result_sfa_user @@ -116,11 +124,15 @@ def sfa_update_user(request, user_hrn, user_params): # user_params: keys [public_key] if 'email' in user_params: user_params['user_email'] = user_params['email'] - query = Query.update('user').filter_by('user_hrn', '==', user_hrn).set(user_params).select('user_hrn') + + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 + query = Query.update('myslice:user').filter_by('user_hrn', '==', user_hrn).set(user_params).select('user_hrn') results = execute_admin_query(request,query) return results def sfa_add_authority(request, authority_params): + + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 query = Query.create('authority').set(authority_params).select('authority_hrn') results = execute_query(request, query) print "sfa_add_auth results=",results @@ -130,10 +142,14 @@ def sfa_add_authority(request, authority_params): def sfa_add_user_to_slice(request, user_hrn, slice_params): # UPDATE myslice:slice SET researcher=['ple.upmc.jordan_auge','ple.inria.thierry_parmentelat','ple.upmc.loic_baron','ple.upmc.ciro_scognamiglio','ple.upmc.mohammed-yasin_rahman','ple.upmc.azerty'] where slice_hrn=='ple.upmc.myslicedemo' - query_current_users = Query.get('slice').select('user').filter_by('slice_hrn','==',slice_params['hrn']) + + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 + query_current_users = Query.get('myslice:slice').select('user').filter_by('slice_hrn','==',slice_params['hrn']) results_current_users = execute_query(request, query_current_users) slice_params['researcher'] = slice_params['researcher'] | results_current_users - query = Query.update('slice').filter_by('user_hrn', '==', user_hrn).set(slice_params).select('slice_hrn') + + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 + query = Query.update('myslice:slice').filter_by('user_hrn', '==', user_hrn).set(slice_params).select('slice_hrn') results = execute_query(request, query) # Also possible but not supported yet # UPDATE myslice:user SET slice=['ple.upmc.agent','ple.upmc.myslicedemo','ple.upmc.tophat'] where user_hrn=='ple.upmc.azerty' @@ -590,7 +606,8 @@ def create_slice(wsgi_request, request): user_hrn = request.get('user_hrn', None) user_hrns = list([user_hrn]) if user_hrn else list() - user_query = Query().get('user').select('user_hrn','user_email').filter_by('user_hrn','==',user_hrn) + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 + user_query = Query().get('myslice:user').select('user_hrn','user_email').filter_by('user_hrn','==',user_hrn) user_details_sfa = execute_admin_query(wsgi_request, user_query) if not user_details_sfa: raise Exception, "User %s doesn't exist, validate user before validating slice" % user_hrn @@ -612,6 +629,7 @@ def create_slice(wsgi_request, request): } # ignored in request: id, timestamp, number_of_nodes, type_of_nodes, purpose + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 query = Query.create('myslice:slice').set(slice_params).select('slice_hrn') results = execute_query(wsgi_request, query) if not results: @@ -752,7 +770,8 @@ def sfa_create_user(wsgi_request, request, namespace = None, as_admin = False): if namespace is not None: query = Query.create('%s:user' % namespace).set(sfa_user_params).select('user_hrn') else: - query = Query.create('user').set(sfa_user_params).select('user_hrn') + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 + query = Query.create('myslice:user').set(sfa_user_params).select('user_hrn') if as_admin: results = execute_admin_query(wsgi_request, query) diff --git a/portal/registrationview.py b/portal/registrationview.py index e55e30fd..353f534d 100644 --- a/portal/registrationview.py +++ b/portal/registrationview.py @@ -41,6 +41,7 @@ class RegistrationView (FreeAccessView, ThemeView): """ errors = [] authority_hrn = None + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 authorities_query = Query.get('authority').select('name', 'authority_hrn') authorities = execute_admin_query(wsgi_request, authorities_query) if authorities is not None: @@ -52,6 +53,7 @@ class RegistrationView (FreeAccessView, ThemeView): page.add_js_files ( [ "js/jquery.validate.js", "js/my_account.register.js", "js/jquery.qtip.min.js","js/jquery-ui.js" ] ) page.add_css_files ( [ "css/onelab.css", "css/registration.css", "css/jquery.qtip.min.css" ] ) page.add_css_files ( [ "https://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" ] ) + page.expose_js_metadata() print "############ BREAKPOINT 2 #################" if method == 'POST': reg_form = {} @@ -116,7 +118,9 @@ class RegistrationView (FreeAccessView, ThemeView): # Does the user exist in sfa? [query is very slow!!] #user_query = Query().get('user').select('user_hrn','user_email') # XXX Test based on the user_hrn is quick - user_query = Query().get('user').select('user_hrn','user_email').filter_by('user_hrn','==',user_request['user_hrn']) + + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 + user_query = Query().get('myslice:user').select('user_hrn','user_email').filter_by('user_hrn','==',user_request['user_hrn']) user_details_sfa = execute_admin_query(wsgi_request, user_query) for user in user_details_sfa: @@ -191,7 +195,7 @@ class RegistrationView (FreeAccessView, ThemeView): print "############ BREAKPOINT B #################" template_env = { - 'topmenu_items': topmenu_items_live('Register', page), + #'topmenu_items': topmenu_items_live('Register', page), 'errors': errors, 'authorities': authorities, 'theme': self.theme diff --git a/portal/static/js/myslice.js b/portal/static/js/myslice.js index d9593af7..85c7ac8b 100644 --- a/portal/static/js/myslice.js +++ b/portal/static/js/myslice.js @@ -114,17 +114,44 @@ var myslice = { } return this.user; }, + loadSlices: function(slices) { + if (typeof(slices) == "undefined"){ + if(myslice.user != null && typeof(myslice.user.slices) != "undefined" && myslice.user.slices.length>0){ + slices == myslice.user.slices + } + } + // myslice.user is in LocalStorage + if(typeof(slices) != "undefined"){ + /* + Launch queries to get the resources and leases in Manifold Cache + */ + $.post("/rest/resource/", function( data ) { + }); + $.post("/rest/lease/", function( data ) { + }); + + $.each( slices, function(i, val) { + /* + Launch a Query for each slice to get resources and leases in Manifold Cache + */ + $.post("/rest/slice/", { 'filters': { 'slice_hrn' : val } }, function(data) { + }); + }); + } + + }, login: function(fn) { user = localStorage.getItem('user'); if($.isEmptyObject(user)){ - $.post("/rest/user/",{'filters':{'user_hrn':'$user_hrn'}}, function( data ) { + // REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 + $.post("/rest/myslice:user/",{'filters':{'user_hrn':'$user_hrn'}}, function( data ) { //myslice.user = new user(data[0]); localStorage.setItem('user', JSON.stringify(data[0])); + myslice.loadSlices(data[0].slices); }); } }, - getSlices: function(name) { }, diff --git a/portal/templates/fed4fire/fed4fire_home-view.html b/portal/templates/fed4fire/fed4fire_home-view.html index fed82dc1..385f698d 100644 --- a/portal/templates/fed4fire/fed4fire_home-view.html +++ b/portal/templates/fed4fire/fed4fire_home-view.html @@ -270,28 +270,7 @@ window.location="/portal/slice_request/"; }); - /* - Launch queries to get the resources and leases in Manifold Cache - */ - - $.post("/rest/resource/", function( data ) { - }); - $.post("/rest/lease/", function( data ) { - }); - - /*------- - List of slices has been moved in - portal/templates/base.html - This is now in localStorage - --------*/ - // myslice.user is in LocalStorage - if(myslice.user.slices.length>0){ - $.each( myslice.user.slices, function(i, val) { - // Launch a Query for each slice to get resources and leases in Manifold Cache - $.post("/rest/slice/", { 'filters': { 'slice_hrn' : val } }, function(data) { - }); - }); - } + myslice.loadSlices(); }); diff --git a/portal/templates/onelab/onelab_home-view.html b/portal/templates/onelab/onelab_home-view.html index 9170b4af..08670c87 100644 --- a/portal/templates/onelab/onelab_home-view.html +++ b/portal/templates/onelab/onelab_home-view.html @@ -236,30 +236,8 @@ window.location="/portal/slice_request/"; }); - /* - Launch queries to get the resources and leases in Manifold Cache - */ - - $.post("/rest/resource/", function( data ) { - }); - $.post("/rest/lease/", function( data ) { - }); + myslice.loadSlices(); - /*------- - List of slices has been moved in - portal/templates/base.html - This is now in localStorage - --------*/ - // myslice.user is in LocalStorage - if(myslice.user.slices.length>0){ - $.each( myslice.user.slices, function(i, val) { - /* - Launch a Query for each slice to get resources and leases in Manifold Cache - */ - $.post("/rest/slice/", { 'filters': { 'slice_hrn' : val } }, function(data) { - }); - }); - } }); {# widget "_widget-monitor.html" #} diff --git a/ui/topmenu.py b/ui/topmenu.py index 988af27a..667711d0 100644 --- a/ui/topmenu.py +++ b/ui/topmenu.py @@ -72,7 +72,9 @@ def topmenu_items_live (current, page): request=page.request # XXX TODO This should be triggered only when user is logged in # We might use local storage instead - query_pi_auths = Query.get('user').filter_by('user_hrn', '==', '$user_hrn' ).select('user_hrn','pi_authorities') + + # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 + query_pi_auths = Query.get('myslice:user').filter_by('user_hrn', '==', '$user_hrn' ).select('user_hrn','pi_authorities') page.enqueue_query(query_pi_auths) # # even though this plugin does not have any html materialization, the corresponding domid # # must exist because it is searched at init-time to create the JS plugin -- 2.43.0