X-Git-Url: http://git.onelab.eu/?p=myslice.git;a=blobdiff_plain;f=portal%2Fsliceview.py;h=eaec3faa038258630b98517b106a520291adbb87;hp=2d77bdfe042209c1e911da26cf553b1176f47087;hb=20e712f9703d8b2eaf226fdf8807315edcea6a9a;hpb=dfdc8ce3be8c9381e91169dba7ee87444280b0c5 diff --git a/portal/sliceview.py b/portal/sliceview.py index 2d77bdfe..eaec3faa 100644 --- a/portal/sliceview.py +++ b/portal/sliceview.py @@ -1,3 +1,4 @@ +import json from django.template import RequestContext from django.shortcuts import render_to_response @@ -5,8 +6,9 @@ from unfold.loginrequired import LoginRequiredAutoLogoutView from unfold.page import Page from manifold.core.query import Query, AnalyzedQuery +from manifold.manifoldapi import execute_query -from ui.topmenu import topmenu_items, the_user +from ui.topmenu import topmenu_items_live, the_user from plugins.raw import Raw from plugins.stack import Stack @@ -21,13 +23,13 @@ from plugins.querycode import QueryCode # Thierry # stay away from query editor for now as it seems to make things go very slow # see https://lists.myslice.info/pipermail/devel-myslice/2013-December/000221.html -#from plugins.query_editor import QueryEditor +from plugins.query_editor import QueryEditor from plugins.active_filters import ActiveFilters from plugins.quickfilter import QuickFilter from plugins.messages import Messages from plugins.slicestat import SliceStat -from myslice.config import Config +from myslice.configengine import ConfigEngine tmp_default_slice='ple.upmc.myslicedemo' @@ -54,10 +56,8 @@ class SliceView (LoginRequiredAutoLogoutView): page.add_js_chunks ('$(function() { messages.debug("sliceview: jQuery version " + $.fn.jquery); });') page.add_js_chunks ('$(function() { messages.debug("sliceview: users turned %s"); });'%("on" if do_query_users else "off")) page.add_js_chunks ('$(function() { messages.debug("sliceview: leases turned %s"); });'%("on" if do_query_leases else "off")) - config=Config() - page.add_js_chunks ('$(function() { messages.debug("manifold URL %s"); });'%(config.manifold_url())) - page.expose_js_metadata() - + page.add_js_chunks ('$(function() { messages.debug("manifold URL %s"); });'%(ConfigEngine().manifold_url())) + metadata = page.get_metadata() resource_md = metadata.details_by_object('resource') resource_fields = [column['name'] for column in resource_md['column']] @@ -81,14 +81,37 @@ class SliceView (LoginRequiredAutoLogoutView): main_query_init_key = 'hostname' query_resource_all = Query.get('resource').select(resource_fields) - if do_query_users: - query_user_all = Query.get('user').select(user_fields) - + aq = AnalyzedQuery(main_query, metadata=metadata) page.enqueue_query(main_query, analyzed_query=aq) page.enqueue_query(query_resource_all) if do_query_users: - page.enqueue_query(query_user_all) + # Required: the user must have an authority in its user.config + # XXX Temporary solution + user_query = Query().get('local:user').select('config','email') + user_details = execute_query(self.request, user_query) + + # not always found in user_details... + config={} +# for user_detail in user_details: +# #email = user_detail['email'] +# if user_detail['config']: +# config = json.loads(user_detail['config']) +# user_detail['authority'] = config.get('authority',"Unknown Authority") +# +# if user_detail['authority'] is not None: +# sub_authority = user_detail['authority'].split('.') +# root_authority = sub_authority[0] +# query_user_all = Query.get(root_authority+':user').select(user_fields) +# +# # XXX TODO this filter doesn't work - to be improved in Manifold +# #.filter_by('authority.authority_hrn', '=', user_detail['authority']) +# +# page.enqueue_query(query_user_all) +# else: +# print "authority of the user is not in local:user db" + query_user_all = Query.get('user').select(user_fields) + # query_user_all = None # ... and for the relations # XXX Let's hardcode resources for now @@ -138,13 +161,13 @@ class SliceView (LoginRequiredAutoLogoutView): # Filter Resources # turn off for now -- see above -# filter_query_editor = QueryEditor( -# page = page, -# query = sq_resource, -# query_all = query_resource_all, -# title = "Select Columns", -# domid = 'select-columns', -# ) + filter_query_editor = QueryEditor( + page = page, + query = sq_resource, + query_all = query_resource_all, + title = "Select Columns", + domid = 'select-columns', + ) filter_active_filters = ActiveFilters( page = page, query = sq_resource, @@ -154,7 +177,7 @@ class SliceView (LoginRequiredAutoLogoutView): page = page, title = 'Filter Resources', domid = 'filters', - sons = [# filter_query_editor, + sons = [filter_query_editor, filter_active_filters], togglable = True, toggled = 'persistent', @@ -175,7 +198,7 @@ class SliceView (LoginRequiredAutoLogoutView): query = sq_resource, query_all = query_resource_all, # this key is the one issued by google - googlemap_api_key = Config().googlemap_api_key(), + googlemap_api_key = ConfigEngine().googlemap_api_key(), # the key to use at init-time init_key = main_query_init_key, checkboxes = True, @@ -200,7 +223,6 @@ class SliceView (LoginRequiredAutoLogoutView): # this is the query at the core of the slice list query = sq_resource, query_all = query_resource_all, - # use 'hrn' as the internal unique key for this plugin init_key = main_query_init_key, checkboxes = True, datatables_options = { @@ -218,9 +240,7 @@ class SliceView (LoginRequiredAutoLogoutView): # this is the query at the core of the slice list query = sq_resource, query_all = query_resource_all, - # use 'hrn' as the internal unique key for this plugin - # xxx todo on querygrid as well - # init_key = main_query_init_key, + init_key = main_query_init_key, checkboxes = True, ) @@ -264,7 +284,7 @@ class SliceView (LoginRequiredAutoLogoutView): # -------------------------------------------------------------------------- # USERS - if do_query_users: + if do_query_users and query_user_all is not None: tab_users = Tabs( page = page, domid = 'users', @@ -340,13 +360,14 @@ class SliceView (LoginRequiredAutoLogoutView): ) tab_measurements = Tabs ( page=page, - domid="measurements", - togglable=True, - toggled = False, - title="Measurements", + domid = "measurements", + togglable = True, + toggled = 'persistent', + title = "Measurements", outline_complete=True, - sons=[ measurements_stats_cpu, measurements_stats_mem, measurements_stats_asb, measurements_stats_arb ], - active_domid = 'measurements_stats_cpu', + sons = [ measurements_stats_cpu, measurements_stats_mem, measurements_stats_asb, measurements_stats_arb ], + active_domid = 'resources-stats-cpu', + persistent_active = True, ) main_stack.insert (tab_measurements) @@ -394,7 +415,6 @@ class SliceView (LoginRequiredAutoLogoutView): outline_complete = True, )) - # variables that will get passed to the view-unfold1.html template template_env = {} @@ -404,20 +424,15 @@ class SliceView (LoginRequiredAutoLogoutView): # more general variables expected in the template template_env [ 'title' ] = '%(slicename)s'%locals() # the menu items on the top - template_env [ 'topmenu_items' ] = topmenu_items('Slice', request) + template_env [ 'topmenu_items' ] = topmenu_items_live('Slice', page) # so we can sho who is logged template_env [ 'username' ] = the_user (request) # don't forget to run the requests - page.expose_queries () - - # xxx create another plugin with the same query and a different layout (with_datatables) - # show that it worls as expected, one single api call to backend and 2 refreshed views - + page.expose_js_metadata() # the prelude object in page contains a summary of the requirements() for all plugins # define {js,css}_{files,chunks} - prelude_env = page.prelude_env() - template_env.update(prelude_env) - result=render_to_response ('view-unfold1.html',template_env, + template_env.update(page.prelude_env()) + + return render_to_response ('view-unfold1.html',template_env, context_instance=RequestContext(request)) - return result