provide site/sliver/node data for shell
diff --git a/planetstack/core/dashboard/views/shell.py b/planetstack/core/dashboard/views/shell.py
index 7d23043..5efe239 100644
--- a/planetstack/core/dashboard/views/shell.py
+++ b/planetstack/core/dashboard/views/shell.py
@@ -15,18 +15,78 @@
# datetime is not json serializable
if isinstance(v, datetime.datetime):
d2[k] = time.mktime(v.timetuple())
+ elif v.__class__.__name__ == "Geoposition":
+ pass
else:
d2[k] = v
return d2
+def sliver_to_dict(sliver):
+ d = model_to_dict(sliver)
+ d["slice_id"] = sliver.slice.id
+ d["node_id"] = sliver.node.id
+ return d
+
+def slice_to_dict(slice):
+ d = model_to_dict(slice)
+ d["slivers"] = [sliver_to_dict(x) for x in slice.slivers]
+ return d
+
+def node_to_dict(node):
+ d = model_to_dict(node)
+ d["slivers"] = []
+
+
+class OpenCloudData:
+ def __init__(self, user):
+ self.loadAll()
+
+ def loadAll(self):
+ self.allNodes = list(Node.objects.all())
+ self.allSlices = list(Slice.objects.all())
+ self.allSlivers = list(Sliver.objects.all())
+ self.allSites = list(Site.objects.all())
+
+ self.site_id = {}
+ for site in self.allSites:
+ d = model_to_dict(site)
+ d["node_ids"] = []
+ d["slice_ids"] = []
+ self.site_id[site.id] = ensure_serializable(d)
+
+ self.node_id = {}
+ for node in self.allNodes:
+ d = model_to_dict(node)
+ d["sliver_ids"] = []
+ self.node_id[node.id] = ensure_serializable(d)
+ self.site_id[node.site_id]["node_ids"].append(node.id)
+
+ self.slice_id = {}
+ for slice in self.allSlices:
+ d = model_to_dict(slice)
+ d["sliver_ids"] = []
+ self.slice_id[slice.id] = ensure_serializable(d)
+ self.site_id[slice.site_id]["slice_ids"].append(site.id)
+
+ print self.slice_id.keys()
+
+ self.sliver_id = {}
+ for sliver in self.allSlivers:
+ self.sliver_id[sliver.id] = model_to_dict(sliver)
+
+ self.slice_id[sliver.slice_id]["sliver_ids"].append(sliver.id)
+ self.node_id[sliver.node_id]["sliver_ids"].append(sliver.id)
+
+ def get_opencloud_data(self):
+ return {"slices": self.slice_id.values(),
+ "slivers": self.sliver_id.values(),
+ "nodes": self.node_id.values(),
+ "sites": self.site_id.values()}
+
class ShellDataView(View):
url = r'^shelldata/'
def get(self, request, **kwargs):
- allSlices = []
- for slice in Slice.objects.all():
- allSlices.append(ensure_serializable(model_to_dict(slice)))
-
- result = {"slices": allSlices}
+ result = OpenCloudData(request.user).get_opencloud_data()
return HttpResponse(json.dumps(result), mimetype='application/json')