1 from django.template import RequestContext
2 from django.shortcuts import render_to_response
4 from manifold.core.query import Query, AnalyzedQuery
5 from manifoldapi.manifoldapi import execute_query
7 from django.views.generic.base import TemplateView
9 from unfold.loginrequired import LoginRequiredView
10 from django.http import HttpResponse
11 from django.shortcuts import render
13 from unfold.page import Page
15 from myslice.configengine import ConfigEngine
16 from plugins.querytable import QueryTable
17 from plugins.googlemap import GoogleMap
18 from plugins.queryupdater import QueryUpdater
19 from plugins.testbeds import TestbedsPlugin
20 from plugins.scheduler2 import Scheduler2
22 from myslice.theme import ThemeView
24 class SliceResourceView (LoginRequiredView, ThemeView):
25 template_name = "slice-resource-view.html"
27 def get(self, request, slicename):
29 if request.GET.get('message') :
30 msg = "Slice successfully updated"
35 metadata = page.get_metadata()
36 page.expose_js_metadata()
38 resource_md = metadata.details_by_object('resource')
39 resource_fields = [column['name'] for column in resource_md['column']]
41 user_md = metadata.details_by_object('user')
42 user_fields = ['user_hrn'] # [column['name'] for column in user_md['column']]
44 # TODO The query to run is embedded in the URL
45 main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename)
49 'resource.hostname', 'resource.type',
50 'resource.network_hrn',
53 #'application.measurement_point.counter'
55 # for internal use in the querytable plugin;
56 # needs to be a unique column present for each returned record
57 main_query_init_key = 'urn'
58 aq = AnalyzedQuery(main_query, metadata=metadata)
59 page.enqueue_query(main_query, analyzed_query=aq)
60 sq_resource = aq.subquery('resource')
61 sq_lease = aq.subquery('lease')
63 query_resource_all = Query.get('resource').select(resource_fields)
64 page.enqueue_query(query_resource_all)
67 lease_md = metadata.details_by_object('lease')
68 lease_fields = [column['name'] for column in lease_md['column']]
70 query_all_lease = Query.get('lease').select(lease_fields)
71 page.enqueue_query(query_all_lease)
73 print "!!!!!!!!!! query leases = ",query_all_lease
75 # --------------------------------------------------------------------------
77 # resources as a list using datatable plugin
79 list_resources = QueryTable(
81 domid = 'resources-list',
84 query_all = query_resource_all,
87 datatables_options = {
89 'bLengthChange' : True,
94 # --------------------------------------------------------------------------
96 # the resources part is made of a Tabs (Geographic, List),
98 map_resources = GoogleMap(
100 title = 'Geographic view',
101 domid = 'resources-map',
102 # tab's sons preferably turn this off
105 query_all = query_resource_all,
106 # this key is the one issued by google
107 googlemap_api_key = ConfigEngine().googlemap_api_key(),
108 # the key to use at init-time
109 init_key = main_query_init_key,
117 # --------------------------------------------------------------------------
118 # LEASES Nitos Scheduler
119 # Display the leases reservation timeslots of the resources
121 resources_as_scheduler2 = Scheduler2(
125 # this is the query at the core of the slice list
127 query_all_resources = query_resource_all,
128 query_lease = query_all_lease,
131 # --------------------------------------------------------------------------
132 # QueryUpdater (Pending Operations)
134 pending_resources = QueryUpdater(
136 title = 'Pending operations',
139 # start turned off, it will open up itself when stuff comes in
142 outline_complete = True,
145 # --------------------------------------------------------------------------
147 # testbeds as a list of filters
149 network_md = metadata.details_by_object('network')
150 network_fields = [column['name'] for column in network_md['column']]
152 query_network = Query.get('network').select(network_fields)
153 page.enqueue_query(query_network)
155 filter_testbeds = TestbedsPlugin(
157 domid = 'testbeds-filter',
158 title = 'Filter by testbeds',
160 query_all = query_resource_all,
161 query_network = query_network,
162 init_key = "network_hrn",
164 datatables_options = {
165 'iDisplayLength': 25,
166 'bLengthChange' : True,
172 template_env['list_resources'] = list_resources.render(self.request)
173 template_env['filter_testbeds'] = filter_testbeds.render(self.request)
174 template_env['map_resources'] = map_resources.render(self.request)
175 template_env['scheduler'] = resources_as_scheduler2.render(self.request)
176 template_env['pending_resources'] = pending_resources.render(self.request)
177 template_env["theme"] = self.theme
178 template_env["username"] = request.user
179 template_env["slice"] = slicename
180 template_env["section"] = "resources"
181 template_env["msg"] = msg
182 template_env.update(page.prelude_env())
184 return render_to_response(self.template, template_env, context_instance=RequestContext(request))