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, 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("oCloudId", ForeignKey("ocloud.oCloudId")),
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(255)),
121 Column("elements", Text())
122 # Column("extensions", String(1024))
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("alarmDescription", String(255)),
169 Column("proposeRepairActions", String(255)),
170 Column("clearingType", String(255)),
171 Column("managementInterfaceId", String(255)),
172 Column("pkNotificationField", String(255))
175 alarm_event_record = Table(
178 Column("updatetime", DateTime),
179 Column("createtime", DateTime),
180 Column("hash", String(255)),
182 Column("alarmEventRecordId", String(255), primary_key=True),
183 Column("resourceTypeId", ForeignKey("resourceType.resourceTypeId")),
184 Column("resourceId", ForeignKey("resource.resourceId")),
185 Column("alarmDefinitionId", ForeignKey(
186 "alarmDefinition.alarmDefinitionId")),
187 Column("probableCauseId", String(255)),
188 Column("perceivedSeverity", Integer),
189 Column("alarmRaisedTime", String(255)),
190 Column("alarmChangedTime", String(255)),
191 Column("alarmAcknowledgeTime", String(255)),
192 Column("alarmAcknowledged", String(255)),
195 alarm_probable_cause = Table(
198 Column("updatetime", DateTime),
199 Column("createtime", DateTime),
200 Column("hash", String(255)),
202 Column("probableCauseId", String(255), primary_key=True),
203 Column("name", String(255)),
204 Column("description", String(255)),
207 alarm_subscription = Table(
210 Column("updatetime", DateTime),
211 Column("createtime", DateTime),
213 Column("alarmSubscriptionId", String(255), primary_key=True),
214 Column("callback", String(255)),
215 Column("consumerSubscriptionId", String(255)),
216 Column("filter", String(255)),
220 @retry((exc.IntegrityError), tries=3, delay=2)
221 def wait_for_metadata_ready(engine):
222 # wait for mapper ready
223 metadata.create_all(engine, checkfirst=True)
224 logger.info("metadata is ready")
227 def start_o2ims_mappers(engine=None):
228 logger.info("Starting O2 IMS mappers")
230 # IMS Infrastructure Inventory Mappering
231 dm_mapper = mapper(ocloudModel.DeploymentManager, deploymentmanager)
232 resourcepool_mapper = mapper(ocloudModel.ResourcePool, resourcepool)
233 resourcetype_mapper = mapper(ocloudModel.ResourceType, resourcetype)
238 "deploymentManagers": relationship(dm_mapper),
239 "resourceTypes": relationship(resourcetype_mapper),
240 "resourcePools": relationship(resourcepool_mapper)
243 ocloudModel.Resource,
246 "resourceTypes": relationship(resourcetype_mapper),
247 "resourcePools": relationship(resourcepool_mapper)
250 mapper(subModel.Subscription, subscription)
252 # IMS Infrastruture Monitoring Mappering
253 mapper(alarmModel.AlarmEventRecord, alarm_event_record)
254 mapper(alarmModel.AlarmDefinition, alarm_definition)
255 mapper(alarmModel.ProbableCause, alarm_probable_cause)
256 mapper(alarmModel.AlarmSubscription, alarm_subscription)
258 if engine is not None:
259 wait_for_metadata_ready(engine)