start working on xoslib
authorScott Baker <smbaker@gmail.com>
Mon, 30 Jun 2014 23:38:46 +0000 (16:38 -0700)
committerScott Baker <smbaker@gmail.com>
Mon, 30 Jun 2014 23:38:46 +0000 (16:38 -0700)
planetstack/core/xoslib/xoslib.py [new file with mode: 0644]

diff --git a/planetstack/core/xoslib/xoslib.py b/planetstack/core/xoslib/xoslib.py
new file mode 100644 (file)
index 0000000..53d8b28
--- /dev/null
@@ -0,0 +1,90 @@
+# /opt/planetstack/core/dashboard/views/helloworld.py
+import datetime
+import os
+import sys
+import time
+import json
+from django.http import HttpResponse, HttpResponseServerError, HttpResponseForbidden
+from django.views.generic import TemplateView, View
+from core.models import *
+from django.forms.models import model_to_dict
+
+def ensure_serializable(d):
+    d2={}
+    for (k,v) in d.items():
+        # 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)
+
+        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):
+        result = OpenCloudData(request.user).get_opencloud_data()
+
+        return HttpResponse(json.dumps(result), mimetype='application/json')