blob: c276682ad104d465f8ec1d8781c35b4eec4114e1 [file] [log] [blame]
Scott Bakerfa8fd292015-09-09 17:31:22 -07001from django.db import models
2from core.models import Service, PlCoreBase, Slice, Sliver, Tenant, TenantWithContainer, Node, Image, User, Flavor, Subscriber
3from core.models.plcorebase import StrippedCharField
4import os
5from django.db import models, transaction
6from django.forms.models import model_to_dict
7from django.db.models import Q
8from operator import itemgetter, attrgetter, methodcaller
9import traceback
10from xos.exceptions import *
Scott Bakerddf8a942015-09-10 17:07:21 -070011from core.models import SlicePrivilege, SitePrivilege
12from sets import Set
Scott Bakerfa8fd292015-09-09 17:31:22 -070013
14CEILOMETER_KIND = "ceilometer"
15
16class CeilometerService(Service):
17 KIND = CEILOMETER_KIND
18
19 class Meta:
20 app_label = "ceilometer"
21 verbose_name = "Ceilometer Service"
22 proxy = True
23
24class MonitoringChannel(TenantWithContainer): # aka 'CeilometerTenant'
25 class Meta:
26 proxy = True
27
28 KIND = CEILOMETER_KIND
29
30 default_attributes = {}
31 def __init__(self, *args, **kwargs):
32 ceilometer_services = CeilometerService.get_service_objects().all()
33 if ceilometer_services:
34 self._meta.get_field("provider_service").default = ceilometer_services[0].id
35 super(MonitoringChannel, self).__init__(*args, **kwargs)
Scott Bakerfa8fd292015-09-09 17:31:22 -070036
37 def save(self, *args, **kwargs):
38 if not self.creator:
39 if not getattr(self, "caller", None):
40 # caller must be set when creating a vCPE since it creates a slice
41 raise XOSProgrammingError("MonitoringChannel's self.caller was not set")
42 self.creator = self.caller
43 if not self.creator:
44 raise XOSProgrammingError("MonitoringChannel's self.creator was not set")
45
46 super(MonitoringChannel, self).save(*args, **kwargs)
47 model_policy_monitoring_channel(self.pk)
48
49 def delete(self, *args, **kwargs):
Scott Baker588caf92015-09-09 17:57:51 -070050 self.cleanup_container()
Scott Bakerfa8fd292015-09-09 17:31:22 -070051 super(MonitoringChannel, self).delete(*args, **kwargs)
52
Scott Bakerddf8a942015-09-10 17:07:21 -070053 @property
54 def site_tenant_list(self):
55 tenant_ids = Set()
56 for sp in SitePrivilege.objects.filter(user=self.creator):
57 site = sp.site
58 for cs in site.controllersite.all():
59 if cs.tenant_id:
60 tenant_ids.add(cs.tenant_id)
61 return tenant_ids
62
63 @property
64 def slice_tenant_list(self):
65 tenant_ids = Set()
66 for sp in SlicePrivilege.objects.filter(user=self.creator):
67 slice = sp.slice
68 for cs in slice.controllerslices.all():
69 if cs.tenant_id:
70 tenant_ids.add(cs.tenant_id)
71 for slice in Slice.objects.filter(creator=self.creator):
72 for cs in slice.controllerslices.all():
73 if cs.tenant_id:
74 tenant_ids.add(cs.tenant_id)
75 return tenant_ids
76
77 @property
78 def tenant_list(self):
79 return self.slice_tenant_list | self.site_tenant_list
80
81 @property
82 def tenant_list_str(self):
83 return ", ".join(self.tenant_list)
84
85
86
87
Scott Bakerfa8fd292015-09-09 17:31:22 -070088def model_policy_monitoring_channel(pk):
89 # TODO: this should be made in to a real model_policy
90 with transaction.atomic():
91 mc = MonitoringChannel.objects.select_for_update().filter(pk=pk)
92 if not mc:
93 return
94 mc = mc[0]
95 mc.manage_container()
96
97