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
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 configuration_obj as confModel
40 from o2ims.domain import alarm_obj as alarmModel
41 from o2ims.domain.resource_type import ResourceTypeEnum
42 # from o2ims.domain.alarm_obj import AlarmLastChangeEnum, PerceivedSeverityEnum
44 from o2common.helper import o2logging
45 logger = o2logging.get_logger(__name__)
52 Column("updatetime", DateTime),
53 Column("createtime", DateTime),
54 Column("hash", String(255)),
55 Column("version_number", Integer),
57 Column("oCloudId", String(255), primary_key=True),
58 Column("globalcloudId", String(255)),
59 Column("name", String(255)),
60 Column("description", String(255)),
61 Column("infrastructureManagementServiceEndpoint", String(255))
62 # Column("extensions", String(1024))
68 Column("updatetime", DateTime),
69 Column("createtime", DateTime),
70 Column("hash", String(255)),
72 Column("resourceTypeId", String(255), primary_key=True),
73 Column("resourceTypeEnum", Enum(
74 ResourceTypeEnum, native_enum=False), nullable=False),
75 Column("oCloudId", ForeignKey("ocloud.oCloudId")),
76 Column("name", String(255)),
77 Column("vendor", String(255)),
78 Column("model", String(255)),
79 Column("version", String(255)),
80 Column("description", String(255)),
81 # Column("extensions", String(1024))
87 Column("updatetime", DateTime),
88 Column("createtime", DateTime),
89 Column("hash", String(255)),
90 Column("version_number", Integer),
92 Column("resourcePoolId", String(255), primary_key=True),
93 Column("oCloudId", ForeignKey("ocloud.oCloudId")),
94 Column("globalLocationId", String(255)),
95 Column("name", String(255)),
96 Column("location", String(255)),
97 Column("description", String(255)),
98 # Column("resources", String(1024))
99 # Column("extensions", String(1024))
105 Column("updatetime", DateTime),
106 Column("createtime", DateTime),
107 Column("hash", String(255)),
108 Column("version_number", Integer),
110 Column("resourceId", String(255), primary_key=True),
111 Column("resourceTypeId", ForeignKey("resourcetype.resourceTypeId")),
112 Column("resourcePoolId", ForeignKey("resourcepool.resourcePoolId")),
113 Column("name", String(255)),
114 # Column("globalAssetId", String(255)),
115 Column("parentId", String(255)),
116 Column("description", String(255)),
117 Column("elements", Text())
118 # Column("extensions", String(1024))
121 deploymentmanager = Table(
124 Column("updatetime", DateTime),
125 Column("createtime", DateTime),
126 Column("hash", String(255)),
127 Column("version_number", Integer),
129 Column("deploymentManagerId", String(255), primary_key=True),
130 Column("oCloudId", ForeignKey("ocloud.oCloudId")),
131 Column("name", String(255)),
132 Column("description", String(255)),
133 Column("deploymentManagementServiceEndpoint", String(255)),
134 Column("supportedLocations", String(255)),
135 Column("capabilities", String(255)),
136 Column("capacity", String(255)),
137 Column("profile", Text())
138 # Column("extensions", String(1024))
141 subscription = Table(
144 Column("updatetime", DateTime),
145 Column("createtime", DateTime),
146 Column("hash", String(255)),
147 Column("version_number", Integer),
149 Column("subscriptionId", String(255), primary_key=True),
150 Column("callback", String(255)),
151 Column("consumerSubscriptionId", String(255)),
152 Column("filter", String(255)),
155 configuration = Table(
158 Column("updatetime", DateTime),
159 Column("createtime", DateTime),
161 Column("configurationId", String(255), primary_key=True),
162 Column("conftype", String(255)),
163 Column("callback", String(255)),
164 Column("status", String(255)),
165 Column("comments", String(255)),
168 alarm_definition = Table(
171 Column("updatetime", DateTime),
172 Column("createtime", DateTime),
174 Column("alarmDefinitionId", String(255), primary_key=True),
175 Column("alarmName", String(255), unique=True),
176 Column("alarmLastChange", String(255)),
177 Column("alarmDescription", String(255)),
178 Column("proposeRepairActions", String(255)),
179 Column("clearingType", String(255)),
180 Column("managementInterfaceId", String(255)),
181 Column("pkNotificationField", String(255))
184 alarm_event_record = Table(
187 Column("updatetime", DateTime),
188 Column("createtime", DateTime),
189 Column("hash", String(255)),
191 Column("alarmEventRecordId", String(255), primary_key=True),
192 Column("resourceTypeId", ForeignKey("resourcetype.resourceTypeId")),
193 Column("resourceId", ForeignKey("resource.resourceId")),
194 Column("alarmDefinitionId", ForeignKey(
195 "alarmDefinition.alarmDefinitionId")),
196 Column("probableCauseId", String(255)),
197 Column("perceivedSeverity", Integer),
198 Column("alarmRaisedTime", String(255)),
199 Column("alarmChangedTime", String(255)),
200 Column("alarmAcknowledgeTime", String(255)),
201 Column("alarmAcknowledged", String(255)),
204 alarm_probable_cause = Table(
207 Column("updatetime", DateTime),
208 Column("createtime", DateTime),
209 Column("hash", String(255)),
211 Column("probableCauseId", String(255), primary_key=True),
212 Column("name", String(255)),
213 Column("description", String(255)),
216 alarm_subscription = Table(
219 Column("updatetime", DateTime),
220 Column("createtime", DateTime),
222 Column("alarmSubscriptionId", String(255), primary_key=True),
223 Column("callback", String(255)),
224 Column("consumerSubscriptionId", String(255)),
225 Column("filter", String(255)),
229 @retry((exc.IntegrityError), tries=3, delay=2)
230 def wait_for_metadata_ready(engine):
231 # wait for mapper ready
232 metadata.create_all(engine, checkfirst=True)
233 logger.info("metadata is ready")
236 def start_o2ims_mappers(engine=None):
237 logger.info("Starting O2 IMS mappers")
239 # IMS Infrastructure Inventory Mappering
240 dm_mapper = mapper(ocloudModel.DeploymentManager, deploymentmanager)
241 resourcepool_mapper = mapper(ocloudModel.ResourcePool, resourcepool)
242 resourcetype_mapper = mapper(ocloudModel.ResourceType, resourcetype)
247 "deploymentManagers": relationship(dm_mapper),
248 "resourceTypes": relationship(resourcetype_mapper),
249 "resourcePools": relationship(resourcepool_mapper)
252 ocloudModel.Resource,
255 "resourceTypes": relationship(resourcetype_mapper),
256 "resourcePools": relationship(resourcepool_mapper)
259 mapper(subModel.Subscription, subscription)
260 mapper(confModel.Configuration, configuration)
262 # IMS Infrastruture Monitoring Mappering
263 mapper(alarmModel.AlarmEventRecord, alarm_event_record)
264 mapper(alarmModel.AlarmDefinition, alarm_definition)
265 mapper(alarmModel.ProbableCause, alarm_probable_cause)
266 mapper(alarmModel.AlarmSubscription, alarm_subscription)
268 if engine is not None:
269 wait_for_metadata_ready(engine)