blob: 4b6d12dba1999389a2b54a714dab3e248ac9e5e3 [file] [log] [blame]
Devmalya Paulfb990a52019-07-09 10:01:49 -04001/*
2 * Copyright 2018-present Open Networking 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
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
Scott Bakerdbd960e2020-02-28 08:57:51 -080017// Package core provides APIs for the openOLT adapter
18package core
Devmalya Paulfb990a52019-07-09 10:01:49 -040019
20import (
kesavand39e0aa32020-01-28 20:58:50 -050021 ctx "context"
Devmalya Paulfb990a52019-07-09 10:01:49 -040022 "fmt"
Naga Manjunath9546b912019-11-28 20:56:20 +053023 "strconv"
Naga Manjunatha8dc9372019-10-31 23:01:18 +053024
Esin Karamanccb714b2019-11-29 15:02:06 +000025 "github.com/opencord/voltha-lib-go/v3/pkg/adapters/adapterif"
26 "github.com/opencord/voltha-lib-go/v3/pkg/log"
Thomas Lee S94109f12020-03-03 16:39:29 +053027 "github.com/opencord/voltha-openolt-adapter/internal/pkg/olterrors"
kesavand39e0aa32020-01-28 20:58:50 -050028 "github.com/opencord/voltha-protos/v3/go/common"
Esin Karamanccb714b2019-11-29 15:02:06 +000029 oop "github.com/opencord/voltha-protos/v3/go/openolt"
30 "github.com/opencord/voltha-protos/v3/go/voltha"
Devmalya Paulfb990a52019-07-09 10:01:49 -040031)
32
33const (
Devmalya Paul41a762d2020-03-01 18:56:54 -050034 onuDiscoveryEvent = "ONU_DISCOVERY"
35 onuLosEvent = "ONU_LOSS_OF_SIGNAL"
36 onuLobEvent = "ONU_LOSS_OF_BURST"
37 onuLopcMissEvent = "ONU_LOPC_MISS"
38 onuLopcMicErrorEvent = "ONU_LOPC_MIC_ERROR"
39 oltLosEvent = "OLT_LOSS_OF_SIGNAL"
40 oltIndicationDown = "OLT_DOWN_INDICATION"
41 onuDyingGaspEvent = "ONU_DYING_GASP"
42 onuSignalsFailEvent = "ONU_SIGNALS_FAIL"
43 onuStartupFailEvent = "ONU_STARTUP_FAIL"
44 onuSignalDegradeEvent = "ONU_SIGNAL_DEGRADE"
45 onuDriftOfWindowEvent = "ONU_DRIFT_OF_WINDOW"
46 onuActivationFailEvent = "ONU_ACTIVATION_FAIL"
47 onuProcessingErrorEvent = "ONU_PROCESSING_ERROR"
48 onuTiwiEvent = "ONU_TRANSMISSION_WARNING"
49 onuLossOmciEvent = "ONU_LOSS_OF_OMCI_CHANNEL"
50 onuLossOfKeySyncEvent = "ONU_LOSS_OF_KEY_SYNC"
51 onuLossOfFrameEvent = "ONU_LOSS_OF_FRAME"
52 onuLossOfPloamEvent = "ONU_LOSS_OF_PLOAM"
53 ponIntfDownIndiction = "OLT_PON_INTERFACE_DOWN"
54 onuDeactivationFailureEvent = "ONU_DEACTIVATION_FAILURE"
55 onuRemoteDefectIndication = "ONU_REMOTE_DEFECT"
56 onuLossOfGEMChannelDelineationEvent = "ONU_LOSS_OF_GEM_CHANNEL_DELINEATION"
57 onuPhysicalEquipmentErrorEvent = "ONU_PHYSICAL_EQUIPMENT_ERROR"
58 onuLossOfAcknowledgementEvent = "ONU_LOSS_OF_ACKNOWLEDGEMENT"
Devmalya Pauleb5294e2020-03-19 03:01:39 -040059 onuDifferentialReachExceededEvent = "ONU_DIFFERENTIAL_REACH_EXCEEDED"
Devmalya Paulfb990a52019-07-09 10:01:49 -040060)
61
62const (
63 pon = voltha.EventSubCategory_PON
64 olt = voltha.EventSubCategory_OLT
65 ont = voltha.EventSubCategory_ONT
66 onu = voltha.EventSubCategory_ONU
67 nni = voltha.EventSubCategory_NNI
68 service = voltha.EventCategory_SERVICE
69 security = voltha.EventCategory_SECURITY
70 equipment = voltha.EventCategory_EQUIPMENT
71 processing = voltha.EventCategory_PROCESSING
72 environment = voltha.EventCategory_ENVIRONMENT
73 communication = voltha.EventCategory_COMMUNICATION
74)
75
Naga Manjunath9546b912019-11-28 20:56:20 +053076const (
77 // statusCheckOn represents status check On
78 statusCheckOn = "on"
79 // statusCheckOff represents status check Off
80 statusCheckOff = "off"
81 // operationStateUp represents operation state Up
82 operationStateUp = "up"
83 // operationStateDown represents operation state Down
84 operationStateDown = "down"
85 // base10 represents base 10 conversion
86 base10 = 10
87)
88
Devmalya Paulfb990a52019-07-09 10:01:49 -040089// OpenOltEventMgr struct contains
90type OpenOltEventMgr struct {
kdarapu381c6902019-07-31 18:23:16 +053091 eventProxy adapterif.EventProxy
Devmalya Paul90ca3012019-09-02 21:55:45 -040092 handler *DeviceHandler
Devmalya Paulfb990a52019-07-09 10:01:49 -040093}
94
95// NewEventMgr is a Function to get a new event manager struct for the OpenOLT to process and publish OpenOLT event
Devmalya Paul90ca3012019-09-02 21:55:45 -040096func NewEventMgr(eventProxy adapterif.EventProxy, handler *DeviceHandler) *OpenOltEventMgr {
Devmalya Paulfb990a52019-07-09 10:01:49 -040097 var em OpenOltEventMgr
98 em.eventProxy = eventProxy
Devmalya Paul90ca3012019-09-02 21:55:45 -040099 em.handler = handler
Devmalya Paulfb990a52019-07-09 10:01:49 -0400100 return &em
101}
102
103// ProcessEvents is function to process and publish OpenOLT event
Devmalya Paul41a762d2020-03-01 18:56:54 -0500104// nolint: gocyclo
David K. Bainbridge794735f2020-02-11 21:01:37 -0800105func (em *OpenOltEventMgr) ProcessEvents(alarmInd *oop.AlarmIndication, deviceID string, raisedTs int64) error {
Naga Manjunath9546b912019-11-28 20:56:20 +0530106 var err error
Devmalya Paulfb990a52019-07-09 10:01:49 -0400107 switch alarmInd.Data.(type) {
108 case *oop.AlarmIndication_LosInd:
Shrey Baid26912972020-04-16 21:02:31 +0530109 logger.Debugw("received-los-indication", log.Fields{"alarm-ind": alarmInd})
Naga Manjunath9546b912019-11-28 20:56:20 +0530110 err = em.oltLosIndication(alarmInd.GetLosInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400111 case *oop.AlarmIndication_OnuAlarmInd:
Shrey Baid26912972020-04-16 21:02:31 +0530112 logger.Debugw("received-onu-alarm-indication ", log.Fields{"alarm-ind": alarmInd})
Naga Manjunath9546b912019-11-28 20:56:20 +0530113 err = em.onuAlarmIndication(alarmInd.GetOnuAlarmInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400114 case *oop.AlarmIndication_DyingGaspInd:
Shrey Baid26912972020-04-16 21:02:31 +0530115 logger.Debugw("received-dying-gasp-indication", log.Fields{"alarm-ind": alarmInd})
Naga Manjunath9546b912019-11-28 20:56:20 +0530116 err = em.onuDyingGaspIndication(alarmInd.GetDyingGaspInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400117 case *oop.AlarmIndication_OnuActivationFailInd:
Shrey Baid26912972020-04-16 21:02:31 +0530118 logger.Debugw("received-onu-activation-fail-indication ", log.Fields{"alarm-ind": alarmInd})
Naga Manjunath9546b912019-11-28 20:56:20 +0530119 err = em.onuActivationFailIndication(alarmInd.GetOnuActivationFailInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400120 case *oop.AlarmIndication_OnuLossOmciInd:
Shrey Baid26912972020-04-16 21:02:31 +0530121 logger.Debugw("received-onu-loss-omci-indication ", log.Fields{"alarm-ind": alarmInd})
Naga Manjunath9546b912019-11-28 20:56:20 +0530122 err = em.onuLossOmciIndication(alarmInd.GetOnuLossOmciInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400123 case *oop.AlarmIndication_OnuDriftOfWindowInd:
Shrey Baid26912972020-04-16 21:02:31 +0530124 logger.Debugw("received-onu-drift-of-window-indication ", log.Fields{"alarm-ind": alarmInd})
Naga Manjunath9546b912019-11-28 20:56:20 +0530125 err = em.onuDriftOfWindowIndication(alarmInd.GetOnuDriftOfWindowInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400126 case *oop.AlarmIndication_OnuSignalDegradeInd:
Shrey Baid26912972020-04-16 21:02:31 +0530127 logger.Debugw("received-onu-signal-degrade-indication ", log.Fields{"alarm-ind": alarmInd})
Naga Manjunath9546b912019-11-28 20:56:20 +0530128 err = em.onuSignalDegradeIndication(alarmInd.GetOnuSignalDegradeInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400129 case *oop.AlarmIndication_OnuSignalsFailInd:
Shrey Baid26912972020-04-16 21:02:31 +0530130 logger.Debugw("received-onu-signal-fail-indication ", log.Fields{"alarm-ind": alarmInd})
Naga Manjunath9546b912019-11-28 20:56:20 +0530131 err = em.onuSignalsFailIndication(alarmInd.GetOnuSignalsFailInd(), deviceID, raisedTs)
Naga Manjunathf6f74642020-01-13 21:37:28 +0530132 case *oop.AlarmIndication_OnuStartupFailInd:
Shrey Baid26912972020-04-16 21:02:31 +0530133 logger.Debugw("received-onu-startup-fail-indication ", log.Fields{"alarm-ind": alarmInd})
Naga Manjunathf6f74642020-01-13 21:37:28 +0530134 err = em.onuStartupFailedIndication(alarmInd.GetOnuStartupFailInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400135 case *oop.AlarmIndication_OnuTiwiInd:
Shrey Baid26912972020-04-16 21:02:31 +0530136 logger.Debugw("received-onu-transmission-warning-indication ", log.Fields{"alarm-ind": alarmInd})
137 logger.Warnw("not-implemented-yet", log.Fields{"alarm-ind": "Onu-Transmission-indication"})
Naga Manjunath9546b912019-11-28 20:56:20 +0530138 case *oop.AlarmIndication_OnuLossOfSyncFailInd:
Shrey Baid26912972020-04-16 21:02:31 +0530139 logger.Debugw("received-onu-loss-of-sync-fail-indication ", log.Fields{"alarm-ind": alarmInd})
Naga Manjunath9546b912019-11-28 20:56:20 +0530140 err = em.onuLossOfSyncIndication(alarmInd.GetOnuLossOfSyncFailInd(), deviceID, raisedTs)
141 case *oop.AlarmIndication_OnuItuPonStatsInd:
Shrey Baid26912972020-04-16 21:02:31 +0530142 logger.Debugw("received-onu-itu-pon-stats-indication ", log.Fields{"alarm-ind": alarmInd})
143 logger.Warnw("not-implemented-yet", log.Fields{"alarm-ind": alarmInd})
Devmalya Paul6f063a62020-02-19 19:19:06 -0500144 case *oop.AlarmIndication_OnuRemoteDefectInd:
Shrey Baid26912972020-04-16 21:02:31 +0530145 logger.Debugw("received-onu-remote-defect-indication ", log.Fields{"alarm-ind": alarmInd})
Devmalya Paul6f063a62020-02-19 19:19:06 -0500146 err = em.onuRemoteDefectIndication(alarmInd.GetOnuRemoteDefectInd(), deviceID, raisedTs)
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500147 case *oop.AlarmIndication_OnuDeactivationFailureInd:
Shrey Baid26912972020-04-16 21:02:31 +0530148 logger.Debugw("received-onu-deactivation-failure-indication ", log.Fields{"alarm-ind": alarmInd})
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500149 err = em.onuDeactivationFailureIndication(alarmInd.GetOnuDeactivationFailureInd(), deviceID, raisedTs)
Devmalya Paul41a762d2020-03-01 18:56:54 -0500150 case *oop.AlarmIndication_OnuLossGemDelineationInd:
Shrey Baid26912972020-04-16 21:02:31 +0530151 logger.Debugw("received-onu-loss-of-gem-channel-delineation-indication ", log.Fields{"alarm-ind": alarmInd})
Devmalya Paul41a762d2020-03-01 18:56:54 -0500152 err = em.onuLossOfGEMChannelDelineationIndication(alarmInd.GetOnuLossGemDelineationInd(), deviceID, raisedTs)
153 case *oop.AlarmIndication_OnuPhysicalEquipmentErrorInd:
Shrey Baid26912972020-04-16 21:02:31 +0530154 logger.Debugw("received-onu-physical-equipment-error-indication ", log.Fields{"alarm-ind": alarmInd})
Devmalya Paul41a762d2020-03-01 18:56:54 -0500155 err = em.onuPhysicalEquipmentErrorIndication(alarmInd.GetOnuPhysicalEquipmentErrorInd(), deviceID, raisedTs)
156 case *oop.AlarmIndication_OnuLossOfAckInd:
Shrey Baid26912972020-04-16 21:02:31 +0530157 logger.Debugw("received-onu-loss-of-acknowledgement-indication ", log.Fields{"alarm-ind": alarmInd})
Devmalya Paul41a762d2020-03-01 18:56:54 -0500158 err = em.onuLossOfAcknowledgementIndication(alarmInd.GetOnuLossOfAckInd(), deviceID, raisedTs)
Devmalya Pauleb5294e2020-03-19 03:01:39 -0400159 case *oop.AlarmIndication_OnuDiffReachExceededInd:
Shrey Baid26912972020-04-16 21:02:31 +0530160 logger.Debugw("received-onu-differential-reach-exceeded-indication ", log.Fields{"alarm-ind": alarmInd})
Devmalya Pauleb5294e2020-03-19 03:01:39 -0400161 err = em.onuDifferentialReachExceededIndication(alarmInd.GetOnuDiffReachExceededInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400162 default:
Thomas Lee S94109f12020-03-03 16:39:29 +0530163 err = olterrors.NewErrInvalidValue(log.Fields{"indication-type": alarmInd}, nil)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400164 }
Naga Manjunath9546b912019-11-28 20:56:20 +0530165 if err != nil {
Thomas Lee S94109f12020-03-03 16:39:29 +0530166 return olterrors.NewErrCommunication("publish-message", log.Fields{"indication-type": alarmInd}, err).Log()
Naga Manjunath9546b912019-11-28 20:56:20 +0530167 }
David K. Bainbridge794735f2020-02-11 21:01:37 -0800168 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400169}
170
Daniele Rossi051466a2019-07-26 13:39:37 +0000171// oltUpDownIndication handles Up and Down state of an OLT
Naga Manjunath9546b912019-11-28 20:56:20 +0530172func (em *OpenOltEventMgr) oltUpDownIndication(oltIndication *oop.OltIndication, deviceID string, raisedTs int64) error {
Daniele Rossi051466a2019-07-26 13:39:37 +0000173 var de voltha.DeviceEvent
174 context := make(map[string]string)
175 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530176 context["oper-state"] = oltIndication.OperState
Daniele Rossi051466a2019-07-26 13:39:37 +0000177 /* Populating device event body */
178 de.Context = context
179 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530180 if oltIndication.OperState == operationStateDown {
Daniele Rossi051466a2019-07-26 13:39:37 +0000181 de.DeviceEventName = fmt.Sprintf("%s_%s", oltIndicationDown, "RAISE_EVENT")
Naga Manjunath9546b912019-11-28 20:56:20 +0530182 } else if oltIndication.OperState == operationStateUp {
Daniele Rossi051466a2019-07-26 13:39:37 +0000183 de.DeviceEventName = fmt.Sprintf("%s_%s", oltIndicationDown, "CLEAR_EVENT")
184 }
185 /* Send event to KAFKA */
186 if err := em.eventProxy.SendDeviceEvent(&de, communication, olt, raisedTs); err != nil {
Girish Kumarf26e4882020-03-05 06:49:10 +0000187 return olterrors.NewErrCommunication("send-olt-event", log.Fields{"device-id": deviceID}, err)
Daniele Rossi051466a2019-07-26 13:39:37 +0000188 }
Shrey Baid26912972020-04-16 21:02:31 +0530189 logger.Debugw("olt-updown-event-sent-to-kafka", log.Fields{})
Naga Manjunath9546b912019-11-28 20:56:20 +0530190 return nil
Daniele Rossi051466a2019-07-26 13:39:37 +0000191}
192
Devmalya Paulfb990a52019-07-09 10:01:49 -0400193// OnuDiscoveryIndication is an exported method to handle ONU discovery event
Amit Ghosh75f0e292020-05-14 11:31:54 +0100194func (em *OpenOltEventMgr) OnuDiscoveryIndication(onuDisc *oop.OnuDiscIndication, oltDeviceID string, onuDeviceID string, OnuID uint32, serialNumber string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400195 var de voltha.DeviceEvent
196 context := make(map[string]string)
197 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530198 context["onu-id"] = strconv.FormatUint(uint64(OnuID), base10)
199 context["intf-id"] = strconv.FormatUint(uint64(onuDisc.IntfId), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400200 context["serial-number"] = serialNumber
Amit Ghosh75f0e292020-05-14 11:31:54 +0100201 context["onu-device-id"] = onuDeviceID
Devmalya Paulfb990a52019-07-09 10:01:49 -0400202 /* Populating device event body */
203 de.Context = context
Amit Ghosh75f0e292020-05-14 11:31:54 +0100204 de.ResourceId = oltDeviceID
Devmalya Paulfb990a52019-07-09 10:01:49 -0400205 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDiscoveryEvent, "RAISE_EVENT")
206 /* Send event to KAFKA */
207 if err := em.eventProxy.SendDeviceEvent(&de, equipment, pon, raisedTs); err != nil {
Shrey Baid26912972020-04-16 21:02:31 +0530208 return olterrors.NewErrCommunication("send-onu-discovery-event",
209 log.Fields{
210 "serial-number": serialNumber,
211 "intf-id": onuDisc.IntfId}, err)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400212 }
Shrey Baid26912972020-04-16 21:02:31 +0530213 logger.Debugw("onu-discovery-event-sent-to-kafka",
214 log.Fields{
215 "serial-number": serialNumber,
216 "intf-id": onuDisc.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530217 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400218}
219
Naga Manjunath9546b912019-11-28 20:56:20 +0530220func (em *OpenOltEventMgr) oltLosIndication(oltLos *oop.LosIndication, deviceID string, raisedTs int64) error {
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530221 var err error = nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400222 var de voltha.DeviceEvent
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530223 var alarmInd oop.OnuAlarmIndication
224 ponIntdID := PortNoToIntfID(oltLos.IntfId, voltha.Port_PON_OLT)
225
Devmalya Paulfb990a52019-07-09 10:01:49 -0400226 context := make(map[string]string)
227 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530228 context["intf-id"] = strconv.FormatUint(uint64(oltLos.IntfId), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400229 /* Populating device event body */
230 de.Context = context
231 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530232 if oltLos.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400233 de.DeviceEventName = fmt.Sprintf("%s_%s", oltLosEvent, "RAISE_EVENT")
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530234
235 /* When PON cable disconnected from OLT, it was expected OnuAlarmIndication
236 with "los_status: on" should be raised for each Onu connected to the PON
237 but BAL does not raise this Alarm hence manually sending OnuLosRaise event
238 for all the ONU's connected to PON on receiving LoSIndication for PON */
239 em.handler.onus.Range(func(Onukey interface{}, onuInCache interface{}) bool {
240 if onuInCache.(*OnuDevice).intfID == ponIntdID {
241 alarmInd.IntfId = ponIntdID
242 alarmInd.OnuId = onuInCache.(*OnuDevice).onuID
243 alarmInd.LosStatus = statusCheckOn
244 err = em.onuAlarmIndication(&alarmInd, deviceID, raisedTs)
245 }
246 return true
247 })
248 if err != nil {
249 /* Return if any error encountered while processing ONU LoS Event*/
250 return err
251 }
Devmalya Paulfb990a52019-07-09 10:01:49 -0400252 } else {
253 de.DeviceEventName = fmt.Sprintf("%s_%s", oltLosEvent, "CLEAR_EVENT")
254 }
255 /* Send event to KAFKA */
256 if err := em.eventProxy.SendDeviceEvent(&de, communication, olt, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530257 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400258 }
Shrey Baid26912972020-04-16 21:02:31 +0530259 logger.Debugw("olt-los-event-sent-to-kafka", log.Fields{"intf-id": oltLos.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530260 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400261}
262
Naga Manjunath9546b912019-11-28 20:56:20 +0530263func (em *OpenOltEventMgr) onuDyingGaspIndication(dgi *oop.DyingGaspIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400264 var de voltha.DeviceEvent
Devmalya Paul90ca3012019-09-02 21:55:45 -0400265 var serialNumber string
Devmalya Paulfb990a52019-07-09 10:01:49 -0400266 context := make(map[string]string)
267 /* Populating event context */
Devmalya Paul90ca3012019-09-02 21:55:45 -0400268 serialNumber = ""
Naga Manjunatha8dc9372019-10-31 23:01:18 +0530269 onu := em.handler.formOnuKey(dgi.IntfId, dgi.OnuId)
270 if onu, ok := em.handler.onus.Load(onu); ok {
271 serialNumber = onu.(*OnuDevice).serialNumber
Devmalya Paul90ca3012019-09-02 21:55:45 -0400272 }
273 context["serial-number"] = serialNumber
Naga Manjunath9546b912019-11-28 20:56:20 +0530274 context["intf-id"] = strconv.FormatUint(uint64(dgi.IntfId), base10)
275 context["onu-id"] = strconv.FormatUint(uint64(dgi.OnuId), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400276 /* Populating device event body */
277 de.Context = context
278 de.ResourceId = deviceID
Thomas Lee Sf68399e2020-02-11 15:41:38 +0530279 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDyingGaspEvent, "EVENT")
Devmalya Paulfb990a52019-07-09 10:01:49 -0400280 /* Send event to KAFKA */
281 if err := em.eventProxy.SendDeviceEvent(&de, communication, pon, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530282 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400283 }
Shrey Baid26912972020-04-16 21:02:31 +0530284 logger.Debugw("onu-dying-gasp-event-sent-to-kafka", log.Fields{"intf-id": dgi.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530285 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400286}
287
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530288//wasLosRaised checks whether los raised already. If already raised returns true else false
289func (em *OpenOltEventMgr) wasLosRaised(onuAlarm *oop.OnuAlarmIndication) bool {
290 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
291 if onuInCache, ok := em.handler.onus.Load(onuKey); ok {
Girish Kumar2ad402b2020-03-20 19:45:12 +0000292 logger.Debugw("onu-device-found-in-cache.", log.Fields{"intfID": onuAlarm.IntfId, "onuID": onuAlarm.OnuId})
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530293
294 if onuAlarm.LosStatus == statusCheckOn {
295 if onuInCache.(*OnuDevice).losRaised {
Girish Kumar2ad402b2020-03-20 19:45:12 +0000296 logger.Warnw("onu-los-raised-already", log.Fields{"onu_id": onuAlarm.OnuId,
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530297 "intf_id": onuAlarm.IntfId, "LosStatus": onuAlarm.LosStatus})
298 return true
299 }
300 return false
301 }
302 }
303 return true
304}
305
306//wasLosCleared checks whether los cleared already. If already cleared returns true else false
307func (em *OpenOltEventMgr) wasLosCleared(onuAlarm *oop.OnuAlarmIndication) bool {
308 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
309 if onuInCache, ok := em.handler.onus.Load(onuKey); ok {
Girish Kumar2ad402b2020-03-20 19:45:12 +0000310 logger.Debugw("onu-device-found-in-cache.", log.Fields{"intfID": onuAlarm.IntfId, "onuID": onuAlarm.OnuId})
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530311
312 if onuAlarm.LosStatus == statusCheckOff {
313 if !onuInCache.(*OnuDevice).losRaised {
Girish Kumar2ad402b2020-03-20 19:45:12 +0000314 logger.Warnw("onu-los-cleared-already", log.Fields{"onu_id": onuAlarm.OnuId,
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530315 "intf_id": onuAlarm.IntfId, "LosStatus": onuAlarm.LosStatus})
316 return true
317 }
318 return false
319 }
320 }
321 return true
322}
323
324func (em *OpenOltEventMgr) getDeviceEventName(onuAlarm *oop.OnuAlarmIndication) string {
325 var deviceEventName string
326 if onuAlarm.LosStatus == statusCheckOn {
327 deviceEventName = fmt.Sprintf("%s_%s", onuLosEvent, "RAISE_EVENT")
328 } else if onuAlarm.LosStatus == statusCheckOff {
329 deviceEventName = fmt.Sprintf("%s_%s", onuLosEvent, "CLEAR_EVENT")
330 } else if onuAlarm.LobStatus == statusCheckOn {
331 deviceEventName = fmt.Sprintf("%s_%s", onuLobEvent, "RAISE_EVENT")
332 } else if onuAlarm.LobStatus == statusCheckOff {
333 deviceEventName = fmt.Sprintf("%s_%s", onuLobEvent, "CLEAR_EVENT")
334 } else if onuAlarm.LopcMissStatus == statusCheckOn {
335 deviceEventName = fmt.Sprintf("%s_%s", onuLopcMissEvent, "RAISE_EVENT")
336 } else if onuAlarm.LopcMissStatus == statusCheckOff {
337 deviceEventName = fmt.Sprintf("%s_%s", onuLopcMissEvent, "CLEAR_EVENT")
338 } else if onuAlarm.LopcMicErrorStatus == statusCheckOn {
339 deviceEventName = fmt.Sprintf("%s_%s", onuLopcMicErrorEvent, "RAISE_EVENT")
340 } else if onuAlarm.LopcMicErrorStatus == statusCheckOff {
341 deviceEventName = fmt.Sprintf("%s_%s", onuLopcMicErrorEvent, "CLEAR_EVENT")
342 } else if onuAlarm.LofiStatus == statusCheckOn {
343 deviceEventName = fmt.Sprintf("%s_%s", onuLossOfFrameEvent, "RAISE_EVENT")
344 } else if onuAlarm.LofiStatus == statusCheckOff {
345 deviceEventName = fmt.Sprintf("%s_%s", onuLossOfFrameEvent, "CLEAR_EVENT")
346 } else if onuAlarm.LoamiStatus == statusCheckOn {
347 deviceEventName = fmt.Sprintf("%s_%s", onuLossOfPloamEvent, "RAISE_EVENT")
348 } else if onuAlarm.LoamiStatus == statusCheckOff {
349 deviceEventName = fmt.Sprintf("%s_%s", onuLossOfPloamEvent, "CLEAR_EVENT")
350 }
351 return deviceEventName
352}
353
Naga Manjunath9546b912019-11-28 20:56:20 +0530354func (em *OpenOltEventMgr) onuAlarmIndication(onuAlarm *oop.OnuAlarmIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400355 var de voltha.DeviceEvent
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530356 var serialNumber string
Devmalya Paulfb990a52019-07-09 10:01:49 -0400357 context := make(map[string]string)
358 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530359 context["intf-id"] = strconv.FormatUint(uint64(onuAlarm.IntfId), base10)
360 context["onu-id"] = strconv.FormatUint(uint64(onuAlarm.OnuId), base10)
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530361 serialNumber = ""
362 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
363 if onu, ok := em.handler.onus.Load(onuKey); ok {
364 serialNumber = onu.(*OnuDevice).serialNumber
365 }
366 context["serial-number"] = serialNumber
367
Devmalya Paulfb990a52019-07-09 10:01:49 -0400368 /* Populating device event body */
369 de.Context = context
370 de.ResourceId = deviceID
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530371 de.DeviceEventName = em.getDeviceEventName(onuAlarm)
372
373 switch onuAlarm.LosStatus {
374 case statusCheckOn:
375 if em.wasLosRaised(onuAlarm) {
376 /* No need to raise Onu Los Event as it might have already raised
377 or Onu might have deleted */
378 return nil
379 }
380 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
381 if onuInCache, ok := em.handler.onus.Load(onuKey); ok {
382 /* Update onu device with LoS raised state as true */
383 em.handler.onus.Store(onuKey, NewOnuDevice(onuInCache.(*OnuDevice).deviceID, onuInCache.(*OnuDevice).deviceType,
384 onuInCache.(*OnuDevice).serialNumber, onuInCache.(*OnuDevice).onuID, onuInCache.(*OnuDevice).intfID,
385 onuInCache.(*OnuDevice).proxyDeviceID, true))
386 }
387 case statusCheckOff:
388 if em.wasLosCleared(onuAlarm) {
389 /* No need to clear Onu Los Event as it might have already cleared
390 or Onu might have deleted */
391 return nil
392 }
393 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
394 if onuInCache, ok := em.handler.onus.Load(onuKey); ok {
395 /* Update onu device with LoS raised state as false */
396 em.handler.onus.Store(onuKey, NewOnuDevice(onuInCache.(*OnuDevice).deviceID, onuInCache.(*OnuDevice).deviceType,
397 onuInCache.(*OnuDevice).serialNumber, onuInCache.(*OnuDevice).onuID, onuInCache.(*OnuDevice).intfID,
398 onuInCache.(*OnuDevice).proxyDeviceID, false))
399 }
Devmalya Paulfb990a52019-07-09 10:01:49 -0400400 }
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530401
Devmalya Paulfb990a52019-07-09 10:01:49 -0400402 /* Send event to KAFKA */
403 if err := em.eventProxy.SendDeviceEvent(&de, communication, onu, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530404 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400405 }
Shrey Baid26912972020-04-16 21:02:31 +0530406 logger.Debugw("onu-los-event-sent-to-kafka", log.Fields{"onu-id": onuAlarm.OnuId, "intf-id": onuAlarm.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530407 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400408}
409
Naga Manjunath9546b912019-11-28 20:56:20 +0530410func (em *OpenOltEventMgr) onuActivationFailIndication(oaf *oop.OnuActivationFailureIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400411 var de voltha.DeviceEvent
412 context := make(map[string]string)
413 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530414 context["intf-id"] = strconv.FormatUint(uint64(oaf.IntfId), base10)
415 context["onu-id"] = strconv.FormatUint(uint64(oaf.OnuId), base10)
Scott Bakerd4df1182020-02-05 11:38:42 -0800416 context["fail-reason"] = strconv.FormatUint(uint64(oaf.FailReason), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400417 /* Populating device event body */
418 de.Context = context
419 de.ResourceId = deviceID
420 de.DeviceEventName = fmt.Sprintf("%s_%s", onuActivationFailEvent, "RAISE_EVENT")
421 /* Send event to KAFKA */
422 if err := em.eventProxy.SendDeviceEvent(&de, equipment, pon, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530423 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400424 }
Shrey Baid26912972020-04-16 21:02:31 +0530425 logger.Debugw("onu-activation-failure-event-sent-to-kafka", log.Fields{"onu-id": oaf.OnuId, "intf-id": oaf.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530426 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400427}
428
Naga Manjunath9546b912019-11-28 20:56:20 +0530429func (em *OpenOltEventMgr) onuLossOmciIndication(onuLossOmci *oop.OnuLossOfOmciChannelIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400430 var de voltha.DeviceEvent
431 context := make(map[string]string)
432 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530433 context["intf-id"] = strconv.FormatUint(uint64(onuLossOmci.IntfId), base10)
434 context["onu-id"] = strconv.FormatUint(uint64(onuLossOmci.OnuId), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400435 /* Populating device event body */
436 de.Context = context
437 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530438 if onuLossOmci.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400439 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOmciEvent, "RAISE_EVENT")
440 } else {
441 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOmciEvent, "CLEAR_EVENT")
442 }
443 /* Send event to KAFKA */
444 if err := em.eventProxy.SendDeviceEvent(&de, communication, pon, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530445 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400446 }
Shrey Baid26912972020-04-16 21:02:31 +0530447 logger.Debugw("onu-loss-of-omci-channel-event-sent-to-kafka", log.Fields{"onu-id": onuLossOmci.OnuId, "intf-id": onuLossOmci.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530448 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400449}
450
Naga Manjunath9546b912019-11-28 20:56:20 +0530451func (em *OpenOltEventMgr) onuDriftOfWindowIndication(onuDriftWindow *oop.OnuDriftOfWindowIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400452 var de voltha.DeviceEvent
453 context := make(map[string]string)
454 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530455 context["intf-id"] = strconv.FormatUint(uint64(onuDriftWindow.IntfId), base10)
456 context["onu-id"] = strconv.FormatUint(uint64(onuDriftWindow.OnuId), base10)
Scott Bakerd4df1182020-02-05 11:38:42 -0800457 context["drift"] = strconv.FormatUint(uint64(onuDriftWindow.Drift), base10)
458 context["new-eqd"] = strconv.FormatUint(uint64(onuDriftWindow.NewEqd), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400459 /* Populating device event body */
460 de.Context = context
461 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530462 if onuDriftWindow.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400463 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDriftOfWindowEvent, "RAISE_EVENT")
464 } else {
465 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDriftOfWindowEvent, "CLEAR_EVENT")
466 }
467 /* Send event to KAFKA */
468 if err := em.eventProxy.SendDeviceEvent(&de, communication, pon, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530469 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400470 }
Shrey Baid26912972020-04-16 21:02:31 +0530471 logger.Debugw("onu-drift-of-window-event-sent-to-kafka", log.Fields{"onu-id": onuDriftWindow.OnuId, "intf-id": onuDriftWindow.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530472 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400473}
474
Naga Manjunath9546b912019-11-28 20:56:20 +0530475func (em *OpenOltEventMgr) onuSignalDegradeIndication(onuSignalDegrade *oop.OnuSignalDegradeIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400476 var de voltha.DeviceEvent
477 context := make(map[string]string)
478 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530479 context["intf-id"] = strconv.FormatUint(uint64(onuSignalDegrade.IntfId), base10)
480 context["onu-id"] = strconv.FormatUint(uint64(onuSignalDegrade.OnuId), base10)
Scott Bakerd4df1182020-02-05 11:38:42 -0800481 context["inverse-bit-error-rate"] = strconv.FormatUint(uint64(onuSignalDegrade.InverseBitErrorRate), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400482 /* Populating device event body */
483 de.Context = context
484 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530485 if onuSignalDegrade.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400486 de.DeviceEventName = fmt.Sprintf("%s_%s", onuSignalDegradeEvent, "RAISE_EVENT")
487 } else {
488 de.DeviceEventName = fmt.Sprintf("%s_%s", onuSignalDegradeEvent, "CLEAR_EVENT")
489 }
490 /* Send event to KAFKA */
491 if err := em.eventProxy.SendDeviceEvent(&de, communication, pon, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530492 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400493 }
Shrey Baid26912972020-04-16 21:02:31 +0530494 logger.Debugw("onu-signal-degrade-event-sent-to-kafka", log.Fields{"onu-id": onuSignalDegrade.OnuId, "intf-id": onuSignalDegrade.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530495 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400496}
497
Naga Manjunath9546b912019-11-28 20:56:20 +0530498func (em *OpenOltEventMgr) onuSignalsFailIndication(onuSignalsFail *oop.OnuSignalsFailureIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400499 var de voltha.DeviceEvent
500 context := make(map[string]string)
501 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530502 context["onu-id"] = strconv.FormatUint(uint64(onuSignalsFail.OnuId), base10)
503 context["intf-id"] = strconv.FormatUint(uint64(onuSignalsFail.IntfId), base10)
504 context["inverse-bit-error-rate"] = strconv.FormatUint(uint64(onuSignalsFail.InverseBitErrorRate), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400505 /* Populating device event body */
506 de.Context = context
507 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530508 if onuSignalsFail.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400509 de.DeviceEventName = fmt.Sprintf("%s_%s", onuSignalsFailEvent, "RAISE_EVENT")
510 } else {
511 de.DeviceEventName = fmt.Sprintf("%s_%s", onuSignalsFailEvent, "CLEAR_EVENT")
512 }
513 /* Send event to KAFKA */
514 if err := em.eventProxy.SendDeviceEvent(&de, communication, pon, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530515 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400516 }
Shrey Baid26912972020-04-16 21:02:31 +0530517 logger.Debugw("onu-signals-fail-event-sent-to-kafka", log.Fields{"onu-id": onuSignalsFail.OnuId, "intf-id": onuSignalsFail.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530518 return nil
519}
520
Naga Manjunathf6f74642020-01-13 21:37:28 +0530521func (em *OpenOltEventMgr) onuStartupFailedIndication(onuStartupFail *oop.OnuStartupFailureIndication, deviceID string, raisedTs int64) error {
522 var de voltha.DeviceEvent
523 context := make(map[string]string)
524 /* Populating event context */
525 context["onu-id"] = strconv.FormatUint(uint64(onuStartupFail.OnuId), base10)
526 context["intf-id"] = strconv.FormatUint(uint64(onuStartupFail.IntfId), base10)
527
528 /* Populating device event body */
529 de.Context = context
530 de.ResourceId = deviceID
531 if onuStartupFail.Status == statusCheckOn {
532 de.DeviceEventName = fmt.Sprintf("%s_%s", onuStartupFailEvent, "RAISE_EVENT")
533 } else {
534 de.DeviceEventName = fmt.Sprintf("%s_%s", onuStartupFailEvent, "CLEAR_EVENT")
535 }
536 /* Send event to KAFKA */
537 if err := em.eventProxy.SendDeviceEvent(&de, communication, pon, raisedTs); err != nil {
Naga Manjunathf6f74642020-01-13 21:37:28 +0530538 return err
539 }
Shrey Baid26912972020-04-16 21:02:31 +0530540 logger.Debugw("onu-startup-fail-event-sent-to-kafka", log.Fields{"onu-id": onuStartupFail.OnuId, "intf-id": onuStartupFail.IntfId})
Naga Manjunathf6f74642020-01-13 21:37:28 +0530541 return nil
542}
543
Naga Manjunath9546b912019-11-28 20:56:20 +0530544func (em *OpenOltEventMgr) onuLossOfSyncIndication(onuLOKI *oop.OnuLossOfKeySyncFailureIndication, deviceID string, raisedTs int64) error {
545 var de voltha.DeviceEvent
546 context := make(map[string]string)
547 /* Populating event context */
548 context["onu-id"] = strconv.FormatUint(uint64(onuLOKI.OnuId), base10)
549 context["intf-id"] = strconv.FormatUint(uint64(onuLOKI.IntfId), base10)
550 /* Populating device event body */
551 de.Context = context
552 de.ResourceId = deviceID
553 if onuLOKI.Status == statusCheckOn {
554 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfKeySyncEvent, "RAISE_EVENT")
555 } else {
556 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfKeySyncEvent, "CLEAR_EVENT")
557 }
558
559 /* Send event to KAFKA */
560 if err := em.eventProxy.SendDeviceEvent(&de, security, onu, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530561 return err
562 }
Shrey Baid26912972020-04-16 21:02:31 +0530563 logger.Debugw("onu-loss-of-key-sync-event-sent-to-kafka", log.Fields{"onu-id": onuLOKI.OnuId, "intf-id": onuLOKI.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530564 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400565}
kesavand39e0aa32020-01-28 20:58:50 -0500566
567// oltIntfOperIndication handles Up and Down state of an OLT PON ports
Devmalya Paul24400472020-03-12 19:26:02 -0400568func (em *OpenOltEventMgr) oltIntfOperIndication(ifindication *oop.IntfOperIndication, deviceID string, raisedTs int64) error {
kesavand39e0aa32020-01-28 20:58:50 -0500569 var de voltha.DeviceEvent
570 context := make(map[string]string)
571 portID := IntfIDToPortNo(ifindication.IntfId, voltha.Port_PON_OLT)
572 device, err := em.handler.coreProxy.GetDevice(ctx.Background(), deviceID, deviceID)
573 if err != nil {
Shrey Baid26912972020-04-16 21:02:31 +0530574 return olterrors.NewErrAdapter("error-while-fetching-device-object", log.Fields{"DeviceId": deviceID}, err)
kesavand39e0aa32020-01-28 20:58:50 -0500575 }
576 for _, port := range device.Ports {
577 if port.PortNo == portID {
578 // Events are suppressed if the Port Adminstate is not enabled.
579 if port.AdminState != common.AdminState_ENABLED {
Shrey Baid26912972020-04-16 21:02:31 +0530580 logger.Debugw("port-disable/enable-event-not-generated--the-port-is-not-enabled-by-operator", log.Fields{"deviceId": deviceID, "port": port})
Devmalya Paul24400472020-03-12 19:26:02 -0400581 return nil
kesavand39e0aa32020-01-28 20:58:50 -0500582 }
583 break
584 }
585 }
586 /* Populating event context */
587 context["oper-state"] = ifindication.GetOperState()
588 /* Populating device event body */
589 de.Context = context
590 de.ResourceId = deviceID
591
592 if ifindication.GetOperState() == operationStateDown {
593 de.DeviceEventName = fmt.Sprintf("%s_%s", ponIntfDownIndiction, "RAISE_EVENT")
594 } else if ifindication.OperState == operationStateUp {
595 de.DeviceEventName = fmt.Sprintf("%s_%s", ponIntfDownIndiction, "CLEAR_EVENT")
596 }
597 /* Send event to KAFKA */
598 if err := em.eventProxy.SendDeviceEvent(&de, communication, olt, raisedTs); err != nil {
Devmalya Paul24400472020-03-12 19:26:02 -0400599 return olterrors.NewErrCommunication("send-olt-intf-oper-status-event", log.Fields{"device-id": deviceID, "intf-id": ifindication.IntfId, "oper-state": ifindication.OperState}, err).Log()
kesavand39e0aa32020-01-28 20:58:50 -0500600 }
Girish Kumar2ad402b2020-03-20 19:45:12 +0000601 logger.Debug("sent-olt-intf-oper-status-event-to-kafka")
Devmalya Paul24400472020-03-12 19:26:02 -0400602 return nil
kesavand39e0aa32020-01-28 20:58:50 -0500603}
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500604
605func (em *OpenOltEventMgr) onuDeactivationFailureIndication(onuDFI *oop.OnuDeactivationFailureIndication, deviceID string, raisedTs int64) error {
606 var de voltha.DeviceEvent
607 context := make(map[string]string)
608 /* Populating event context */
609 context["onu-id"] = strconv.FormatUint(uint64(onuDFI.OnuId), base10)
610 context["intf-id"] = strconv.FormatUint(uint64(onuDFI.IntfId), base10)
611 context["failure-reason"] = strconv.FormatUint(uint64(onuDFI.FailReason), base10)
612 /* Populating device event body */
613 de.Context = context
614 de.ResourceId = deviceID
615 de.DeviceEventName = onuDeactivationFailureEvent
616
617 /* Send event to KAFKA */
618 if err := em.eventProxy.SendDeviceEvent(&de, equipment, onu, raisedTs); err != nil {
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500619 return err
620 }
Shrey Baid26912972020-04-16 21:02:31 +0530621 logger.Debugw("onu-deactivation-failure-event-sent-to-kafka", log.Fields{"onu-id": onuDFI.OnuId, "intf-id": onuDFI.IntfId})
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500622 return nil
623}
Devmalya Paul6f063a62020-02-19 19:19:06 -0500624
625func (em *OpenOltEventMgr) onuRemoteDefectIndication(onuRDI *oop.OnuRemoteDefectIndication, deviceID string, raisedTs int64) error {
626 /* Populating event context */
627 context := map[string]string{
628 "onu-id": strconv.FormatUint(uint64(onuRDI.OnuId), base10),
629 "intf-id": strconv.FormatUint(uint64(onuRDI.IntfId), base10),
630 "rdi-errors": strconv.FormatUint(uint64(onuRDI.RdiErrors), base10),
631 }
632 /* Populating device event body */
633 de := &voltha.DeviceEvent{
634 Context: context,
635 ResourceId: deviceID,
636 DeviceEventName: onuRemoteDefectIndication,
637 }
638 /* Send event to KAFKA */
639 if err := em.eventProxy.SendDeviceEvent(de, equipment, onu, raisedTs); err != nil {
Devmalya Paul6f063a62020-02-19 19:19:06 -0500640 return err
641 }
Shrey Baid26912972020-04-16 21:02:31 +0530642 logger.Debugw("onu-remote-defect-event-sent-to-kafka", log.Fields{"onu-id": onuRDI.OnuId, "intf-id": onuRDI.IntfId})
Devmalya Paul41a762d2020-03-01 18:56:54 -0500643 return nil
644}
645
646func (em *OpenOltEventMgr) onuLossOfGEMChannelDelineationIndication(onuGCD *oop.OnuLossOfGEMChannelDelineationIndication, deviceID string, raisedTs int64) error {
647 /* Populating event context */
648 context := map[string]string{
649 "onu-id": strconv.FormatUint(uint64(onuGCD.OnuId), base10),
650 "intf-id": strconv.FormatUint(uint64(onuGCD.IntfId), base10),
651 "delineation-errors": strconv.FormatUint(uint64(onuGCD.DelineationErrors), base10),
652 }
653 /* Populating device event body */
654 de := &voltha.DeviceEvent{
655 Context: context,
656 ResourceId: deviceID,
657 }
658 if onuGCD.Status == statusCheckOn {
659 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfGEMChannelDelineationEvent, "RAISE_EVENT")
660 } else {
661 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfGEMChannelDelineationEvent, "CLEAR_EVENT")
662 }
663 /* Send event to KAFKA */
664 if err := em.eventProxy.SendDeviceEvent(de, communication, onu, raisedTs); err != nil {
665 return err
666 }
Shrey Baid26912972020-04-16 21:02:31 +0530667 logger.Debugw("onu-loss-of-gem-channel-delineation-event-sent-to-kafka", log.Fields{"onu-id": onuGCD.OnuId, "intf-id": onuGCD.IntfId})
Devmalya Paul41a762d2020-03-01 18:56:54 -0500668 return nil
669}
670
671func (em *OpenOltEventMgr) onuPhysicalEquipmentErrorIndication(onuErr *oop.OnuPhysicalEquipmentErrorIndication, deviceID string, raisedTs int64) error {
672 /* Populating event context */
673 context := map[string]string{
674 "onu-id": strconv.FormatUint(uint64(onuErr.OnuId), base10),
675 "intf-id": strconv.FormatUint(uint64(onuErr.IntfId), base10),
676 }
677 /* Populating device event body */
678 de := &voltha.DeviceEvent{
679 Context: context,
680 ResourceId: deviceID,
681 }
682 if onuErr.Status == statusCheckOn {
683 de.DeviceEventName = fmt.Sprintf("%s_%s", onuPhysicalEquipmentErrorEvent, "RAISE_EVENT")
684 } else {
685 de.DeviceEventName = fmt.Sprintf("%s_%s", onuPhysicalEquipmentErrorEvent, "CLEAR_EVENT")
686 }
687 /* Send event to KAFKA */
688 if err := em.eventProxy.SendDeviceEvent(de, equipment, onu, raisedTs); err != nil {
689 return err
690 }
Shrey Baid26912972020-04-16 21:02:31 +0530691 logger.Debugw("onu-physical-equipment-error-event-sent-to-kafka", log.Fields{"onu-id": onuErr.OnuId, "intf-id": onuErr.IntfId})
Devmalya Paul41a762d2020-03-01 18:56:54 -0500692 return nil
693}
694
695func (em *OpenOltEventMgr) onuLossOfAcknowledgementIndication(onuLOA *oop.OnuLossOfAcknowledgementIndication, deviceID string, raisedTs int64) error {
696 /* Populating event context */
697 context := map[string]string{
698 "onu-id": strconv.FormatUint(uint64(onuLOA.OnuId), base10),
699 "intf-id": strconv.FormatUint(uint64(onuLOA.IntfId), base10),
700 }
701 /* Populating device event body */
702 de := &voltha.DeviceEvent{
703 Context: context,
704 ResourceId: deviceID,
705 }
706 if onuLOA.Status == statusCheckOn {
707 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfAcknowledgementEvent, "RAISE_EVENT")
708 } else {
709 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfAcknowledgementEvent, "CLEAR_EVENT")
710 }
711 /* Send event to KAFKA */
712 if err := em.eventProxy.SendDeviceEvent(de, equipment, onu, raisedTs); err != nil {
713 return err
714 }
Shrey Baid26912972020-04-16 21:02:31 +0530715 logger.Debugw("onu-physical-equipment-error-event-sent-to-kafka", log.Fields{"onu-id": onuLOA.OnuId, "intf-id": onuLOA.IntfId})
Devmalya Paul6f063a62020-02-19 19:19:06 -0500716 return nil
717}
Devmalya Pauleb5294e2020-03-19 03:01:39 -0400718
719func (em *OpenOltEventMgr) onuDifferentialReachExceededIndication(onuDRE *oop.OnuDifferentialReachExceededIndication, deviceID string, raisedTs int64) error {
720 /* Populating event context */
721 context := map[string]string{
722 "onu-id": strconv.FormatUint(uint64(onuDRE.OnuId), base10),
723 "intf-id": strconv.FormatUint(uint64(onuDRE.IntfId), base10),
724 "differential-distance": strconv.FormatUint(uint64(onuDRE.Distance), base10),
725 }
726 /* Populating device event body */
727 de := &voltha.DeviceEvent{
728 Context: context,
729 ResourceId: deviceID,
730 }
731 if onuDRE.Status == statusCheckOn {
732 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDifferentialReachExceededEvent, "RAISE_EVENT")
733 } else {
734 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDifferentialReachExceededEvent, "CLEAR_EVENT")
735 }
736 /* Send event to KAFKA */
737 if err := em.eventProxy.SendDeviceEvent(de, equipment, onu, raisedTs); err != nil {
738 return err
739 }
Shrey Baid26912972020-04-16 21:02:31 +0530740 log.Debugw("onu-differential-reach-exceeded–event-sent-to-kafka", log.Fields{"onu-id": onuDRE.OnuId, "intf-id": onuDRE.IntfId})
Devmalya Pauleb5294e2020-03-19 03:01:39 -0400741 return nil
742}