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("name", String(255)),
118 Column("globalAssetId", String(255)),
119 Column("parentId", String(255)),
120 Column("description", String()),
121 Column("elements", Text()),
122 Column("extensions", String())
125 deploymentmanager = Table(
128 Column("updatetime", DateTime),
129 Column("createtime", DateTime),
130 Column("hash", String(255)),
131 Column("version_number", Integer),
133 Column("deploymentManagerId", String(255), primary_key=True),
134 Column("oCloudId", ForeignKey("ocloud.oCloudId")),
135 Column("name", String(255)),
136 Column("description", String(255)),
137 Column("serviceUri", String(255)),
138 Column("supportedLocations", String(255)),
139 Column("capabilities", String(255)),
140 Column("capacity", String(255)),
141 Column("profile", Text())
142 # Column("extensions", String(1024))
145 subscription = Table(
148 Column("updatetime", DateTime),
149 Column("createtime", DateTime),
150 Column("hash", String(255)),
151 Column("version_number", Integer),
153 Column("subscriptionId", String(255), primary_key=True),
154 Column("callback", String(255)),
155 Column("consumerSubscriptionId", String(255)),
156 Column("filter", String(255)),
159 alarm_definition = Table(
162 Column("updatetime", DateTime),
163 Column("createtime", DateTime),
165 Column("alarmDefinitionId", String(255), primary_key=True),
166 Column("alarmName", String(255), unique=True),
167 Column("alarmLastChange", String(255)),
168 Column("alarmChangeType", String(255)),
169 Column("alarmDescription", String(255)),
170 Column("proposedRepairActions", String(1024)),
171 Column("clearingType", String(255)),
172 Column("managementInterfaceId", String(255)),
173 Column("pkNotificationField", String(255))
176 alarm_dictionary = Table(
179 Column("updatetime", DateTime),
180 Column("createtime", DateTime),
182 Column("id", String(255), primary_key=True),
183 Column("entityType", String(255), unique=True),
184 Column("alarmDictionaryVersion", String(255)),
185 Column("alarmDictionarySchemaVersion", String(255)),
186 Column("vendor", String(255)),
187 Column("managementInterfaceId", String(255)),
188 Column("pkNotificationField", String(255))
190 # Column("resourceTypeId", ForeignKey("resourceType.resourceTypeId"))
193 association_table1 = Table(
194 'associationAlarmDictAndAlarmDef',
196 Column("alarmDictionaryId", ForeignKey(
197 'alarmDictionary.id', ondelete='cascade')),
198 Column("alarmDefinitionId", ForeignKey(
199 'alarmDefinition.alarmDefinitionId'))
202 alarm_event_record = Table(
205 Column("updatetime", DateTime),
206 Column("createtime", DateTime),
207 Column("hash", String(255)),
209 Column("alarmEventRecordId", String(255), primary_key=True),
210 Column("resourceTypeId", ForeignKey("resourceType.resourceTypeId")),
211 Column("resourceId", ForeignKey("resource.resourceId")),
212 Column("alarmDefinitionId", ForeignKey(
213 "alarmDefinition.alarmDefinitionId")),
214 Column("probableCauseId", String(255)),
215 Column("perceivedSeverity", Integer),
216 Column("alarmRaisedTime", String(255)),
217 Column("alarmChangedTime", String(255)),
218 Column("alarmAcknowledgeTime", String(255)),
219 Column("alarmAcknowledged", String(255)),
222 alarm_probable_cause = Table(
225 Column("updatetime", DateTime),
226 Column("createtime", DateTime),
227 Column("hash", String(255)),
229 Column("probableCauseId", String(255), primary_key=True),
230 Column("name", String(255)),
231 Column("description", String(255)),
234 alarm_subscription = Table(
237 Column("updatetime", DateTime),
238 Column("createtime", DateTime),
240 Column("alarmSubscriptionId", String(255), primary_key=True),
241 Column("callback", String(255)),
242 Column("consumerSubscriptionId", String(255)),
243 Column("filter", String(255)),
247 @retry((exc.IntegrityError), tries=3, delay=2)
248 def wait_for_metadata_ready(engine):
249 # wait for mapper ready
250 metadata.create_all(engine, checkfirst=True)
251 logger.info("metadata is ready")
254 def start_o2ims_mappers(engine=None):
255 logger.info("Starting O2 IMS mappers")
257 # IMS Infrastruture Monitoring Mappering
258 mapper(alarmModel.AlarmEventRecord, alarm_event_record)
259 alarmdefinition_mapper = mapper(
260 alarmModel.AlarmDefinition, alarm_definition)
261 mapper(alarmModel.ProbableCause, alarm_probable_cause)
262 mapper(alarmModel.AlarmSubscription, alarm_subscription)
263 alarm_dictionary_mapper = mapper(
264 alarmModel.AlarmDictionary, alarm_dictionary,
266 "alarmDefinition": relationship(alarmdefinition_mapper,
267 cascade='all,delete-orphan',
268 secondary=association_table1,
270 backref='alarmDictionaries')
274 # IMS Infrastructure Inventory Mappering
275 dm_mapper = mapper(ocloudModel.DeploymentManager, deploymentmanager)
276 resourcepool_mapper = mapper(ocloudModel.ResourcePool, resourcepool)
277 resourcetype_mapper = mapper(
278 ocloudModel.ResourceType, resourcetype,
280 # "alarmDictionary": relationship(alarmModel.AlarmDictionary,
282 "alarmDictionary": relationship(alarm_dictionary_mapper,
284 'resourceType', uselist=False))
292 "deploymentManagers": relationship(dm_mapper),
293 # "resourceTypes": relationship(resourcetype_mapper),
294 "resourcePools": relationship(resourcepool_mapper)
297 ocloudModel.Resource,
300 "resourceTypes": relationship(resourcetype_mapper),
301 "resourcePools": relationship(resourcepool_mapper)
304 mapper(subModel.Subscription, subscription)
306 if engine is not None:
307 wait_for_metadata_ready(engine)