[ACORD-18] CORD 3.0 integration for monitoring service
Adding the new files
-Updating models
-Fixing synchronizer
Change-Id: I148e06d421a42acdeb8366a7816d0589f8a39e54
diff --git a/xos/attic/userservicemonitoringpublisher_model.py b/xos/attic/userservicemonitoringpublisher_model.py
new file mode 100644
index 0000000..29d9b86
--- /dev/null
+++ b/xos/attic/userservicemonitoringpublisher_model.py
@@ -0,0 +1,115 @@
+def __init__(self, *args, **kwargs):
+ self.cached_target_service = None
+ self.cached_tenancy_from_target_service = None
+ self.cached_service_monitoring_agent = None
+ super(UserServiceMonitoringPublisher, self).__init__(*args, **kwargs)
+
+def can_update(self, user):
+ #Don't allow creation of this model instances for non-admin users also
+ return True
+
+@property
+def target_service(self):
+ if getattr(self, "cached_target_service", None):
+ return self.cached_target_service
+ target_service_id = self.get_attribute("target_service_id")
+ if not target_service_id:
+ return None
+ services = Service.objects.filter(id=target_service_id)
+ if not services:
+ return None
+ target_service = services[0]
+ self.cached_target_service = target_service
+ return target_service
+
+@target_service.setter
+def target_service(self, value):
+ if value:
+ value = value.id
+ if (value != self.get_attribute("target_service_id", None)):
+ self.cached_target_service = None
+ self.set_attribute("target_service_id", value)
+
+@property
+def tenancy_from_target_service(self):
+ if getattr(self, "cached_tenancy_from_target_service", None):
+ return self.cached_tenancy_from_target_service
+ tenancy_from_target_service_id = self.get_attribute("tenancy_from_target_service_id")
+ if not tenancy_from_target_service_id:
+ return None
+ tenancy_from_target_services = ServiceDependency.objects.filter(id=tenancy_from_target_service_id)
+ if not tenancy_from_target_services:
+ return None
+ tenancy_from_target_service = tenancy_from_target_services[0]
+ self.cached_tenancy_from_target_service = tenancy_from_target_service
+ return tenancy_from_target_service
+
+@tenancy_from_target_service.setter
+def tenancy_from_target_service(self, value):
+ if value:
+ value = value.id
+ if (value != self.get_attribute("tenancy_from_target_service_id", None)):
+ self.cached_tenancy_from_target_service = None
+ self.set_attribute("tenancy_from_target_service_id", value)
+
+@property
+def service_monitoring_agent(self):
+ if getattr(self, "cached_service_monitoring_agent", None):
+ return self.cached_service_monitoring_agent
+ service_monitoring_agent_id = self.get_attribute("service_monitoring_agent")
+ if not service_monitoring_agent_id:
+ return None
+ service_monitoring_agents = ServiceDependency.objects.filter(id=service_monitoring_agent_id)
+ if not service_monitoring_agents:
+ return None
+ service_monitoring_agent = service_monitoring_agents[0]
+ self.cached_service_monitoring_agent = service_monitoring_agent
+ return service_monitoring_agent
+
+@service_monitoring_agent.setter
+def service_monitoring_agent(self, value):
+ if value:
+ value = value.id
+ if (value != self.get_attribute("service_monitoring_agent", None)):
+ self.cached_service_monitoring_agent = None
+ self.set_attribute("service_monitoring_agent", value)
+
+def save(self, *args, **kwargs):
+ if not self.creator:
+ if not getattr(self, "caller", None):
+ # caller must be set when creating a monitoring channel since it creates a slice
+ raise XOSProgrammingError("UserServiceMonitoringPublisher's self.caller was not set")
+ self.creator = self.caller
+ if not self.creator:
+ raise XOSProgrammingError("UserServiceMonitoringPublisher's self.creator was not set")
+
+ tenancy_from_target_service = None
+ if self.pk is None:
+ if self.target_service is None:
+ raise XOSValidationError("Target service is not specified in UserServiceMonitoringPublisher")
+ #Allow only one monitoring publisher for a given service
+ publisher_count = sum ( [1 for publisher in UserServiceMonitoringPublisher.get_tenant_objects().all() if (publisher.target_service.id == self.target_service.id)] )
+ if publisher_count > 0:
+ raise XOSValidationError("Already %s publishers exist for service. Can only create max 1 UserServiceMonitoringPublisher instances" % str(publisher_count))
+ #Create Service composition object here
+ tenancy_from_target_service = ServiceDependency(provider_service = self.provider_service,
+ subscriber_service = self.target_service)
+ tenancy_from_target_service.save()
+ self.tenancy_from_target_service = tenancy_from_target_service
+
+ target_uri = CeilometerService.objects.get(id=self.provider_service.id).ceilometer_rabbit_uri
+ if target_uri is None:
+ raise XOSProgrammingError("Unable to get the Target_URI for Monitoring Agent")
+ service_monitoring_agent = ServiceMonitoringAgentInfo(service = self.target_service,
+ target_uri = target_uri)
+ service_monitoring_agent.save()
+ self.service_monitoring_agent = service_monitoring_agent
+
+ try:
+ super(UserServiceMonitoringPublisher, self).save(*args, **kwargs)
+ except:
+ if tenancy_from_target_service:
+ tenancy_from_target_service.delete()
+ if service_monitoring_agent:
+ service_monitoring_agent.delete()
+ raise
\ No newline at end of file