1 # /opt/planetstack/core/dashboard/views/helloworld.py
7 from django.http import HttpResponse, HttpResponseServerError, HttpResponseForbidden
8 from django.views.generic import TemplateView, View
9 from core.models import *
10 from django.forms.models import model_to_dict
12 def ensure_serializable(d):
14 for (k,v) in d.items():
15 # datetime is not json serializable
16 if isinstance(v, datetime.datetime):
17 d2[k] = time.mktime(v.timetuple())
18 elif v.__class__.__name__ == "Geoposition":
24 def sliver_to_dict(sliver):
25 d = model_to_dict(sliver)
26 d["slice_id"] = sliver.slice.id
27 d["node_id"] = sliver.node.id
30 def slice_to_dict(slice):
31 d = model_to_dict(slice)
32 d["slivers"] = [sliver_to_dict(x) for x in slice.slivers]
35 def node_to_dict(node):
36 d = model_to_dict(node)
41 def __init__(self, user):
45 self.allNodes = list(Node.objects.all())
46 self.allSlices = list(Slice.objects.all())
47 self.allSlivers = list(Sliver.objects.all())
48 self.allSites = list(Site.objects.all())
51 for site in self.allSites:
52 d = model_to_dict(site)
55 self.site_id[site.id] = ensure_serializable(d)
58 for node in self.allNodes:
59 d = model_to_dict(node)
61 self.node_id[node.id] = ensure_serializable(d)
62 self.site_id[node.site_id]["node_ids"].append(node.id)
65 for slice in self.allSlices:
66 d = model_to_dict(slice)
68 self.slice_id[slice.id] = ensure_serializable(d)
69 self.site_id[slice.site_id]["slice_ids"].append(site.id)
71 print self.slice_id.keys()
74 for sliver in self.allSlivers:
75 self.sliver_id[sliver.id] = model_to_dict(sliver)
77 self.slice_id[sliver.slice_id]["sliver_ids"].append(sliver.id)
78 self.node_id[sliver.node_id]["sliver_ids"].append(sliver.id)
80 def get_opencloud_data(self):
81 return {"slices": self.slice_id.values(),
82 "slivers": self.sliver_id.values(),
83 "nodes": self.node_id.values(),
84 "sites": self.site_id.values()}
86 class ShellDataView(View):
89 def get(self, request, **kwargs):
90 result = OpenCloudData(request.user).get_opencloud_data()
92 return HttpResponse(json.dumps(result), mimetype='application/json')