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
14 from manifold.core.query import Query, AnalyzedQuery
15 from manifoldapi.manifoldapi import execute_query
17 from myslice.configengine import ConfigEngine
18 from plugins.querytable import QueryTable
19 from plugins.googlemap import GoogleMap
20 from plugins.queryupdater import QueryUpdater
22 from 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)
61 query_resource_all = Query.get('resource').select(resource_fields)
62 page.enqueue_query(query_resource_all)
64 sq_resource = aq.subquery('resource')
65 sq_lease = aq.subquery('lease')
67 list_resources = QueryTable(
69 domid = 'resources-list',
72 query_all = query_resource_all,
75 datatables_options = {
77 'bLengthChange' : True,
82 # --------------------------------------------------------------------------
84 # the resources part is made of a Tabs (Geographic, List),
86 map_resources = GoogleMap(
88 title = 'Geographic view',
89 domid = 'resources-map',
90 # tab's sons preferably turn this off
93 query_all = query_resource_all,
94 # this key is the one issued by google
95 googlemap_api_key = ConfigEngine().googlemap_api_key(),
96 # the key to use at init-time
97 init_key = main_query_init_key,
105 # --------------------------------------------------------------------------
106 # QueryUpdater (Pending Operations)
108 pending_resources = QueryUpdater(
110 title = 'Pending operations',
113 # start turned off, it will open up itself when stuff comes in
116 outline_complete = True,
120 template_env['list_resources'] = list_resources.render(self.request)
121 template_env['map_resources'] = map_resources.render(self.request)
122 template_env['pending_resources'] = pending_resources.render(self.request)
123 template_env["theme"] = self.theme
124 template_env["username"] = request.user
125 template_env["slice"] = slicename
126 template_env["section"] = "resources"
127 template_env["msg"] = msg
128 template_env.update(page.prelude_env())
130 return render_to_response(self.template, template_env, context_instance=RequestContext(request))