1 # ============LICENSE_START===================================================
2 # Copyright (C) 2020-2021 Nordix Foundation.
3 # ============================================================================
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
16 # SPDX-License-Identifier: Apache-2.0
17 # ============LICENSE_END=====================================================
19 from sqlalchemy import Column, Integer, String, ForeignKey, JSON
20 from sqlalchemy.orm import relationship
25 class SubscriptionModel(db.Model):
26 __tablename__ = 'subscriptions'
27 id = Column(Integer, primary_key=True, autoincrement=True)
28 subscription_name = Column(String(100), unique=True)
29 status = Column(String(20))
32 'NfSubRelationalModel',
33 cascade='all, delete-orphan',
34 backref='subscription')
36 network_filter = relationship(
37 'NetworkFunctionFilterModel',
38 cascade='all, delete-orphan',
39 backref='subscription')
41 measurement_groups = relationship(
42 'MeasurementGroupModel',
43 cascade='all, delete-orphan',
44 backref='subscription')
46 def __init__(self, subscription_name, status):
47 self.subscription_name = subscription_name
51 return f'subscription_name: {self.subscription_name}, status: {self.status}'
53 def __eq__(self, other):
54 if isinstance(self, other.__class__):
55 return self.subscription_name == other.subscription_name
59 sub_nfs = NfSubRelationalModel.query.filter(
60 NfSubRelationalModel.subscription_name == self.subscription_name).all()
62 return {'subscription_name': self.subscription_name, 'subscription_status': self.status,
63 'network_functions': [sub_nf.serialize_nf() for sub_nf in sub_nfs]}
66 class NetworkFunctionModel(db.Model):
67 __tablename__ = 'network_functions'
68 id = Column(Integer, primary_key=True, autoincrement=True)
69 nf_name = Column(String(100), unique=True)
70 ipv4_address = Column(String(50))
71 ipv6_address = Column(String(50))
72 model_invariant_id = Column(String(100))
73 model_version_id = Column(String(100))
74 model_name = Column(String(100))
75 sdnc_model_name = Column(String(100))
76 sdnc_model_version = Column(String(100))
77 retry_count = Column(Integer)
79 subscriptions = relationship(
80 'NfSubRelationalModel',
81 cascade='all, delete-orphan',
84 def __init__(self, nf_name, ipv4_address, ipv6_address, model_invariant_id,
85 model_version_id, model_name, sdnc_model_name,
86 sdnc_model_version, retry_count=0):
87 self.nf_name = nf_name
88 self.ipv4_address = ipv4_address
89 self.ipv6_address = ipv6_address
90 self.model_invariant_id = model_invariant_id
91 self.model_version_id = model_version_id
92 self.model_name = model_name
93 self.sdnc_model_name = sdnc_model_name
94 self.sdnc_model_version = sdnc_model_version
95 self.retry_count = retry_count
98 return str(self.to_nf())
101 from mod.network_function import NetworkFunction
102 return NetworkFunction(sdnc_model_name=self.sdnc_model_name,
103 sdnc_model_version=self.sdnc_model_version,
104 **{'nf_name': self.nf_name,
105 'ipv4_address': self.ipv4_address,
106 'ipv6_address': self.ipv6_address,
107 'model_invariant_id': self.model_invariant_id,
108 'model_version_id': self.model_version_id})
111 class NfSubRelationalModel(db.Model):
112 __tablename__ = 'nf_to_sub_rel'
114 'confirm_deleted_rows': False
116 id = Column(Integer, primary_key=True, autoincrement=True)
117 subscription_name = Column(
119 ForeignKey(SubscriptionModel.subscription_name, ondelete='cascade', onupdate='cascade')
123 ForeignKey(NetworkFunctionModel.nf_name, ondelete='cascade', onupdate='cascade')
125 nf_sub_status = Column(String(20))
127 def __init__(self, subscription_name, nf_name, nf_sub_status=None):
128 self.subscription_name = subscription_name
129 self.nf_name = nf_name
130 self.nf_sub_status = nf_sub_status
133 return f'subscription_name: {self.subscription_name}, ' \
134 f'nf_name: {self.nf_name}, nf_sub_status: {self.nf_sub_status}'
137 return {'subscription_name': self.subscription_name, 'nf_name': self.nf_name,
138 'nf_sub_status': self.nf_sub_status}
140 def serialize_nf(self):
141 nf = NetworkFunctionModel.query.filter(
142 NetworkFunctionModel.nf_name == self.nf_name).one_or_none()
144 return {'nf_name': self.nf_name,
145 'ipv4_address': nf.ipv4_address,
146 'ipv6_address': nf.ipv6_address,
147 'nf_sub_status': self.nf_sub_status,
148 'model_invariant_id': nf.model_invariant_id,
149 'model_version_id': nf.model_version_id,
150 'model_name': nf.model_name,
151 'sdnc_model_name': nf.sdnc_model_name,
152 'sdnc_model_version': nf.sdnc_model_version}
155 class NetworkFunctionFilterModel(db.Model):
156 __tablename__ = 'nf_filter'
157 id = Column(Integer, primary_key=True, autoincrement=True)
158 subscription_name = Column(
160 ForeignKey(SubscriptionModel.subscription_name, ondelete='cascade', onupdate='cascade'),
163 nf_names = Column(String(100))
164 model_invariant_ids = Column(String(100))
165 model_version_ids = Column(String(100))
166 model_names = Column(String(100))
168 def __init__(self, subscription_name, nf_names, model_invariant_ids, model_version_ids,
170 self.subscription_name = subscription_name
171 self.nf_names = nf_names
172 self.model_invariant_ids = model_invariant_ids
173 self.model_version_ids = model_version_ids
174 self.model_names = model_names
177 return f'subscription_name: {self.subscription_name}, ' \
178 f'nf_names: {self.nf_names}, model_invariant_ids: {self.model_invariant_ids}' \
179 f'model_version_ids: {self.model_version_ids}, model_names: {self.model_names}'
182 return {'subscription_name': self.subscription_name, 'nf_names': self.nf_names,
183 'model_invariant_ids': self.model_invariant_ids,
184 'model_version_ids': self.model_version_ids, 'model_names': self.model_names}
187 class MeasurementGroupModel(db.Model):
188 __tablename__ = 'measurement_group'
189 id = Column(Integer, primary_key=True, autoincrement=True)
190 subscription_name = Column(
192 ForeignKey(SubscriptionModel.subscription_name, ondelete='cascade', onupdate='cascade')
194 measurement_group_name = Column(String(100), unique=True)
195 administrative_state = Column(String(20))
196 file_based_gp = Column(Integer)
197 file_location = Column(String(100))
198 measurement_type = Column(JSON)
199 managed_object_dns_basic = Column(JSON)
201 def __init__(self, subscription_name, measurement_group_name,
202 administrative_state, file_based_gp, file_location,
203 measurement_type, managed_object_dns_basic):
204 self.subscription_name = subscription_name
205 self.measurement_group_name = measurement_group_name
206 self.administrative_state = administrative_state
207 self.file_based_gp = file_based_gp
208 self.file_location = file_location
209 self.measurement_type = measurement_type
210 self.managed_object_dns_basic = managed_object_dns_basic
213 return f'subscription_name: {self.subscription_name}, ' \
214 f'measurement_group_name: {self.measurement_group_name},' \
215 f'administrative_state: {self.administrative_state},' \
216 f'file_based_gp: {self.file_based_gp},' \
217 f'file_location: {self.file_location},' \
218 f'measurement_type: {self.measurement_type}' \
219 f'managed_object_dns_basic: {self.managed_object_dns_basic}'
222 return {'subscription_name': self.subscription_name,
223 'measurement_group_name': self.measurement_group_name,
224 'administrative_state': self.administrative_state,
225 'file_based_gp': self.file_based_gp,
226 'file_location': self.file_location,
227 'measurement_type': self.measurement_type,
228 'managed_object_dns_basic': self.managed_object_dns_basic}
231 class NfMeasureGroupRelationalModel(db.Model):
232 __tablename__ = 'nf_to_measure_grp_rel'
234 'confirm_deleted_rows': False
236 id = Column(Integer, primary_key=True, autoincrement=True)
237 measurement_grp_name = Column(
239 ForeignKey(MeasurementGroupModel.measurement_group_name, ondelete='cascade',
244 ForeignKey(NetworkFunctionModel.nf_name, ondelete='cascade', onupdate='cascade')
246 nf_measure_grp_status = Column(String(20))
247 retry_count = Column(Integer)
249 def __init__(self, measurement_grp_name, nf_name, nf_measure_grp_status=None,
251 self.measurement_grp_name = measurement_grp_name
252 self.nf_name = nf_name
253 self.nf_measure_grp_status = nf_measure_grp_status
254 self.retry_count = retry_count
257 return f'measurement_grp_name: {self.measurement_grp_name}, ' \
258 f'nf_name: {self.nf_name}, nf_measure_grp_status: {self.nf_measure_grp_status}'