blob: 53d8b28dc6679b8a3674a9df99d6e951cdeeb792 [file] [log] [blame]
# /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')