1 # Copyright (C) 2021 Wind River Systems, Inc.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 # from typing_extensions import Required
16 from retry import retry
17 from sqlalchemy import (
34 from sqlalchemy.orm import mapper, relationship, backref
35 # from sqlalchemy.sql.sqltypes import Integer
37 from o2ims.domain import ocloud as ocloudModel
38 from o2ims.domain import subscription_obj as subModel
39 from o2ims.domain import alarm_obj as alarmModel
40 from o2ims.domain.resource_type import ResourceTypeEnum, ResourceKindEnum
41 # from o2ims.domain.alarm_obj import AlarmLastChangeEnum, PerceivedSeverityEnum
43 from o2common.helper import o2logging
44 logger = o2logging.get_logger(__name__)
51 Column("updatetime", DateTime),
52 Column("createtime", DateTime),
53 Column("hash", String(255)),
54 Column("version_number", Integer),
56 Column("oCloudId", String(255), primary_key=True),
57 Column("globalCloudId", String(255)),
58 Column("name", String(255)),
59 Column("description", String(255)),
60 Column("serviceUri", String(255)),
61 Column("smoRegistrationService", String(255))
62 # Column("extensions", String(1024))
68 Column("updatetime", DateTime),
69 Column("createtime", DateTime),
70 Column("hash", String(255)),
71 Column("version_number", Integer),
73 Column("resourceTypeId", String(255), primary_key=True),
74 Column("resourceTypeEnum", Enum(
75 ResourceTypeEnum, native_enum=False), nullable=False),
76 Column("name", String(255)),
77 Column("description", String(255)),
78 Column("vendor", String(255)),
79 Column("model", String(255)),
80 Column("version", String(255)),
81 Column("resourceKind", Enum(ResourceKindEnum)),
82 Column("resourceClass", Enum(ResourceTypeEnum)),
83 # Column("extensions", String(1024))
85 Column("alarmDictionaryId", ForeignKey("alarmDictionary.id"))
91 Column("updatetime", DateTime),
92 Column("createtime", DateTime),
93 Column("hash", String(255)),
94 Column("version_number", Integer),
96 Column("resourcePoolId", String(255), primary_key=True),
97 Column("oCloudId", ForeignKey("ocloud.oCloudId")),
98 Column("globalLocationId", String(255)),
99 Column("name", String(255)),
100 Column("location", String(255)),
101 Column("description", String(255)),
102 # Column("resources", String(1024))
103 # Column("extensions", String(1024))
109 Column("updatetime", DateTime),
110 Column("createtime", DateTime),
111 Column("hash", String(255)),
112 Column("version_number", Integer),
114 Column("resourceId", String(255), primary_key=True),
115 Column("resourceTypeId", ForeignKey("resourceType.resourceTypeId")),
116 Column("resourcePoolId", ForeignKey("resourcePool.resourcePoolId")),
117 Column("globalAssetId", String(255)),
118 Column("parentId", String(255)),
119 Column("description", String()),
120 Column("elements", Text()),
121 Column("extensions", String())
124 deploymentmanager = Table(
127 Column("updatetime", DateTime),
128 Column("createtime", DateTime),
129 Column("hash", String(255)),
130 Column("version_number", Integer),
132 Column("deploymentManagerId", String(255), primary_key=True),
133 Column("oCloudId", ForeignKey("ocloud.oCloudId")),
134 Column("name", String(255)),
135 Column("description", String(255)),
136 Column("serviceUri", String(255)),
137 Column("supportedLocations", String(255)),
138 Column("capabilities", String(255)),
139 Column("capacity", String(255)),
140 Column("profile", Text())
141 # Column("extensions", String(1024))
144 subscription = Table(
147 Column("updatetime", DateTime),
148 Column("createtime", DateTime),
149 Column("hash", String(255)),
150 Column("version_number", Integer),
152 Column("subscriptionId", String(255), primary_key=True),
153 Column("callback", String(255)),
154 Column("consumerSubscriptionId", String(255)),
155 Column("filter", String(255)),
158 alarm_definition = Table(
161 Column("updatetime", DateTime),
162 Column("createtime", DateTime),
164 Column("alarmDefinitionId", String(255), primary_key=True),
165 Column("alarmName", String(255), unique=True),
166 Column("alarmLastChange", String(255)),
167 Column("alarmChangeType", String(255)),
168 Column("alarmDescription", String(255)),
169 Column("proposedRepairActions", String(1024)),
170 Column("clearingType", String(255)),
171 Column("managementInterfaceId", String(255)),
172 Column("pkNotificationField", String(255))
175 alarm_dictionary = Table(
178 Column("updatetime", DateTime),
179 Column("createtime", DateTime),
181 Column("id", String(255), primary_key=True),
182 Column("entityType", String(255), unique=True),
183 Column("alarmDictionaryVersion", String(255)),
184 Column("alarmDictionarySchemaVersion", String(255)),
185 Column("vendor", String(255)),
186 Column("managementInterfaceId", String(255)),
187 Column("pkNotificationField", String(255))
189 # Column("resourceTypeId", ForeignKey("resourceType.resourceTypeId"))
192 association_table1 = Table(
193 'associationAlarmDictAndAlarmDef',
195 Column("alarmDictionaryId", ForeignKey(
196 'alarmDictionary.id', ondelete='cascade')),
197 Column("alarmDefinitionId", ForeignKey(
198 'alarmDefinition.alarmDefinitionId'))
201 alarm_event_record = Table(
204 Column("updatetime", DateTime),
205 Column("createtime", DateTime),
206 Column("hash", String(255)),
208 Column("alarmEventRecordId", String(255), primary_key=True),
209 Column("resourceTypeId", ForeignKey("resourceType.resourceTypeId")),
210 Column("resourceId", ForeignKey("resource.resourceId")),
211 Column("alarmDefinitionId", ForeignKey(
212 "alarmDefinition.alarmDefinitionId")),
213 Column("probableCauseId", String(255)),
214 Column("perceivedSeverity", Integer),
215 Column("alarmRaisedTime", String(255)),
216 Column("alarmChangedTime", String(255)),
217 Column("alarmAcknowledgeTime", String(255)),
218 Column("alarmAcknowledged", String(255)),
221 alarm_probable_cause = Table(
224 Column("updatetime", DateTime),
225 Column("createtime", DateTime),
226 Column("hash", String(255)),
228 Column("probableCauseId", String(255), primary_key=True),
229 Column("name", String(255)),
230 Column("description", String(255)),
233 alarm_subscription = Table(
236 Column("updatetime", DateTime),
237 Column("createtime", DateTime),
239 Column("alarmSubscriptionId", String(255), primary_key=True),
240 Column("callback", String(255)),
241 Column("consumerSubscriptionId", String(255)),
242 Column("filter", String(255)),
246 @retry((exc.IntegrityError), tries=3, delay=2)
247 def wait_for_metadata_ready(engine):
248 # wait for mapper ready
249 metadata.create_all(engine, checkfirst=True)
250 logger.info("metadata is ready")
253 def start_o2ims_mappers(engine=None):
254 logger.info("Starting O2 IMS mappers")
256 # IMS Infrastruture Monitoring Mappering
257 mapper(alarmModel.AlarmEventRecord, alarm_event_record)
258 alarmdefinition_mapper = mapper(
259 alarmModel.AlarmDefinition, alarm_definition)
260 mapper(alarmModel.ProbableCause, alarm_probable_cause)
261 mapper(alarmModel.AlarmSubscription, alarm_subscription)
262 alarm_dictionary_mapper = mapper(
263 alarmModel.AlarmDictionary, alarm_dictionary,
265 "alarmDefinition": relationship(alarmdefinition_mapper,
266 cascade='all,delete-orphan',
267 secondary=association_table1,
269 backref='alarmDictionaries')
273 # IMS Infrastructure Inventory Mappering
274 dm_mapper = mapper(ocloudModel.DeploymentManager, deploymentmanager)
275 resourcepool_mapper = mapper(ocloudModel.ResourcePool, resourcepool)
276 resourcetype_mapper = mapper(
277 ocloudModel.ResourceType, resourcetype,
279 # "alarmDictionary": relationship(alarmModel.AlarmDictionary,
281 "alarmDictionary": relationship(alarm_dictionary_mapper,
283 'resourceType', uselist=False))
291 "deploymentManagers": relationship(dm_mapper),
292 # "resourceTypes": relationship(resourcetype_mapper),
293 "resourcePools": relationship(resourcepool_mapper)
296 ocloudModel.Resource,
299 "resourceTypes": relationship(resourcetype_mapper),
300 "resourcePools": relationship(resourcepool_mapper)
303 mapper(subModel.Subscription, subscription)
305 if engine is not None:
306 wait_for_metadata_ready(engine)