From b3fc6c0d1fa22fdd0968b20719b3d608615b08a5 Mon Sep 17 00:00:00 2001 From: Scott Baker Date: Mon, 30 Jun 2014 16:38:46 -0700 Subject: [PATCH] start working on xoslib --- planetstack/core/xoslib/xoslib.py | 90 +++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 planetstack/core/xoslib/xoslib.py diff --git a/planetstack/core/xoslib/xoslib.py b/planetstack/core/xoslib/xoslib.py new file mode 100644 index 0000000..53d8b28 --- /dev/null +++ b/planetstack/core/xoslib/xoslib.py @@ -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') -- 2.43.0