blob: 7dfefe7d8c9eeabd39a525a2e25b49b6501803c7 [file] [log] [blame]
Murat Parlakisik638c65f2017-05-31 11:10:24 +03001sync_attributes = ("listening_endpoint", )
2
3default_attributes = {}
4def __init__(self, *args, **kwargs):
5 sflow_services = SFlowService.get_service_objects().all()
6 if sflow_services:
7 self._meta.get_field("provider_service").default = sflow_services[0].id
8 super(SFlowTenant, self).__init__(*args, **kwargs)
9
10@property
11def creator(self):
12 from core.models import User
13 if getattr(self, "cached_creator", None):
14 return self.cached_creator
15 creator_id=self.get_attribute("creator_id")
16 if not creator_id:
17 return None
18 users=User.objects.filter(id=creator_id)
19 if not users:
20 return None
21 user=users[0]
22 self.cached_creator = users[0]
23 return user
24
25@creator.setter
26def creator(self, value):
27 if value:
28 value = value.id
29 if (value != self.get_attribute("creator_id", None)):
30 self.cached_creator=None
31 self.set_attribute("creator_id", value)
32
33@property
34def listening_endpoint(self):
35 return self.get_attribute("listening_endpoint", None)
36
37@listening_endpoint.setter
38def listening_endpoint(self, value):
39 if urlparse(value).scheme != 'udp':
40 raise XOSProgrammingError("SFlowTenant: Only UDP listening endpoint URLs are accepted...valid syntax is: udp://ip:port")
41 self.set_attribute("listening_endpoint", value)
42
43def save(self, *args, **kwargs):
44 if not self.creator:
45 if not getattr(self, "caller", None):
46 # caller must be set when creating a SFlow tenant since it creates a slice
47 raise XOSProgrammingError("SFlowTenant's self.caller was not set")
48 self.creator = self.caller
49 if not self.creator:
50 raise XOSProgrammingError("SFlowTenant's self.creator was not set")
51
52 if not self.listening_endpoint:
53 raise XOSProgrammingError("SFlowTenant's self.listening_endpoint was not set")
54
55 if self.pk is None:
56 #Allow only one sflow channel per user and listening_endpoint
57 channel_count = sum ( [1 for channel in SFlowTenant.get_tenant_objects().all() if ((channel.creator == self.creator) and (channel.listening_endpoint == self.listening_endpoint))] )
58 if channel_count > 0:
59 raise XOSValidationError("Already %s sflow channels exist for user Can only create max 1 tenant per user and listening endpoint" % str(channel_count))
60
61 super(SFlowTenant, self).save(*args, **kwargs)
62
63def delete(self, *args, **kwargs):
64 super(MonitoringChannel, self).delete(*args, **kwargs)
65
66@property
67def authorized_resource_list(self):
68 return ['all']
69
70@property
71def authorized_resource_list_str(self):
72 return ", ".join(self.authorized_resource_list)