blob: 3822809bd6ed1e5f9c8cc582e41a57dfbb33d431 [file] [log] [blame]
Scott Bakerfdfb5ae2015-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 *
11
12CEILOMETER_KIND = "ceilometer"
13
14class CeilometerService(Service):
15 KIND = CEILOMETER_KIND
16
17 class Meta:
18 app_label = "ceilometer"
19 verbose_name = "Ceilometer Service"
20 proxy = True
21
22class MonitoringChannel(TenantWithContainer): # aka 'CeilometerTenant'
23 class Meta:
24 proxy = True
25
26 KIND = CEILOMETER_KIND
27
28 default_attributes = {}
29 def __init__(self, *args, **kwargs):
30 ceilometer_services = CeilometerService.get_service_objects().all()
31 if ceilometer_services:
32 self._meta.get_field("provider_service").default = ceilometer_services[0].id
33 super(MonitoringChannel, self).__init__(*args, **kwargs)
34 self.sliver = None
35
36 def save(self, *args, **kwargs):
37 if not self.creator:
38 if not getattr(self, "caller", None):
39 # caller must be set when creating a vCPE since it creates a slice
40 raise XOSProgrammingError("MonitoringChannel's self.caller was not set")
41 self.creator = self.caller
42 if not self.creator:
43 raise XOSProgrammingError("MonitoringChannel's self.creator was not set")
44
45 super(MonitoringChannel, self).save(*args, **kwargs)
46 model_policy_monitoring_channel(self.pk)
47
48 def delete(self, *args, **kwargs):
49 self.cleanup_sliver()
50 super(MonitoringChannel, self).delete(*args, **kwargs)
51
52def model_policy_monitoring_channel(pk):
53 # TODO: this should be made in to a real model_policy
54 with transaction.atomic():
55 mc = MonitoringChannel.objects.select_for_update().filter(pk=pk)
56 if not mc:
57 return
58 mc = mc[0]
59 mc.manage_container()
60
61