blob: 6eb07025a23308b1382d91c50b2eb9ec7887369b [file] [log] [blame]
Nicolas Palpacuer16138de2018-07-03 14:35:18 -04001#
2# Copyright 2018 the original author or authors.
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
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
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.
15#
16
mzadig7cda5ff2018-07-10 16:37:28 -040017import arrow
mzadig7cda5ff2018-07-10 16:37:28 -040018import voltha.adapters.openolt.openolt_platform as platform
mzadige4ad1d22018-07-27 15:27:22 -040019# from voltha.protos.device_pb2 import Port
20from voltha.extensions.alarms.adapter_alarms import AdapterAlarms
21from voltha.extensions.alarms.olt.olt_los_alarm import OltLosAlarm
22from voltha.extensions.alarms.onu.onu_dying_gasp_alarm import OnuDyingGaspAlarm
23from voltha.extensions.alarms.onu.onu_los_alarm import OnuLosAlarm
24from voltha.extensions.alarms.onu.onu_lopc_miss_alarm import OnuLopcMissAlarm
25from voltha.extensions.alarms.onu.onu_lopc_mic_error_alarm import OnuLopcMicErrorAlarm
26from voltha.extensions.alarms.onu.onu_lob_alarm import OnuLobAlarm
27
mzadigb486c072018-08-08 11:34:51 -040028from voltha.extensions.alarms.onu.onu_startup_alarm import OnuStartupAlarm
29from voltha.extensions.alarms.onu.onu_signal_degrade_alarm import OnuSignalDegradeAlarm
30from voltha.extensions.alarms.onu.onu_signal_fail_alarm import OnuSignalFailAlarm
31from voltha.extensions.alarms.onu.onu_window_drift_alarm import OnuWindowDriftAlarm
32from voltha.extensions.alarms.onu.onu_activation_fail_alarm import OnuActivationFailAlarm
33
Scott Bakerd3190952018-09-04 15:47:28 -070034from voltha.extensions.alarms.onu.onu_discovery_alarm import OnuDiscoveryAlarm
35
mzadige4ad1d22018-07-27 15:27:22 -040036import protos.openolt_pb2 as openolt_pb2
37import voltha.protos.device_pb2 as device_pb2
Nicolas Palpacuer16138de2018-07-03 14:35:18 -040038
39
40class OpenOltAlarmMgr(object):
mzadig7cda5ff2018-07-10 16:37:28 -040041 def __init__(self, log, adapter_agent, device_id, logical_device_id):
42 """
43 20180711 - Addition of adapter_agent and device_id
44 to facilitate alarm processing and kafka posting
45 :param log:
46 :param adapter_agent:
47 :param device_id:
48 """
Nicolas Palpacuer16138de2018-07-03 14:35:18 -040049 self.log = log
mzadig7cda5ff2018-07-10 16:37:28 -040050 self.adapter_agent = adapter_agent
51 self.device_id = device_id
52 self.logical_device_id = logical_device_id
mzadigb486c072018-08-08 11:34:51 -040053 """
54 The following is added to reduce the continual posting of OLT LOS alarming
55 to Kafka. Set enable_alarm_suppress = true to enable otherwise the
56 current openolt bal will send continuous olt los alarm cleared messages
57 ONU disc raised counter is place holder for a future addition
58 """
59 self.enable_alarm_suppress = True
60 self.alarm_suppress = {"olt_los_clear": 0, "onu_disc_raised": []} # Keep count of alarms to limit.
mzadig7cda5ff2018-07-10 16:37:28 -040061 try:
62 self.alarms = AdapterAlarms(self.adapter_agent, self.device_id, self.logical_device_id)
63 except Exception as initerr:
64 self.log.exception("alarmhandler-init-error", errmsg=initerr.message)
65 raise Exception(initerr)
Nicolas Palpacuer16138de2018-07-03 14:35:18 -040066
67 def process_alarms(self, alarm_ind):
Nicolas Palpacuer16138de2018-07-03 14:35:18 -040068 try:
mzadig7cda5ff2018-07-10 16:37:28 -040069 self.log.debug('alarm-indication', alarm=alarm_ind, device_id=self.device_id)
Nicolas Palpacuer16138de2018-07-03 14:35:18 -040070 if alarm_ind.HasField('los_ind'):
71 self.los_indication(alarm_ind.los_ind)
72 elif alarm_ind.HasField('dying_gasp_ind'):
73 self.dying_gasp_indication(alarm_ind.dying_gasp_ind)
74 elif alarm_ind.HasField('onu_alarm_ind'):
75 self.onu_alarm_indication(alarm_ind.onu_alarm_ind)
76 elif alarm_ind.HasField('onu_startup_fail_ind'):
77 self.onu_startup_failure_indication(
78 alarm_ind.onu_startup_fail_ind)
79 elif alarm_ind.HasField('onu_signal_degrade_ind'):
80 self.onu_signal_degrade_indication(
81 alarm_ind.onu_signal_degrade_ind)
82 elif alarm_ind.HasField('onu_drift_of_window_ind'):
83 self.onu_drift_of_window_indication(
84 alarm_ind.onu_drift_of_window_ind)
85 elif alarm_ind.HasField('onu_loss_omci_ind'):
86 self.onu_loss_omci_indication(alarm_ind.onu_loss_omci_ind)
87 elif alarm_ind.HasField('onu_signals_fail_ind'):
88 self.onu_signals_failure_indication(
89 alarm_ind.onu_signals_fail_ind)
90 elif alarm_ind.HasField('onu_tiwi_ind'):
91 self.onu_transmission_interference_warning(
92 alarm_ind.onu_tiwi_ind)
93 elif alarm_ind.HasField('onu_activation_fail_ind'):
94 self.onu_activation_failure_indication(
95 alarm_ind.onu_activation_fail_ind)
96 elif alarm_ind.HasField('onu_processing_error_ind'):
97 self.onu_processing_error_indication(
98 alarm_ind.onu_processing_error_ind)
99 else:
mzadige4ad1d22018-07-27 15:27:22 -0400100 self.log.warn('unknown alarm type', alarm=alarm_ind)
Nicolas Palpacuer16138de2018-07-03 14:35:18 -0400101
102 except Exception as e:
103 self.log.error('sorting of alarm went wrong', error=e,
104 alarm=alarm_ind)
105
Scott Bakerd3190952018-09-04 15:47:28 -0700106 def simulate_alarm(self, alarm):
107 if alarm.indicator == "los":
108 alarm_obj = OltLosAlarm(self.alarms, intf_id=alarm.intf_id, port_type_name=alarm.port_type_name)
109 elif alarm.indicator == "dying_gasp":
110 alarm_obj = OnuDyingGaspAlarm(self.alarms, alarm.intf_id, alarm.onu_device_id)
111 elif alarm.indicator == "onu_los":
112 alarm_obj = OnuLosAlarm(self.alarms, onu_id=alarm.onu_device_id, intf_id=alarm.intf_id)
113 elif alarm.indicator == "onu_lopc_miss":
114 alarm_obj = OnuLopcMissAlarm(self.alarms, onu_id=alarm.onu_device_id, intf_id=alarm.intf_id)
115 elif alarm.indicator == "onu_lopc_mic":
116 alarm_obj = OnuLopcMicErrorAlarm(self.alarms, onu_id=alarm.onu_device_id, intf_id=alarm.intf_id)
117 elif alarm.indicator == "onu_lob":
118 alarm_obj = OnuLobAlarm(self.alarms, onu_id=alarm.onu_device_id, intf_id=alarm.intf_id)
119 elif alarm.indicator == "onu_startup":
120 alarm_obj = OnuStartupAlarm(self.alarms, intf_id=alarm.intf_id, onu_id=alarm.onu_device_id)
121 elif alarm.indicator == "onu_signal_degrade":
122 alarm_obj = OnuSignalDegradeAlarm(self.alarms, intf_id=alarm.intf_id, onu_id=alarm.onu_device_id,
123 inverse_bit_error_rate=alarm.inverse_bit_error_rate)
124 elif alarm.indicator == "onu_drift_of_window":
125 alarm_obj = OnuWindowDriftAlarm(self.alarms, intf_id=alarm.intf_id,
126 onu_id=alarm.onu_device_id,
127 drift=alarm.drift,
128 new_eqd=alarm.new_eqd)
129 elif alarm.indicator == "onu_signal_fail":
130 alarm_obj = OnuSignalFailAlarm(self.alarms, intf_id=alarm.intf_id,
131 onu_id=alarm.onu_device_id,
132 inverse_bit_error_rate=alarm.inverse_bit_error_rate)
133 elif alarm.indicator == "onu_activation":
134 alarm_obj = OnuActivationFailAlarm(self.alarms, intf_id=alarm.intf_id,
135 onu_id=alarm.onu_device_id)
136 elif alarm.indicator == "onu_discovery":
137 alarm_obj = OnuDiscoveryAlarm(self.alarms, pon_id=alarm.intf_id,
138 serial_number=alarm.onu_serial_number)
139 else:
140 raise Exception("Unknown alarm indicator %s" % alarm.indicator)
141
142 if alarm.operation == alarm.RAISE:
143 alarm_obj.raise_alarm()
144 elif alarm.operation == alarm.CLEAR:
145 alarm_obj.clear_alarm()
146 else:
147 # This shouldn't happen
148 raise Exception("Unknown alarm operation")
149
Nicolas Palpacuer16138de2018-07-03 14:35:18 -0400150 def los_indication(self, los_ind):
mzadig7cda5ff2018-07-10 16:37:28 -0400151
Nicolas Palpacuer16138de2018-07-03 14:35:18 -0400152 try:
mzadig7cda5ff2018-07-10 16:37:28 -0400153 self.log.debug('los indication received', los_ind=los_ind,
154 int_id=los_ind.intf_id, status=los_ind.status)
mzadig7cda5ff2018-07-10 16:37:28 -0400155 try:
mzadige4ad1d22018-07-27 15:27:22 -0400156 port_type_name = platform.intf_id_to_port_type_name(los_ind.intf_id)
157 if los_ind.status == 1 or los_ind.status == "on":
mzadigb486c072018-08-08 11:34:51 -0400158 # Zero out the suppression counter on OLT_LOS raise
159 self.alarm_suppress['olt_los_clear'] = 0
mzadige4ad1d22018-07-27 15:27:22 -0400160 OltLosAlarm(self.alarms, intf_id=los_ind.intf_id, port_type_name=port_type_name).raise_alarm()
mzadig7cda5ff2018-07-10 16:37:28 -0400161 else:
mzadigb486c072018-08-08 11:34:51 -0400162 """
163 Check if there has been more that one los clear following a previous los
164 """
165 if self.alarm_suppress['olt_los_clear'] == 0 and self.enable_alarm_suppress:
166 OltLosAlarm(self.alarms, intf_id=los_ind.intf_id, port_type_name=port_type_name).clear_alarm()
167 self.alarm_suppress['olt_los_clear'] += 1
168
mzadig7cda5ff2018-07-10 16:37:28 -0400169 except Exception as alarm_err:
170 self.log.error('los-indication', errmsg=alarm_err.message)
Nicolas Palpacuer16138de2018-07-03 14:35:18 -0400171 except Exception as e:
mzadig7cda5ff2018-07-10 16:37:28 -0400172 self.log.error('los-indication', errmsg=e.message)
Nicolas Palpacuer16138de2018-07-03 14:35:18 -0400173
174 def dying_gasp_indication(self, dying_gasp_ind):
mzadig7cda5ff2018-07-10 16:37:28 -0400175 try:
176 alarm_dgi = dying_gasp_ind
177 onu_id = alarm_dgi.onu_id
178 self.log.debug('openolt-alarmindication-dispatch-dying-gasp', int_id=alarm_dgi.intf_id,
179 onu_id=alarm_dgi.onu_id, status=alarm_dgi.status)
180 try:
181 """
mzadige4ad1d22018-07-27 15:27:22 -0400182 Get the specific onu device information for the onu generating the alarm.
183 Extract the id. In the future extract the serial number as well
mzadig7cda5ff2018-07-10 16:37:28 -0400184 """
mzadige4ad1d22018-07-27 15:27:22 -0400185 onu_device_id = "unresolved"
186 onu_serial_number = "unresolved"
187 onu_device = self.resolve_onu_id(onu_id, port_intf_id=alarm_dgi.intf_id)
188 if onu_device != None:
mzadig7cda5ff2018-07-10 16:37:28 -0400189 onu_device_id = onu_device.id
mzadige4ad1d22018-07-27 15:27:22 -0400190 onu_serial_number = onu_device.serial_number
191
192 if dying_gasp_ind.status == 1 or dying_gasp_ind.status == "on":
193 OnuDyingGaspAlarm(self.alarms, dying_gasp_ind.intf_id,
194 onu_device_id).raise_alarm()
mzadig7cda5ff2018-07-10 16:37:28 -0400195 else:
mzadige4ad1d22018-07-27 15:27:22 -0400196 OnuDyingGaspAlarm(self.alarms, dying_gasp_ind.intf_id,
197 onu_device_id).clear_alarm()
mzadig7cda5ff2018-07-10 16:37:28 -0400198 except Exception as alarm_err:
199 self.log.exception('dying-gasp-indication', errmsg=alarm_err.message)
200
201 except Exception as e:
202 self.log.error('dying_gasp_indication', error=e)
Nicolas Palpacuer16138de2018-07-03 14:35:18 -0400203
204 def onu_alarm_indication(self, onu_alarm_ind):
mzadige4ad1d22018-07-27 15:27:22 -0400205 """
206 LOB = Los of burst
207 LOPC = Loss of PLOAM miss channel
208
209 :param onu_alarm_ind: Alarm indication which currently contains
210 onu_id:
211 los_status:
212 lob_status:
213 lopc_miss_status:
214 lopc_mic_error_status:
215 :return:
216 """
217 self.log.info('onu-alarm-indication')
218
219 try:
220 self.log.debug('onu alarm indication received', los_status=onu_alarm_ind.los_status,
221 onu_intf_id=onu_alarm_ind.onu_id,
222 lob_status=onu_alarm_ind.lob_status,
223 lopc_miss_status=onu_alarm_ind.lopc_miss_status,
224 lopc_mic_error_status=onu_alarm_ind.lopc_mic_error_status,
225 intf_id=onu_alarm_ind.intf_id
226 )
227
228 try:
229 """
230 Get the specific onu device information for the onu generating the alarm.
231 Extract the id. In the future extract the serial number as well
232 """
233 onu_device_id = "unresolved"
234 serial_number = "unresolved"
235 onu_device = self.resolve_onu_id(onu_alarm_ind.onu_id, port_intf_id=onu_alarm_ind.intf_id)
236 if onu_device != None:
237 onu_device_id = onu_device.id
238 serial_number = onu_device.serial_number
239
240 if onu_alarm_ind.los_status == 1 or onu_alarm_ind.los_status == "on":
241 OnuLosAlarm(self.alarms, onu_id=onu_device_id, intf_id=onu_alarm_ind.intf_id).raise_alarm()
mzadige4ad1d22018-07-27 15:27:22 -0400242 elif onu_alarm_ind.los_status == 0 or onu_alarm_ind.los_status == "off":
243 OnuLosAlarm(self.alarms, onu_id=onu_device_id, intf_id=onu_alarm_ind.intf_id).clear_alarm()
244 else: # No Change
245 pass
246
247 if onu_alarm_ind.lopc_miss_status == 1 or onu_alarm_ind.lopc_miss_status == "on":
248 OnuLopcMissAlarm(self.alarms, onu_id=onu_device_id, intf_id=onu_alarm_ind.intf_id).raise_alarm()
249 elif (onu_alarm_ind.lopc_miss_status == 0 or onu_alarm_ind.lopc_miss_status == "off"):
250 OnuLopcMissAlarm(self.alarms, onu_id=onu_device_id, intf_id=onu_alarm_ind.intf_id).clear_alarm()
251 else: # No Change
252 pass
253
254 if onu_alarm_ind.lopc_mic_error_status == 1 or onu_alarm_ind.lopc_mic_error_status == "on":
255 OnuLopcMicErrorAlarm(self.alarms, onu_id=onu_device_id, intf_id=onu_alarm_ind.intf_id).raise_alarm()
256 elif onu_alarm_ind.lopc_mic_error_status == 0 or onu_alarm_ind.lopc_mic_error_status == "off":
257 OnuLopcMicErrorAlarm(self.alarms, onu_id=onu_device_id, intf_id=onu_alarm_ind.intf_id).clear_alarm()
258 else: # No Change
259 pass
260
261 if onu_alarm_ind.lob_status == 1 or onu_alarm_ind.lob_status == "on":
262 OnuLobAlarm(self.alarms, onu_id=onu_device_id, intf_id=onu_alarm_ind.intf_id).raise_alarm()
263 elif onu_alarm_ind.lob_status == 0 or onu_alarm_ind.lob_status == "off":
264 OnuLobAlarm(self.alarms, onu_id=onu_device_id, intf_id=onu_alarm_ind.intf_id).clear_alarm()
265 else: # No Change
266 pass
267 except Exception as alarm_err:
mzadigb486c072018-08-08 11:34:51 -0400268 self.log.exception('onu-alarm-indication', errmsg=alarm_err.message)
mzadige4ad1d22018-07-27 15:27:22 -0400269
270 except Exception as e:
mzadigb486c072018-08-08 11:34:51 -0400271 self.log.exception('onu-alarm-indication', errmsg=e.message)
Nicolas Palpacuer16138de2018-07-03 14:35:18 -0400272
273 def onu_startup_failure_indication(self, onu_startup_fail_ind):
mzadigb486c072018-08-08 11:34:51 -0400274 """
275 Current protobuf indicator:
276 message OnuStartupFailureIndication {
277 fixed32 intf_id = 1;
278 fixed32 onu_id = 2;
279 string status = 3;
280 }
281
282 :param onu_startup_fail_ind:
283 :return:
284 """
285 try:
286 ind = onu_startup_fail_ind
287 label = "onu-startup-failure-indication"
288 self.log.debug(label + " received", onu_startup_fail_ind=ind, int_id=ind.intf_id, onu_id=ind.onu_id, status=ind.status)
289 try:
290 if ind.status == 1 or ind.status == "on":
291 OnuStartupAlarm(self.alarms, intf_id=ind.intf_id,onu_id=ind.onu_id).raise_alarm()
292 else:
293 OnuStartupAlarm(self.alarms, intf_id=ind.intf_id, onu_id=ind.onu_id).clear_alarm()
294 except Exception as alarm_err:
295 self.log.exception(label, errmsg=alarm_err.message)
296
297 except Exception as e:
298 self.log.exception(label, errmsg=e.message)
Nicolas Palpacuer16138de2018-07-03 14:35:18 -0400299
300 def onu_signal_degrade_indication(self, onu_signal_degrade_ind):
mzadigb486c072018-08-08 11:34:51 -0400301 """
302 Current protobuf indicator:
303 OnuSignalDegradeIndication {
304 fixed32 intf_id = 1;
305 fixed32 onu_id = 2;
306 string status = 3;
307 fixed32 inverse_bit_error_rate = 4;
308 }
309 :param onu_signal_degrade_ind:
310 :return:
311 """
312 try:
313 ind = onu_signal_degrade_ind
314 label = "onu-signal-degrade-indication"
315 self.log.debug(label + ' received',
316 onu_startup_fail_ind=ind,
317 int_id=ind.intf_id,
318 onu_id=ind.onu_id,
319 inverse_bit_error_rate=ind.inverse_bit_error_rate,
320 status=ind.status)
321 try:
322 if ind.status == 1 or ind.status == "on":
323 OnuSignalDegradeAlarm(self.alarms, intf_id=ind.intf_id, onu_id=ind.onu_id,
324 inverse_bit_error_rate=ind.inverse_bit_error_rate).raise_alarm()
325 else:
326 OnuSignalDegradeAlarm(self.alarms, intf_id=ind.intf_id, onu_id=ind.onu_id,
327 inverse_bit_error_rate=ind.inverse_bit_error_rate).clear_alarm()
328 except Exception as alarm_err:
329 self.log.exception(label, errmsg=alarm_err.message)
330
331 except Exception as e:
332 self.log.exception(label, errmsg=e.message)
Nicolas Palpacuer16138de2018-07-03 14:35:18 -0400333
334 def onu_drift_of_window_indication(self, onu_drift_of_window_ind):
mzadigb486c072018-08-08 11:34:51 -0400335 """
336 Current protobuf indicator:
337 OnuDriftOfWindowIndication {
338 fixed32 intf_id = 1;
339 fixed32 onu_id = 2;
340 string status = 3;
341 fixed32 drift = 4;
342 fixed32 new_eqd = 5;
343 }
344
345 :param onu_drift_of_window_ind:
346 :return:
347 """
348 try:
349 ind = onu_drift_of_window_ind
350 label = "onu-window-drift-indication"
351
352 onu_device_id, onu_serial_number = self.resolve_onudev_id_onudev_serialnum(
353 self.resolve_onu_id(ind.onu_id, port_intf_id=ind.intf_id))
354
355 self.log.debug(label + ' received',
356 onu_drift_of_window_ind=ind,
357 int_id=ind.intf_id,
358 onu_id=ind.onu_id,
359 onu_device_id=onu_device_id,
360 drift=ind.drift,
361 new_eqd=ind.new_eqd,
362 status=ind.status)
363 try:
364 if ind.status == 1 or ind.status == "on":
365 OnuWindowDriftAlarm(self.alarms, intf_id=ind.intf_id,
366 onu_id=onu_device_id,
367 drift=ind.drift,
368 new_eqd=ind.new_eqd).raise_alarm()
369 else:
370 OnuWindowDriftAlarm(self.alarms, intf_id=ind.intf_id,
371 onu_id=onu_device_id,
372 drift=ind.drift,
373 new_eqd=ind.new_eqd).clear_alarm()
374 except Exception as alarm_err:
375 self.log.exception(label, errmsg=alarm_err.message)
376
377 except Exception as e:
378 self.log.exception(label, errmsg=e.message)
Nicolas Palpacuer16138de2018-07-03 14:35:18 -0400379
380 def onu_loss_omci_indication(self, onu_loss_omci_ind):
381 self.log.info('not implemented yet')
382
383 def onu_signals_failure_indication(self, onu_signals_fail_ind):
mzadigb486c072018-08-08 11:34:51 -0400384 """
385 Current protobuf indicator:
386 OnuSignalsFailureIndication {
387 fixed32 intf_id = 1;
388 fixed32 onu_id = 2;
389 string status = 3;
390 fixed32 inverse_bit_error_rate = 4;
391 }
392
393 :param onu_signals_fail_ind:
394 :return:
395 """
396 try:
397 ind = onu_signals_fail_ind
398 label = "onu-signal-failure-indication"
399
400 onu_device_id, onu_serial_number = self.resolve_onudev_id_onudev_serialnum(
401 self.resolve_onu_id(ind.onu_id, port_intf_id=ind.intf_id))
402
403 self.log.debug(label + ' received',
404 onu_startup_fail_ind=ind,
405 int_id=ind.intf_id,
406 onu_id=ind.onu_id,
407 onu_device_id=onu_device_id,
408 onu_serial_number=onu_serial_number,
409 inverse_bit_error_rate=ind.inverse_bit_error_rate,
410 status=ind.status)
411 try:
412 if ind.status == 1 or ind.status == "on":
413 OnuSignalFailAlarm(self.alarms, intf_id=ind.intf_id,
414 onu_id=onu_device_id,
415 inverse_bit_error_rate=ind.inverse_bit_error_rate).raise_alarm()
416 else:
417 OnuSignalFailAlarm(self.alarms, intf_id=ind.intf_id,
418 onu_id=onu_device_id,
419 inverse_bit_error_rate=ind.inverse_bit_error_rate).clear_alarm()
420 except Exception as alarm_err:
421 self.log.exception(label, errmsg=alarm_err.message)
422
423 except Exception as e:
424 self.log.exception(label, errmsg=e.message)
425
Nicolas Palpacuer16138de2018-07-03 14:35:18 -0400426
427 def onu_transmission_interference_warning(self, onu_tiwi_ind):
428 self.log.info('not implemented yet')
429
430 def onu_activation_failure_indication(self, onu_activation_fail_ind):
mzadigb486c072018-08-08 11:34:51 -0400431 """
432
433 No status is currently passed with this alarm. Consequently it will always just raise
434 :param onu_activation_fail_ind:
435 :return:
436 """
437 try:
438 ind = onu_activation_fail_ind
439 label = "onu-activation-failure-indication"
440
441 onu_device_id, onu_serial_number = self.resolve_onudev_id_onudev_serialnum(
442 self.resolve_onu_id(ind.onu_id, port_intf_id=ind.intf_id))
443
444 self.log.debug(label + ' received',
445 onu_startup_fail_ind=ind,
446 int_id=ind.intf_id,
447 onu_id=ind.onu_id,
448 onu_device_id=onu_device_id,
449 onu_serial_number=onu_serial_number)
450 try:
451
452 OnuActivationFailAlarm(self.alarms, intf_id=ind.intf_id,
453 onu_id=onu_device_id).raise_alarm()
454 except Exception as alarm_err:
455 self.log.exception(label, errmsg=alarm_err.message)
456
457 except Exception as e:
458 self.log.exception(label, errmsg=e.message)
Nicolas Palpacuer16138de2018-07-03 14:35:18 -0400459
460 def onu_processing_error_indication(self, onu_processing_error_ind):
mzadig7cda5ff2018-07-10 16:37:28 -0400461 self.log.info('not implemented yet')
mzadige4ad1d22018-07-27 15:27:22 -0400462
mzadigb486c072018-08-08 11:34:51 -0400463 """
464 Helper Methods
465 """
466
467 def resolve_onudev_id_onudev_serialnum(self,onu_device):
468 """
469 Convenience wrapper to resolve device_id and serial number
470 :param onu_device:
471 :return: tuple: onu_device_id, onu_serial_number
472 """
473 try:
474 onu_device_id = "unresolved"
475 onu_serial_number = "unresolved"
476 if onu_device != None:
477 onu_device_id = onu_device.id
478 onu_serial_number = onu_device.serial_number
479 except Exception as err:
480 self.log.exception("openolt-alarms-resolve-onudev-id ", errmsg=err.message)
481 raise Exception(err)
482 return onu_device_id, onu_serial_number
483
mzadige4ad1d22018-07-27 15:27:22 -0400484 def resolve_onu_id(self, onu_id, port_intf_id):
485 """
486 Resolve the onu_device from the intf_id value and port. Uses the adapter agent to
487 resolve this..
488
489 Returns None if not found. Caller will have to test for None and act accordingly.
490 :param onu_id:
491 :param port_intf_id:
492 :return:
493 """
494
495 try:
496 onu_device = None
497 onu_device = self.adapter_agent.get_child_device(
498 self.device_id,
499 parent_port_no=platform.intf_id_to_port_no(
500 port_intf_id, device_pb2.Port.PON_OLT),
501 onu_id=onu_id)
502 onu_device_id = onu_device.id
503 except Exception as inner:
504 self.log.exception('resolve-onu-id', errmsg=inner.message)
505
506 return onu_device
507