X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=o2ims%2Fadapter%2Form.py;h=e8914e11c5c445fa9862c043be83e23f67c9c2d0;hb=f9746f13be900f5ad7e9e2a9dbf7527e74b5d428;hp=7ad7a20bbeb43a2ad9b171eb82860d291a575ce0;hpb=44f01a560347914798d8f913696d0e495ee076f8;p=pti%2Fo2.git diff --git a/o2ims/adapter/orm.py b/o2ims/adapter/orm.py index 7ad7a20..e8914e1 100644 --- a/o2ims/adapter/orm.py +++ b/o2ims/adapter/orm.py @@ -1,172 +1,259 @@ -# 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 sqlalchemy import ( - Table, - MetaData, - Column, - Integer, - String, - Text, - Enum, - # Date, - DateTime, - ForeignKey, - # engine, - # event, -) - -from sqlalchemy.orm import mapper, relationship -# from sqlalchemy.sql.sqltypes import Integer - -from o2ims.domain import ocloud as ocloudModel -from o2ims.domain.resource_type import ResourceTypeEnum - -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("infrastructureManagementServiceEndpoint", String(255)) - # Column("extensions", String(1024)) -) - -resourcetype = Table( - "resourcetype", - metadata, - Column("updatetime", DateTime), - Column("createtime", DateTime), - Column("hash", String(255)), - - Column("resourceTypeId", String(255), primary_key=True), - Column("resourceTypeEnum", Enum(ResourceTypeEnum), nullable=False), - Column("oCloudId", ForeignKey("ocloud.oCloudId")), - Column("name", String(255)), - Column("vendor", String(255)), - Column("model", String(255)), - Column("version", String(255)), - Column("description", String(255)), - # Column("extensions", String(1024)) -) - -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("deploymentManagementServiceEndpoint", String(255)), - Column("supportedLocations", String(255)), - Column("capabilities", String(255)), - Column("capacity", String(255)), - # 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)), -) - - -def start_o2ims_mappers(engine=None): - logger.info("Starting O2 IMS mappers") - - 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(ocloudModel.Subscription, subscription) - - if engine is not None: - metadata.create_all(engine) +# 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()), + Column("elements", Text()), + Column("extensions", String()) +) + +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)