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
21 from plugins.columns_editor import ColumnsEditor
22 from plugins.sladialog import SlaDialog
24 from myslice.theme import ThemeView
26 class SliceResourceView (LoginRequiredView, ThemeView):
27 template_name = "slice-resource-view.html"
29 def get(self, request, slicename):
31 if request.GET.get('message') :
32 msg = "Slice successfully updated"
37 metadata = page.get_metadata()
38 page.expose_js_metadata()
40 resource_md = metadata.details_by_object('resource')
41 resource_fields = [column['name'] for column in resource_md['column']]
43 user_md = metadata.details_by_object('user')
44 user_fields = ['user_hrn'] # [column['name'] for column in user_md['column']]
46 # TODO The query to run is embedded in the URL
47 main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename)
51 'resource.hostname', 'resource.type',
52 'resource.network_hrn',
55 #'application.measurement_point.counter'
57 # for internal use in the querytable plugin;
58 # needs to be a unique column present for each returned record
59 main_query_init_key = 'urn'
60 aq = AnalyzedQuery(main_query, metadata=metadata)
61 page.enqueue_query(main_query, analyzed_query=aq)
62 sq_resource = aq.subquery('resource')
63 sq_lease = aq.subquery('lease')
65 query_resource_all = Query.get('resource').select(resource_fields)
66 page.enqueue_query(query_resource_all)
69 lease_md = metadata.details_by_object('lease')
70 lease_fields = [column['name'] for column in lease_md['column']]
72 query_lease_all = Query.get('lease').select(lease_fields)
73 page.enqueue_query(query_lease_all)
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,
95 # --------------------------------------------------------------------------
96 # RESERVED RESOURCES LIST
97 # resources as a list using datatable plugin
99 list_reserved_resources = QueryTable(
101 domid = 'resources-reserved-list',
104 query_all = sq_resource,
107 datatables_options = {
108 'iDisplayLength': 25,
109 'bLengthChange' : True,
114 # --------------------------------------------------------------------------
116 # list of fields to be applied on the query
117 # this will add/remove columns in QueryTable plugin
119 filter_column_editor = ColumnsEditor(
122 query_all = query_resource_all,
123 title = "Select Columns",
124 domid = 'select-columns',
127 # --------------------------------------------------------------------------
129 # the resources part is made of a Tabs (Geographic, List),
131 map_resources = GoogleMap(
133 title = 'Geographic view',
134 domid = 'resources-map',
135 # tab's sons preferably turn this off
138 query_all = query_resource_all,
139 # this key is the one issued by google
140 googlemap_api_key = ConfigEngine().googlemap_api_key(),
141 # the key to use at init-time
142 init_key = main_query_init_key,
150 # --------------------------------------------------------------------------
151 # LEASES Nitos Scheduler
152 # Display the leases reservation timeslots of the resources
154 resources_as_scheduler2 = Scheduler2(
158 # this is the query at the core of the slice list
160 query_lease = sq_lease,
161 query_all_resources = query_resource_all,
162 query_all_leases = query_lease_all,
165 # --------------------------------------------------------------------------
166 # QueryUpdater (Pending Operations)
168 pending_resources = QueryUpdater(
170 title = 'Pending operations',
173 # start turned off, it will open up itself when stuff comes in
176 outline_complete = True,
177 username = request.user,
180 # --------------------------------------------------------------------------
182 # testbeds as a list of filters
184 network_md = metadata.details_by_object('network')
185 network_fields = [column['name'] for column in network_md['column']]
187 query_network = Query.get('network').select(network_fields)
188 page.enqueue_query(query_network)
190 filter_testbeds = TestbedsPlugin(
192 domid = 'testbeds-filter',
193 title = 'Filter by testbeds',
195 query_all = query_resource_all,
196 query_network = query_network,
197 init_key = "network_hrn",
199 datatables_options = {
200 'iDisplayLength': 25,
201 'bLengthChange' : True,
206 # --------------------------------------------------------------------------
207 # SLA View and accept dialog
209 sla_dialog = SlaDialog(
211 title = 'sla dialog',
214 # start turned off, it will open up itself when stuff comes in
216 domid = 'sla_dialog',
217 outline_complete = True,
218 username = request.user,
222 template_env['list_resources'] = list_resources.render(self.request)
223 # template_env['list_reserved_resources'] = list_reserved_resources.render(self.request)
225 template_env['columns_editor'] = filter_column_editor.render(self.request)
227 template_env['filter_testbeds'] = filter_testbeds.render(self.request)
228 template_env['map_resources'] = map_resources.render(self.request)
229 template_env['scheduler'] = resources_as_scheduler2.render(self.request)
230 template_env['pending_resources'] = pending_resources.render(self.request)
231 template_env['sla_dialog'] = sla_dialog.render(self.request)
232 template_env["theme"] = self.theme
233 template_env["username"] = request.user
234 template_env["slice"] = slicename
235 template_env["section"] = "resources"
236 template_env["msg"] = msg
237 template_env.update(page.prelude_env())
239 return render_to_response(self.template, template_env, context_instance=RequestContext(request))