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 alarm_obj as alarmModel
40 from o2ims.domain.resource_type import ResourceTypeEnum
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("extensions", String(1024))
67 Column("updatetime", DateTime),
68 Column("createtime", DateTime),
69 Column("hash", String(255)),
71 Column("resourceTypeId", String(255), primary_key=True),
72 Column("resourceTypeEnum", Enum(
73 ResourceTypeEnum, native_enum=False), nullable=False),
74 Column("oCloudId", ForeignKey("ocloud.oCloudId")),
75 Column("name", String(255)),
76 Column("vendor", String(255)),
77 Column("model", String(255)),
78 Column("version", String(255)),
79 Column("description", String(255)),
80 # Column("extensions", String(1024))
86 Column("updatetime", DateTime),
87 Column("createtime", DateTime),
88 Column("hash", String(255)),
89 Column("version_number", Integer),
91 Column("resourcePoolId", String(255), primary_key=True),
92 Column("oCloudId", ForeignKey("ocloud.oCloudId")),
93 Column("globalLocationId", String(255)),
94 Column("name", String(255)),
95 Column("location", String(255)),
96 Column("description", String(255)),
97 # Column("resources", String(1024))
98 # Column("extensions", String(1024))
104 Column("updatetime", DateTime),
105 Column("createtime", DateTime),
106 Column("hash", String(255)),
107 Column("version_number", Integer),
109 Column("resourceId", String(255), primary_key=True),
110 Column("resourceTypeId", ForeignKey("resourcetype.resourceTypeId")),
111 Column("resourcePoolId", ForeignKey("resourcepool.resourcePoolId")),
112 Column("name", String(255)),
113 # Column("globalAssetId", String(255)),
114 Column("parentId", String(255)),
115 Column("description", String(255)),
116 Column("elements", Text())
117 # Column("extensions", String(1024))
120 deploymentmanager = Table(
123 Column("updatetime", DateTime),
124 Column("createtime", DateTime),
125 Column("hash", String(255)),
126 Column("version_number", Integer),
128 Column("deploymentManagerId", String(255), primary_key=True),
129 Column("oCloudId", ForeignKey("ocloud.oCloudId")),
130 Column("name", String(255)),
131 Column("description", String(255)),
132 Column("deploymentManagementServiceEndpoint", String(255)),
133 Column("supportedLocations", String(255)),
134 Column("capabilities", String(255)),
135 Column("capacity", String(255)),
136 Column("profile", Text())
137 # Column("extensions", String(1024))
140 subscription = Table(
143 Column("updatetime", DateTime),
144 Column("createtime", DateTime),
145 Column("hash", String(255)),
146 Column("version_number", Integer),
148 Column("subscriptionId", String(255), primary_key=True),
149 Column("callback", String(255)),
150 Column("consumerSubscriptionId", String(255)),
151 Column("filter", String(255)),
154 alarm_definition = Table(
157 Column("updatetime", DateTime),
158 Column("createtime", DateTime),
160 Column("alarmDefinitionId", String(255), primary_key=True),
161 Column("alarmName", String(255), unique=True),
162 Column("alarmLastChange", String(255)),
163 Column("alarmDescription", String(255)),
164 Column("proposeRepairActions", String(255)),
165 Column("clearingType", String(255)),
166 Column("managementInterfaceId", String(255)),
167 Column("pkNotificationField", String(255))
170 alarm_event_record = Table(
173 Column("updatetime", DateTime),
174 Column("createtime", DateTime),
175 Column("hash", String(255)),
177 Column("alarmEventRecordId", String(255), primary_key=True),
178 Column("resourceTypeId", ForeignKey("resourcetype.resourceTypeId")),
179 Column("resourceId", ForeignKey("resource.resourceId")),
180 Column("alarmDefinitionId", ForeignKey(
181 "alarmDefinition.alarmDefinitionId")),
182 Column("probableCauseId", String(255)),
183 Column("perceivedSeverity", Integer),
184 Column("alarmRaisedTime", String(255)),
185 Column("alarmChangedTime", String(255)),
186 Column("alarmAcknowledgeTime", String(255)),
187 Column("alarmAcknowledged", String(255)),
190 alarm_probable_cause = Table(
193 Column("updatetime", DateTime),
194 Column("createtime", DateTime),
195 Column("hash", String(255)),
197 Column("probableCauseId", String(255), primary_key=True),
198 Column("name", String(255)),
199 Column("description", String(255)),
202 alarm_subscription = Table(
205 Column("updatetime", DateTime),
206 Column("createtime", DateTime),
208 Column("alarmSubscriptionId", String(255), primary_key=True),
209 Column("callback", String(255)),
210 Column("consumerSubscriptionId", String(255)),
211 Column("filter", String(255)),
215 @retry((exc.IntegrityError), tries=3, delay=2)
216 def wait_for_metadata_ready(engine):
217 # wait for mapper ready
218 metadata.create_all(engine, checkfirst=True)
219 logger.info("metadata is ready")
222 def start_o2ims_mappers(engine=None):
223 logger.info("Starting O2 IMS mappers")
225 # IMS Infrastructure Inventory Mappering
226 dm_mapper = mapper(ocloudModel.DeploymentManager, deploymentmanager)
227 resourcepool_mapper = mapper(ocloudModel.ResourcePool, resourcepool)
228 resourcetype_mapper = mapper(ocloudModel.ResourceType, resourcetype)
233 "deploymentManagers": relationship(dm_mapper),
234 "resourceTypes": relationship(resourcetype_mapper),
235 "resourcePools": relationship(resourcepool_mapper)
238 ocloudModel.Resource,
241 "resourceTypes": relationship(resourcetype_mapper),
242 "resourcePools": relationship(resourcepool_mapper)
245 mapper(subModel.Subscription, subscription)
247 # IMS Infrastruture Monitoring Mappering
248 mapper(alarmModel.AlarmEventRecord, alarm_event_record)
249 mapper(alarmModel.AlarmDefinition, alarm_definition)
250 mapper(alarmModel.ProbableCause, alarm_probable_cause)
251 mapper(alarmModel.AlarmSubscription, alarm_subscription)
253 if engine is not None:
254 wait_for_metadata_ready(engine)