Update accelerator resource
[pti/o2.git] / o2ims / adapter / orm.py
1 # Copyright (C) 2021 Wind River Systems, Inc.
2 #
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
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
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.
14
15 # from typing_extensions import Required
16 from retry import retry
17 from sqlalchemy import (
18     Table,
19     MetaData,
20     Column,
21     Integer,
22     String,
23     Text,
24     Enum,
25     # Date,
26     DateTime,
27     ForeignKey,
28     # Boolean,
29     # engine,
30     # event,
31     exc,
32 )
33
34 from sqlalchemy.orm import mapper, relationship
35 # from sqlalchemy.sql.sqltypes import Integer
36
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
42
43 from o2common.helper import o2logging
44 logger = o2logging.get_logger(__name__)
45
46 metadata = MetaData()
47
48 ocloud = Table(
49     "ocloud",
50     metadata,
51     Column("updatetime", DateTime),
52     Column("createtime", DateTime),
53     Column("hash", String(255)),
54     Column("version_number", Integer),
55
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))
63 )
64
65 resourcetype = Table(
66     "resourceType",
67     metadata,
68     Column("updatetime", DateTime),
69     Column("createtime", DateTime),
70     Column("hash", String(255)),
71     Column("version_number", Integer),
72
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))
84
85     Column("oCloudId", ForeignKey("ocloud.oCloudId")),
86 )
87
88 resourcepool = Table(
89     "resourcePool",
90     metadata,
91     Column("updatetime", DateTime),
92     Column("createtime", DateTime),
93     Column("hash", String(255)),
94     Column("version_number", Integer),
95
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))
104 )
105
106 resource = Table(
107     "resource",
108     metadata,
109     Column("updatetime", DateTime),
110     Column("createtime", DateTime),
111     Column("hash", String(255)),
112     Column("version_number", Integer),
113
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())
123 )
124
125 deploymentmanager = Table(
126     "deploymentManager",
127     metadata,
128     Column("updatetime", DateTime),
129     Column("createtime", DateTime),
130     Column("hash", String(255)),
131     Column("version_number", Integer),
132
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))
143 )
144
145 subscription = Table(
146     "subscription",
147     metadata,
148     Column("updatetime", DateTime),
149     Column("createtime", DateTime),
150     Column("hash", String(255)),
151     Column("version_number", Integer),
152
153     Column("subscriptionId", String(255), primary_key=True),
154     Column("callback", String(255)),
155     Column("consumerSubscriptionId", String(255)),
156     Column("filter", String(255)),
157 )
158
159 alarm_definition = Table(
160     "alarmDefinition",
161     metadata,
162     Column("updatetime", DateTime),
163     Column("createtime", DateTime),
164
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))
173 )
174
175 alarm_event_record = Table(
176     "alarmEventRecord",
177     metadata,
178     Column("updatetime", DateTime),
179     Column("createtime", DateTime),
180     Column("hash", String(255)),
181
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)),
193 )
194
195 alarm_probable_cause = Table(
196     "probableCause",
197     metadata,
198     Column("updatetime", DateTime),
199     Column("createtime", DateTime),
200     Column("hash", String(255)),
201
202     Column("probableCauseId", String(255), primary_key=True),
203     Column("name", String(255)),
204     Column("description", String(255)),
205 )
206
207 alarm_subscription = Table(
208     "alarmSubscription",
209     metadata,
210     Column("updatetime", DateTime),
211     Column("createtime", DateTime),
212
213     Column("alarmSubscriptionId", String(255), primary_key=True),
214     Column("callback", String(255)),
215     Column("consumerSubscriptionId", String(255)),
216     Column("filter", String(255)),
217 )
218
219
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")
225
226
227 def start_o2ims_mappers(engine=None):
228     logger.info("Starting O2 IMS mappers")
229
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)
234     mapper(
235         ocloudModel.Ocloud,
236         ocloud,
237         properties={
238             "deploymentManagers": relationship(dm_mapper),
239             "resourceTypes": relationship(resourcetype_mapper),
240             "resourcePools": relationship(resourcepool_mapper)
241         })
242     mapper(
243         ocloudModel.Resource,
244         resource,
245         properties={
246             "resourceTypes": relationship(resourcetype_mapper),
247             "resourcePools": relationship(resourcepool_mapper)
248         }
249     )
250     mapper(subModel.Subscription, subscription)
251
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)
257
258     if engine is not None:
259         wait_for_metadata_ready(engine)