-# Copyright (C) 2021 Wind River Systems, Inc.\r
-#\r
-# Licensed under the Apache License, Version 2.0 (the "License");\r
-# you may not use this file except in compliance with the License.\r
-# You may obtain a copy of the License at\r
-#\r
-# http://www.apache.org/licenses/LICENSE-2.0\r
-#\r
-# Unless required by applicable law or agreed to in writing, software\r
-# distributed under the License is distributed on an "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-# See the License for the specific language governing permissions and\r
-# limitations under the License.\r
-\r
-# from typing_extensions import Required\r
-from sqlalchemy import (\r
- Table,\r
- MetaData,\r
- Column,\r
- Integer,\r
- String,\r
- Text,\r
- Enum,\r
- # Date,\r
- DateTime,\r
- ForeignKey,\r
- # Boolean,\r
- # engine,\r
- # event,\r
-)\r
-\r
-from sqlalchemy.orm import mapper, relationship\r
-# from sqlalchemy.sql.sqltypes import Integer\r
-\r
-from o2ims.domain import ocloud as ocloudModel\r
-from o2ims.domain import subscription_obj as subModel\r
-from o2ims.domain import configuration_obj as confModel\r
-from o2ims.domain.resource_type import ResourceTypeEnum\r
-\r
-from o2common.helper import o2logging\r
-logger = o2logging.get_logger(__name__)\r
-\r
-metadata = MetaData()\r
-\r
-ocloud = Table(\r
- "ocloud",\r
- metadata,\r
- Column("updatetime", DateTime),\r
- Column("createtime", DateTime),\r
- Column("hash", String(255)),\r
- Column("version_number", Integer),\r
-\r
- Column("oCloudId", String(255), primary_key=True),\r
- Column("globalcloudId", String(255)),\r
- Column("name", String(255)),\r
- Column("description", String(255)),\r
- Column("infrastructureManagementServiceEndpoint", String(255))\r
- # Column("extensions", String(1024))\r
-)\r
-\r
-resourcetype = Table(\r
- "resourcetype",\r
- metadata,\r
- Column("updatetime", DateTime),\r
- Column("createtime", DateTime),\r
- Column("hash", String(255)),\r
-\r
- Column("resourceTypeId", String(255), primary_key=True),\r
- Column("resourceTypeEnum", Enum(\r
- ResourceTypeEnum, native_enum=False), nullable=False),\r
- Column("oCloudId", ForeignKey("ocloud.oCloudId")),\r
- Column("name", String(255)),\r
- Column("vendor", String(255)),\r
- Column("model", String(255)),\r
- Column("version", String(255)),\r
- Column("description", String(255)),\r
- # Column("extensions", String(1024))\r
-)\r
-\r
-resourcepool = Table(\r
- "resourcepool",\r
- metadata,\r
- Column("updatetime", DateTime),\r
- Column("createtime", DateTime),\r
- Column("hash", String(255)),\r
- Column("version_number", Integer),\r
-\r
- Column("resourcePoolId", String(255), primary_key=True),\r
- Column("oCloudId", ForeignKey("ocloud.oCloudId")),\r
- Column("globalLocationId", String(255)),\r
- Column("name", String(255)),\r
- Column("location", String(255)),\r
- Column("description", String(255)),\r
- # Column("resources", String(1024))\r
- # Column("extensions", String(1024))\r
-)\r
-\r
-resource = Table(\r
- "resource",\r
- metadata,\r
- Column("updatetime", DateTime),\r
- Column("createtime", DateTime),\r
- Column("hash", String(255)),\r
- Column("version_number", Integer),\r
-\r
- Column("resourceId", String(255), primary_key=True),\r
- Column("resourceTypeId", ForeignKey("resourcetype.resourceTypeId")),\r
- Column("resourcePoolId", ForeignKey("resourcepool.resourcePoolId")),\r
- Column("name", String(255)),\r
- # Column("globalAssetId", String(255)),\r
- Column("parentId", String(255)),\r
- Column("description", String(255)),\r
- Column("elements", Text())\r
- # Column("extensions", String(1024))\r
-)\r
-\r
-deploymentmanager = Table(\r
- "deploymentmanager",\r
- metadata,\r
- Column("updatetime", DateTime),\r
- Column("createtime", DateTime),\r
- Column("hash", String(255)),\r
- Column("version_number", Integer),\r
-\r
- Column("deploymentManagerId", String(255), primary_key=True),\r
- Column("oCloudId", ForeignKey("ocloud.oCloudId")),\r
- Column("name", String(255)),\r
- Column("description", String(255)),\r
- Column("deploymentManagementServiceEndpoint", String(255)),\r
- Column("supportedLocations", String(255)),\r
- Column("capabilities", String(255)),\r
- Column("capacity", String(255)),\r
- # Column("extensions", String(1024))\r
-)\r
-\r
-subscription = Table(\r
- "subscription",\r
- metadata,\r
- Column("updatetime", DateTime),\r
- Column("createtime", DateTime),\r
- Column("hash", String(255)),\r
- Column("version_number", Integer),\r
-\r
- Column("subscriptionId", String(255), primary_key=True),\r
- Column("callback", String(255)),\r
- Column("consumerSubscriptionId", String(255)),\r
- Column("filter", String(255)),\r
-)\r
-\r
-configuration = Table(\r
- "configuration",\r
- metadata,\r
- Column("updatetime", DateTime),\r
- Column("createtime", DateTime),\r
-\r
- Column("configurationId", String(255), primary_key=True),\r
- Column("conftype", String(255)),\r
- Column("callback", String(255)),\r
- Column("status", String(255)),\r
- Column("comments", String(255)),\r
-)\r
-\r
-\r
-def start_o2ims_mappers(engine=None):\r
- logger.info("Starting O2 IMS mappers")\r
-\r
- dm_mapper = mapper(ocloudModel.DeploymentManager, deploymentmanager)\r
- resourcepool_mapper = mapper(ocloudModel.ResourcePool, resourcepool)\r
- resourcetype_mapper = mapper(ocloudModel.ResourceType, resourcetype)\r
- mapper(\r
- ocloudModel.Ocloud,\r
- ocloud,\r
- properties={\r
- "deploymentManagers": relationship(dm_mapper),\r
- "resourceTypes": relationship(resourcetype_mapper),\r
- "resourcePools": relationship(resourcepool_mapper)\r
- })\r
- mapper(\r
- ocloudModel.Resource,\r
- resource,\r
- properties={\r
- "resourceTypes": relationship(resourcetype_mapper),\r
- "resourcePools": relationship(resourcepool_mapper)\r
- }\r
- )\r
- mapper(subModel.Subscription, subscription)\r
- mapper(confModel.Configuration, configuration)\r
-\r
- if engine is not None:\r
- metadata.create_all(engine, checkfirst=True)\r
+# Copyright (C) 2021 Wind River Systems, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# from typing_extensions import Required
+from retry import retry
+from sqlalchemy import (
+ Table,
+ MetaData,
+ Column,
+ Integer,
+ String,
+ Text,
+ Enum,
+ # Date,
+ DateTime,
+ ForeignKey,
+ # Boolean,
+ # engine,
+ # event,
+ exc,
+)
+
+from sqlalchemy.orm import mapper, relationship
+# 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, ResourceKindEnum
+# from o2ims.domain.alarm_obj import AlarmLastChangeEnum, PerceivedSeverityEnum
+
+from o2common.helper import o2logging
+logger = o2logging.get_logger(__name__)
+
+metadata = MetaData()
+
+ocloud = Table(
+ "ocloud",
+ metadata,
+ Column("updatetime", DateTime),
+ Column("createtime", DateTime),
+ Column("hash", String(255)),
+ Column("version_number", Integer),
+
+ Column("oCloudId", String(255), primary_key=True),
+ Column("globalCloudId", String(255)),
+ Column("name", String(255)),
+ Column("description", String(255)),
+ Column("serviceUri", String(255)),
+ Column("smoRegistrationService", String(255))
+ # Column("extensions", String(1024))
+)
+
+resourcetype = Table(
+ "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("name", String(255)),
+ Column("description", String(255)),
+ Column("vendor", String(255)),
+ Column("model", String(255)),
+ Column("version", String(255)),
+ Column("resourceKind", Enum(ResourceKindEnum)),
+ Column("resourceClass", Enum(ResourceTypeEnum)),
+ # Column("extensions", String(1024))
+
+ Column("oCloudId", ForeignKey("ocloud.oCloudId")),
+)
+
+resourcepool = Table(
+ "resourcePool",
+ metadata,
+ Column("updatetime", DateTime),
+ Column("createtime", DateTime),
+ Column("hash", String(255)),
+ Column("version_number", Integer),
+
+ Column("resourcePoolId", String(255), primary_key=True),
+ Column("oCloudId", ForeignKey("ocloud.oCloudId")),
+ Column("globalLocationId", String(255)),
+ Column("name", String(255)),
+ Column("location", String(255)),
+ Column("description", String(255)),
+ # Column("resources", String(1024))
+ # Column("extensions", String(1024))
+)
+
+resource = Table(
+ "resource",
+ metadata,
+ Column("updatetime", DateTime),
+ Column("createtime", DateTime),
+ Column("hash", String(255)),
+ 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("parentId", String(255)),
+ Column("description", String(255)),
+ Column("elements", Text())
+ # Column("extensions", String(1024))
+)
+
+deploymentmanager = Table(
+ "deploymentManager",
+ metadata,
+ Column("updatetime", DateTime),
+ Column("createtime", DateTime),
+ Column("hash", String(255)),
+ Column("version_number", Integer),
+
+ Column("deploymentManagerId", String(255), primary_key=True),
+ Column("oCloudId", ForeignKey("ocloud.oCloudId")),
+ Column("name", String(255)),
+ Column("description", String(255)),
+ Column("serviceUri", String(255)),
+ Column("supportedLocations", String(255)),
+ Column("capabilities", String(255)),
+ Column("capacity", String(255)),
+ Column("profile", Text())
+ # Column("extensions", String(1024))
+)
+
+subscription = Table(
+ "subscription",
+ metadata,
+ Column("updatetime", DateTime),
+ Column("createtime", DateTime),
+ Column("hash", String(255)),
+ Column("version_number", Integer),
+
+ Column("subscriptionId", String(255), primary_key=True),
+ Column("callback", String(255)),
+ Column("consumerSubscriptionId", String(255)),
+ Column("filter", String(255)),
+)
+
+alarm_definition = Table(
+ "alarmDefinition",
+ metadata,
+ Column("updatetime", DateTime),
+ Column("createtime", DateTime),
+
+ Column("alarmDefinitionId", String(255), primary_key=True),
+ Column("alarmName", String(255), unique=True),
+ Column("alarmLastChange", String(255)),
+ Column("alarmDescription", String(255)),
+ Column("proposeRepairActions", String(255)),
+ Column("clearingType", String(255)),
+ Column("managementInterfaceId", String(255)),
+ Column("pkNotificationField", String(255))
+)
+
+alarm_event_record = Table(
+ "alarmEventRecord",
+ metadata,
+ Column("updatetime", DateTime),
+ Column("createtime", DateTime),
+ Column("hash", String(255)),
+
+ Column("alarmEventRecordId", String(255), primary_key=True),
+ Column("resourceTypeId", ForeignKey("resourceType.resourceTypeId")),
+ Column("resourceId", ForeignKey("resource.resourceId")),
+ Column("alarmDefinitionId", ForeignKey(
+ "alarmDefinition.alarmDefinitionId")),
+ Column("probableCauseId", String(255)),
+ Column("perceivedSeverity", Integer),
+ Column("alarmRaisedTime", String(255)),
+ Column("alarmChangedTime", String(255)),
+ Column("alarmAcknowledgeTime", String(255)),
+ Column("alarmAcknowledged", String(255)),
+)
+
+alarm_probable_cause = Table(
+ "probableCause",
+ metadata,
+ Column("updatetime", DateTime),
+ Column("createtime", DateTime),
+ Column("hash", String(255)),
+
+ Column("probableCauseId", String(255), primary_key=True),
+ Column("name", String(255)),
+ Column("description", String(255)),
+)
+
+alarm_subscription = Table(
+ "alarmSubscription",
+ metadata,
+ Column("updatetime", DateTime),
+ Column("createtime", DateTime),
+
+ Column("alarmSubscriptionId", String(255), primary_key=True),
+ Column("callback", String(255)),
+ Column("consumerSubscriptionId", String(255)),
+ Column("filter", String(255)),
+)
+
+
+@retry((exc.IntegrityError), tries=3, delay=2)
+def wait_for_metadata_ready(engine):
+ # wait for mapper ready
+ metadata.create_all(engine, checkfirst=True)
+ logger.info("metadata is ready")
+
+
+def start_o2ims_mappers(engine=None):
+ logger.info("Starting O2 IMS mappers")
+
+ # IMS Infrastructure Inventory Mappering
+ dm_mapper = mapper(ocloudModel.DeploymentManager, deploymentmanager)
+ resourcepool_mapper = mapper(ocloudModel.ResourcePool, resourcepool)
+ resourcetype_mapper = mapper(ocloudModel.ResourceType, resourcetype)
+ mapper(
+ ocloudModel.Ocloud,
+ ocloud,
+ properties={
+ "deploymentManagers": relationship(dm_mapper),
+ "resourceTypes": relationship(resourcetype_mapper),
+ "resourcePools": relationship(resourcepool_mapper)
+ })
+ mapper(
+ ocloudModel.Resource,
+ resource,
+ properties={
+ "resourceTypes": relationship(resourcetype_mapper),
+ "resourcePools": relationship(resourcepool_mapper)
+ }
+ )
+ 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)