blob: adaad3d9ba65dbff49d8b9459088be868d50d893 [file] [log] [blame]
Rizwan Haider30b33792016-08-18 02:11:18 -04001# models.py - Metro Network Service
2
3from django.db import models
4from core.models import Service
Rizwan Haidereb2cc772016-09-08 12:14:55 -04005from core.models import PlCoreBase
Rizwan Haider30b33792016-08-18 02:11:18 -04006
7METRONETWORK_KIND = "metronetwork"
8SERVICE_NAME = 'metronetwork'
9SERVICE_NAME_VERBOSE = 'Metro Network Service'
10
11class MetroNetworkService(Service):
12
13 KIND = METRONETWORK_KIND
14
15 class Meta:
16 app_label = SERVICE_NAME
17 verbose_name = SERVICE_NAME_VERBOSE
18
19 ADMINISTRATIVE_STATE = (
20 ('enabled', 'Enabled'),
21 ('disabled', 'Disabled')
22 )
23
24 OPERATIONALSTATE = (
25 ('active', 'Active'),
26 ('inactive', 'Inactive')
27 )
28
29 restUrl = models.CharField(verbose_name="Rest URL",
30 max_length=256,
31 editable=True)
32
33 administrativeState = models.CharField(choices=ADMINISTRATIVE_STATE,
34 default='disabled',
35 verbose_name="AdministrativeState",
36 max_length=16,
37 editable=True)
38
39 operationalState = models.CharField(choices=OPERATIONALSTATE,
40 verbose_name="OperationalState",
41 max_length=256,
42 editable=True)
43
44 def __init__(self, *args, **kwargs):
45 super(MetroNetworkService, self).__init__(*args, **kwargs)
46
47 def getAdminstrativeState(self):
48 return self.administrativeState
49
50 def setAdminstrativeState(self, value):
51 self.administrativeState = value
52
53 def getOperationalState(self):
54 return self.operationalState
55
56 def getRestUrl(self):
Rizwan Haidereb2cc772016-09-08 12:14:55 -040057 return self.restUrl
58
59
60class NetworkDevice(PlCoreBase):
61
62 class Meta:
63 app_label = SERVICE_NAME
64
65 ADMINISTRATIVE_STATE = (
66 ('enabled', 'Enabled'),
67 ('disabled', 'Disabled'),
68 ('syncrequested', 'SyncRequested'),
69 ('syncinprogress', 'SyncInProgress')
70 )
71
72 AUTH_TYPE = (
73 ('basic', 'Basic'),
74 ('key', 'Key'),
75 ('oauth', 'OAuth')
76 )
77
78 # Leaving out the attributes below for now - not clear we will need them
79 # type = models.CharField(choices=TYPE, verbose_name="Type", max_length=256, editable=False)
80 # manufacturer = models.CharField(unique=False, verbose_name="Manufacturer", max_length=256, editable=False)
81 # serialNumber = models.CharField(unique=True, verbose_name="Serial Number", max_length=256, editable=False)
82 # chassisId = models.CharField(unique=False, verbose_name="Chassis ID", max_length=256, editable=False)
83
84 restCtrlUrl = models.CharField(unique=True,
85 verbose_name="RestCtrlURL",
86 max_length=256,
87 editable=True)
88 authType = models.CharField(choices=AUTH_TYPE, verbose_name='Auth Type', max_length=16, editable=True)
89 username = models.CharField(verbose_name='Username', max_length=32, editable=True, blank=True)
90 password = models.CharField(max_length=32, verbose_name='Password', editable=True, blank=True)
91 administrativeState = models.CharField(choices=ADMINISTRATIVE_STATE,
92 default='disabled',
93 verbose_name="AdministrativeState",
94 max_length=16,
95 editable=True)
96 id = models.CharField(unique=True,
97 verbose_name="Element Id",
98 primary_key=True,
99 max_length=256,
100 editable=True)
101
102 def __init__(self, *args, **kwargs):
103 super(NetworkDevice, self).__init__(*args, **kwargs)
104
105class NetworkPort(PlCoreBase):
106
107 class Meta:
108 app_label = SERVICE_NAME
109
110 element = models.ForeignKey(NetworkDevice, on_delete=models.CASCADE)
111 id = models.AutoField(verbose_name="id", primary_key=True, editable=False)
112 pid = models.CharField(unique=True, verbose_name="Port ID", max_length=256, editable=False)
113
114 def __init__(self, *args, **kwargs):
115 super(NetworkPort, self).__init__(*args, **kwargs)
116
117class NetworkEdgePort(PlCoreBase):
118
119 class Meta:
120 app_label = SERVICE_NAME
121
122 element = models.ForeignKey(NetworkDevice, on_delete=models.CASCADE)
123 id = models.AutoField(verbose_name="id", primary_key=True, editable=False)
124 pid = models.CharField(unique=True, verbose_name="Port ID", max_length=256, editable=False)
125 bwpCfgCbs = models.IntegerField(verbose_name="Committed Burst Size", editable=False, blank=True)
126 bwpCfgEbs = models.IntegerField(verbose_name="Excess Burst Size", editable=False, blank=True)
127 bwpCfgCir = models.IntegerField(verbose_name="Committed Information Rate", editable=False, blank=True)
128 bwpCfgEir = models.IntegerField(verbose_name="Excess Information Rate", editable=False, blank=True)
129 name = models.CharField(verbose_name="Name", max_length=256, editable=True, blank=True)
130 location = models.CharField(verbose_name="Location", max_length=256, editable=True, blank=True)
131 latlng = models.CharField(verbose_name="Latitude/Longitude", max_length=50, editable=True, blank=True)
132
133 def __init__(self, *args, **kwargs):
134 super(NetworkEdgePort, self).__init__(*args, **kwargs)
135
136 def save(self, *args, **kwargs):
137
138 if self.latlng:
139 try:
140 latlng_value = getattr(self, 'latlng').strip()
141 if (latlng_value.startswith('[') and latlng_value.endswith(']') and latlng_value.index(',') > 0):
142 lat = latlng_value[1: latlng_value.index(',')].strip()
143 lng = latlng_value[latlng_value.index(',') + 1: len(latlng_value) - 1].strip()
144
145 #If lat and lng are not floats, the code below should result in an error.
146 lat_validation = float(lat)
147 lng_validation = float(lng)
148 else:
149 raise ValueError("The lat/lng value is not formatted correctly.")
150 except:
151 raise ValueError("The lat/lng value is not formatted correctly.")
152
153 super(NetworkEdgePort, self).save(*args, **kwargs)
154
155class NetworkPointToPointConnection(PlCoreBase):
156
157 class Meta:
158 app_label = SERVICE_NAME
159
160 TYPE = (
161 ('direct', 'Direct'),
162 ('indirect', 'Indirect'),
163 ('edge', 'Edge'),
164 ('tunnel', 'Tunnel'),
165 ('optical', 'Optical'),
166 ('virtual', 'Virtual'),
167 )
168
169 OPERATIONALSTATE = (
170 ('active', 'Active'),
171 ('inactive', 'Inactive')
172 )
173
174 ADMINISTRATIVESTATE = (
175 ('disabled', 'Disabled'),
176 ('activationrequested', 'ActivationRequested'),
177 ('enabled', 'Enabled'),
178 ('invalid', 'Invalid'),
179 ('deactivationrequested', 'DeactivationRequested')
180 )
181
182 id = models.AutoField(verbose_name="PointToPointConnectionId",
183 primary_key=True,
184 editable=False)
185
186
187 sid = models.CharField(unique=True, verbose_name="Service ID", max_length=256, editable=True)
188 type = models.CharField(choices=TYPE, verbose_name="Type", max_length=256, editable=False)
189 src = models.ForeignKey(NetworkPort,
190 related_name='PointToPointSrc',
191 verbose_name="Source",
192 editable=False,
193 on_delete=models.CASCADE)
194 dest = models.ForeignKey(NetworkPort,
195 related_name='PointToPointDst',
196 verbose_name="Destination",
197 editable=False,
198 on_delete=models.CASCADE)
199 operstate = models.CharField(choices=OPERATIONALSTATE, verbose_name="OperationalState", max_length=256, editable=False)
200 adminstate = models.CharField(choices=ADMINISTRATIVESTATE, verbose_name="AdministrativeState", max_length=256, editable=True)
201
202
203 def __init__(self, *args, **kwargs):
204 super(NetworkPointToPointConnection, self).__init__(*args, **kwargs)
205
206class NetworkEdgeToEdgePointConnection(PlCoreBase):
207
208 class Meta:
209 app_label = SERVICE_NAME
210
211 TYPE = (
212 ('direct', 'Direct'),
213 ('tunnel', 'Tunnel'),
214 ('optical', 'Optical'),
215 ('virtual', 'Virtual'),
216 ('Point_To_Point', 'Point To Point')
217 )
218
219 OPERATIONALSTATE = (
220 ('active', 'Active'),
221 ('inactive', 'Inactive')
222 )
223
224 ADMINISTRATIVESTATE = (
225 ('disabled', 'Disabled'),
226 ('activationrequested', 'ActivationRequested'),
227 ('enabled', 'Enabled'),
228 ('invalid', 'Invalid'),
229 ('deactivationrequested', 'DeactivationRequested')
230 )
231
232 id = models.AutoField(verbose_name="EdgePointToEdgePointConnectivityId",
233 primary_key=True,
234 editable=False)
235 sid = models.CharField(unique=True, verbose_name="Service ID", max_length=256, editable=True)
236 type = models.CharField(choices=TYPE, verbose_name="Type", max_length=256, editable=True)
237 uni1 = models.ForeignKey(NetworkEdgePort,
238 related_name='EdgePointToEdgePointSrc',
239 verbose_name="UNI 1",
240 editable=True,
241 on_delete=models.CASCADE)
242 uni2 = models.ForeignKey(NetworkEdgePort,
243 related_name='EdgePointToEdgePointDst',
244 verbose_name="UNI 2",
245 editable=True,
246 on_delete=models.CASCADE)
247 operstate = models.CharField(choices=OPERATIONALSTATE, verbose_name="OperationalState", max_length=256, editable=True)
248 adminstate = models.CharField(choices=ADMINISTRATIVESTATE, verbose_name="AdministrativeState", max_length=256, editable=True)
249
250
251 def __init__(self, *args, **kwargs):
252 super(NetworkEdgeToEdgePointConnection, self).__init__(*args, **kwargs)
253
254
255class NetworkMultipointConnection(PlCoreBase):
256
257 class Meta:
258 app_label = SERVICE_NAME
259
260 TYPE = (
261 ('vlan', 'VLAN'),
262 ('ip', 'IP'),
263 ('ethernet', 'Ethernet'),
264 )
265
266 STATE = (
267 ('active', 'Active'),
268 ('inactive', 'Inactive')
269 )
270
271 type = models.CharField(choices=TYPE, verbose_name="Type", max_length=256, editable=False)
272 eps = models.ManyToManyField(NetworkPort,
273 related_name='eps',
274 verbose_name="Endpoints",
275 editable=False)
276 state = models.CharField(choices=STATE, verbose_name="State", max_length=256, editable=False)
277
278 def __init__(self, *args, **kwargs):
279 super(NetworkMultipointConnection, self).__init__(*args, **kwargs)
280
281class NetworkInterLink(PlCoreBase):
282
283 class Meta:
284 app_label = SERVICE_NAME
285
286 DISCOVERY = (
287 ('auto', 'Automatic Discovery'),
288 ('manual', 'Manual Discovery'),
289 )
290
291 STATE = (
292 ('active', 'Active'),
293 ('inactive', 'Inactive')
294 )
295
296 src = models.ForeignKey(NetworkPort,
297 related_name='InterLinkSrc',
298 verbose_name="Source",
299 editable=False,
300 on_delete=models.CASCADE)
301 dest = models.ForeignKey(NetworkPort,
302 related_name='InterLinkDst',
303 verbose_name="Destination",
304 editable=False,
305 on_delete=models.CASCADE)
306 state = models.CharField(choices=STATE, verbose_name="State", max_length=256, editable=False)
307 discovery = models.CharField(choices=STATE, verbose_name="State", max_length=256, editable=False)
308
309 def __init__(self, *args, **kwargs):
310 super(NetworkInterLink, self).__init__(*args, **kwargs)