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)
72 for sliver in self.allSlivers:
73 self.sliver_id[sliver.id] = model_to_dict(sliver)
75 self.slice_id[sliver.slice_id]["sliver_ids"].append(sliver.id)
76 self.node_id[sliver.node_id]["sliver_ids"].append(sliver.id)
78 def get_opencloud_data(self):
79 return {"slices": self.slice_id.values(),
80 "slivers": self.sliver_id.values(),
81 "nodes": self.node_id.values(),
82 "sites": self.site_id.values()}
84 class ShellDataView(View):
87 def get(self, request, **kwargs):
88 result = OpenCloudData(request.user).get_opencloud_data()
90 return HttpResponse(json.dumps(result), mimetype='application/json')