Fix inventory subscription filter with 'neq'; fix CloudInfo notification
[pti/o2.git] / o2ims / adapter / orm.py
index 4e3e39f..e47707c 100644 (file)
@@ -31,13 +31,13 @@ from sqlalchemy import (
     exc,
 )
 
-from sqlalchemy.orm import mapper, relationship
+from sqlalchemy.orm import mapper, relationship, backref
 # from sqlalchemy.sql.sqltypes import Integer
 
 from o2ims.domain import ocloud as ocloudModel
 from o2ims.domain import subscription_obj as subModel
 from o2ims.domain import alarm_obj as alarmModel
-from o2ims.domain.resource_type import ResourceTypeEnum
+from o2ims.domain.resource_type import ResourceTypeEnum, ResourceKindEnum
 # from o2ims.domain.alarm_obj import AlarmLastChangeEnum, PerceivedSeverityEnum
 
 from o2common.helper import o2logging
@@ -54,34 +54,39 @@ ocloud = Table(
     Column("version_number", Integer),
 
     Column("oCloudId", String(255), primary_key=True),
-    Column("globalcloudId", String(255)),
+    Column("globalCloudId", String(255)),
     Column("name", String(255)),
     Column("description", String(255)),
-    Column("serviceUri", String(255))
+    Column("serviceUri", String(255)),
+    Column("smoRegistrationService", String(255))
     # Column("extensions", String(1024))
 )
 
 resourcetype = Table(
-    "resourcetype",
+    "resourceType",
     metadata,
     Column("updatetime", DateTime),
     Column("createtime", DateTime),
     Column("hash", String(255)),
+    Column("version_number", Integer),
 
     Column("resourceTypeId", String(255), primary_key=True),
     Column("resourceTypeEnum", Enum(
         ResourceTypeEnum, native_enum=False), nullable=False),
-    Column("oCloudId", ForeignKey("ocloud.oCloudId")),
     Column("name", String(255)),
+    Column("description", String(255)),
     Column("vendor", String(255)),
     Column("model", String(255)),
     Column("version", String(255)),
-    Column("description", String(255)),
+    Column("resourceKind", Enum(ResourceKindEnum)),
+    Column("resourceClass", Enum(ResourceTypeEnum)),
     # Column("extensions", String(1024))
+
+    Column("alarmDictionaryId", ForeignKey("alarmDictionary.id"))
 )
 
 resourcepool = Table(
-    "resourcepool",
+    "resourcePool",
     metadata,
     Column("updatetime", DateTime),
     Column("createtime", DateTime),
@@ -107,18 +112,17 @@ resource = Table(
     Column("version_number", Integer),
 
     Column("resourceId", String(255), primary_key=True),
-    Column("resourceTypeId", ForeignKey("resourcetype.resourceTypeId")),
-    Column("resourcePoolId", ForeignKey("resourcepool.resourcePoolId")),
-    Column("name", String(255)),
-    # Column("globalAssetId", String(255)),
+    Column("resourceTypeId", ForeignKey("resourceType.resourceTypeId")),
+    Column("resourcePoolId", ForeignKey("resourcePool.resourcePoolId")),
+    Column("globalAssetId", String(255)),
     Column("parentId", String(255)),
-    Column("description", String(255)),
-    Column("elements", Text())
-    # Column("extensions", String(1024))
+    Column("description", String()),
+    Column("elements", Text()),
+    Column("extensions", String())
 )
 
 deploymentmanager = Table(
-    "deploymentmanager",
+    "deploymentManager",
     metadata,
     Column("updatetime", DateTime),
     Column("createtime", DateTime),
@@ -129,7 +133,7 @@ deploymentmanager = Table(
     Column("oCloudId", ForeignKey("ocloud.oCloudId")),
     Column("name", String(255)),
     Column("description", String(255)),
-    Column("deploymentManagementServiceEndpoint", String(255)),
+    Column("serviceUri", String(255)),
     Column("supportedLocations", String(255)),
     Column("capabilities", String(255)),
     Column("capacity", String(255)),
@@ -160,13 +164,40 @@ alarm_definition = Table(
     Column("alarmDefinitionId", String(255), primary_key=True),
     Column("alarmName", String(255), unique=True),
     Column("alarmLastChange", String(255)),
+    Column("alarmChangeType", String(255)),
     Column("alarmDescription", String(255)),
-    Column("proposeRepairActions", String(255)),
+    Column("proposedRepairActions", String(1024)),
     Column("clearingType", String(255)),
     Column("managementInterfaceId", String(255)),
     Column("pkNotificationField", String(255))
 )
 
+alarm_dictionary = Table(
+    "alarmDictionary",
+    metadata,
+    Column("updatetime", DateTime),
+    Column("createtime", DateTime),
+
+    Column("id", String(255), primary_key=True),
+    Column("entityType", String(255), unique=True),
+    Column("alarmDictionaryVersion", String(255)),
+    Column("alarmDictionarySchemaVersion", String(255)),
+    Column("vendor", String(255)),
+    Column("managementInterfaceId", String(255)),
+    Column("pkNotificationField", String(255))
+
+    # Column("resourceTypeId", ForeignKey("resourceType.resourceTypeId"))
+)
+
+association_table1 = Table(
+    'associationAlarmDictAndAlarmDef',
+    metadata,
+    Column("alarmDictionaryId", ForeignKey(
+        'alarmDictionary.id', ondelete='cascade')),
+    Column("alarmDefinitionId", ForeignKey(
+        'alarmDefinition.alarmDefinitionId'))
+)
+
 alarm_event_record = Table(
     "alarmEventRecord",
     metadata,
@@ -175,7 +206,7 @@ alarm_event_record = Table(
     Column("hash", String(255)),
 
     Column("alarmEventRecordId", String(255), primary_key=True),
-    Column("resourceTypeId", ForeignKey("resourcetype.resourceTypeId")),
+    Column("resourceTypeId", ForeignKey("resourceType.resourceTypeId")),
     Column("resourceId", ForeignKey("resource.resourceId")),
     Column("alarmDefinitionId", ForeignKey(
         "alarmDefinition.alarmDefinitionId")),
@@ -185,6 +216,7 @@ alarm_event_record = Table(
     Column("alarmChangedTime", String(255)),
     Column("alarmAcknowledgeTime", String(255)),
     Column("alarmAcknowledged", String(255)),
+    Column("extensions", String())
 )
 
 alarm_probable_cause = Table(
@@ -222,16 +254,43 @@ def wait_for_metadata_ready(engine):
 def start_o2ims_mappers(engine=None):
     logger.info("Starting O2 IMS mappers")
 
+    # IMS Infrastruture Monitoring Mappering
+    mapper(alarmModel.AlarmEventRecord, alarm_event_record)
+    alarmdefinition_mapper = mapper(
+        alarmModel.AlarmDefinition, alarm_definition)
+    mapper(alarmModel.ProbableCause, alarm_probable_cause)
+    mapper(alarmModel.AlarmSubscription, alarm_subscription)
+    alarm_dictionary_mapper = mapper(
+        alarmModel.AlarmDictionary, alarm_dictionary,
+        properties={
+            "alarmDefinition": relationship(alarmdefinition_mapper,
+                                            cascade='all,delete-orphan',
+                                            secondary=association_table1,
+                                            single_parent=True,
+                                            backref='alarmDictionaries')
+        }
+    )
+
     # IMS Infrastructure Inventory Mappering
     dm_mapper = mapper(ocloudModel.DeploymentManager, deploymentmanager)
     resourcepool_mapper = mapper(ocloudModel.ResourcePool, resourcepool)
-    resourcetype_mapper = mapper(ocloudModel.ResourceType, resourcetype)
+    resourcetype_mapper = mapper(
+        ocloudModel.ResourceType, resourcetype,
+        properties={
+            #     "alarmDictionary": relationship(alarmModel.AlarmDictionary,
+            #                                     uselist=False)
+            "alarmDictionary": relationship(alarm_dictionary_mapper,
+                                            backref=backref(
+                                                'resourceType', uselist=False))
+
+        }
+    )
     mapper(
         ocloudModel.Ocloud,
         ocloud,
         properties={
             "deploymentManagers": relationship(dm_mapper),
-            "resourceTypes": relationship(resourcetype_mapper),
+            "resourceTypes": relationship(resourcetype_mapper),
             "resourcePools": relationship(resourcepool_mapper)
         })
     mapper(
@@ -244,11 +303,5 @@ def start_o2ims_mappers(engine=None):
     )
     mapper(subModel.Subscription, subscription)
 
-    # IMS Infrastruture Monitoring Mappering
-    mapper(alarmModel.AlarmEventRecord, alarm_event_record)
-    mapper(alarmModel.AlarmDefinition, alarm_definition)
-    mapper(alarmModel.ProbableCause, alarm_probable_cause)
-    mapper(alarmModel.AlarmSubscription, alarm_subscription)
-
     if engine is not None:
         wait_for_metadata_ready(engine)