return backend status in sliceplus object
[plstackapi.git] / planetstack / core / xoslib / objects / sliceplus.py
1 from core.models.slice import Slice
2 from plus import PlusObjectMixin
3
4 class SlicePlus(Slice, PlusObjectMixin):
5     class Meta:
6         proxy = True
7
8     def getSliceInfo(self, user=None):
9         used_sites = {}
10         used_deployments = {}
11         sliverCount = 0
12         for sliver in self.slivers.all():
13             site = sliver.node.site
14             deployment = sliver.node.deployment
15             used_sites[site.name] = used_sites.get(site.name, 0) + 1
16             used_deployments[deployment.name] = used_deployments.get(deployment.name, 0) + 1
17             sliverCount = sliverCount + 1
18
19         roles = []
20         if (user!=None):
21             roles = [x.role for x in self.slice_privileges.filter(user=user)]
22
23         return {"sitesUsed": used_sites,
24                 "deploymentsUsed": used_deployments,
25                 "sliverCount": sliverCount,
26                 "siteCount": len(used_sites.keys()),
27                 "roles": roles}
28
29     @staticmethod
30     def select_by_user(user):
31         if user.is_admin:
32             qs = SlicePlus.objects.all()
33         else:
34             slice_ids = [sp.slice.id for sp in SlicePrivilege.objects.filter(user=user)]
35             qs = SlicePlus.objects.filter(id__in=slice_ids)
36         return qs