| 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) |
| |
| 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): |
| result = OpenCloudData(request.user).get_opencloud_data() |
| |
| return HttpResponse(json.dumps(result), mimetype='application/json') |