blob: a692aef657cbd5fbbbe2b017c4991878f2b8e5b6 [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
Naga Manjunath9546b912019-11-28 20:56:20 +0530194func (em *OpenOltEventMgr) OnuDiscoveryIndication(onuDisc *oop.OnuDiscIndication, deviceID 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
201 /* Populating device event body */
202 de.Context = context
203 de.ResourceId = deviceID
204 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDiscoveryEvent, "RAISE_EVENT")
205 /* Send event to KAFKA */
206 if err := em.eventProxy.SendDeviceEvent(&de, equipment, pon, raisedTs); err != nil {
Shrey Baid26912972020-04-16 21:02:31 +0530207 return olterrors.NewErrCommunication("send-onu-discovery-event",
208 log.Fields{
209 "serial-number": serialNumber,
210 "intf-id": onuDisc.IntfId}, err)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400211 }
Shrey Baid26912972020-04-16 21:02:31 +0530212 logger.Debugw("onu-discovery-event-sent-to-kafka",
213 log.Fields{
214 "serial-number": serialNumber,
215 "intf-id": onuDisc.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530216 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400217}
218
Naga Manjunath9546b912019-11-28 20:56:20 +0530219func (em *OpenOltEventMgr) oltLosIndication(oltLos *oop.LosIndication, deviceID string, raisedTs int64) error {
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530220 var err error = nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400221 var de voltha.DeviceEvent
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530222 var alarmInd oop.OnuAlarmIndication
223 ponIntdID := PortNoToIntfID(oltLos.IntfId, voltha.Port_PON_OLT)
224
Devmalya Paulfb990a52019-07-09 10:01:49 -0400225 context := make(map[string]string)
226 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530227 context["intf-id"] = strconv.FormatUint(uint64(oltLos.IntfId), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400228 /* Populating device event body */
229 de.Context = context
230 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530231 if oltLos.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400232 de.DeviceEventName = fmt.Sprintf("%s_%s", oltLosEvent, "RAISE_EVENT")
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530233
234 /* When PON cable disconnected from OLT, it was expected OnuAlarmIndication
235 with "los_status: on" should be raised for each Onu connected to the PON
236 but BAL does not raise this Alarm hence manually sending OnuLosRaise event
237 for all the ONU's connected to PON on receiving LoSIndication for PON */
238 em.handler.onus.Range(func(Onukey interface{}, onuInCache interface{}) bool {
239 if onuInCache.(*OnuDevice).intfID == ponIntdID {
240 alarmInd.IntfId = ponIntdID
241 alarmInd.OnuId = onuInCache.(*OnuDevice).onuID
242 alarmInd.LosStatus = statusCheckOn
243 err = em.onuAlarmIndication(&alarmInd, deviceID, raisedTs)
244 }
245 return true
246 })
247 if err != nil {
248 /* Return if any error encountered while processing ONU LoS Event*/
249 return err
250 }
Devmalya Paulfb990a52019-07-09 10:01:49 -0400251 } else {
252 de.DeviceEventName = fmt.Sprintf("%s_%s", oltLosEvent, "CLEAR_EVENT")
253 }
254 /* Send event to KAFKA */
255 if err := em.eventProxy.SendDeviceEvent(&de, communication, olt, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530256 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400257 }
Shrey Baid26912972020-04-16 21:02:31 +0530258 logger.Debugw("olt-los-event-sent-to-kafka", log.Fields{"intf-id": oltLos.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530259 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400260}
261
Naga Manjunath9546b912019-11-28 20:56:20 +0530262func (em *OpenOltEventMgr) onuDyingGaspIndication(dgi *oop.DyingGaspIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400263 var de voltha.DeviceEvent
Devmalya Paul90ca3012019-09-02 21:55:45 -0400264 var serialNumber string
Devmalya Paulfb990a52019-07-09 10:01:49 -0400265 context := make(map[string]string)
266 /* Populating event context */
Devmalya Paul90ca3012019-09-02 21:55:45 -0400267 serialNumber = ""
Naga Manjunatha8dc9372019-10-31 23:01:18 +0530268 onu := em.handler.formOnuKey(dgi.IntfId, dgi.OnuId)
269 if onu, ok := em.handler.onus.Load(onu); ok {
270 serialNumber = onu.(*OnuDevice).serialNumber
Devmalya Paul90ca3012019-09-02 21:55:45 -0400271 }
272 context["serial-number"] = serialNumber
Naga Manjunath9546b912019-11-28 20:56:20 +0530273 context["intf-id"] = strconv.FormatUint(uint64(dgi.IntfId), base10)
274 context["onu-id"] = strconv.FormatUint(uint64(dgi.OnuId), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400275 /* Populating device event body */
276 de.Context = context
277 de.ResourceId = deviceID
Thomas Lee Sf68399e2020-02-11 15:41:38 +0530278 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDyingGaspEvent, "EVENT")
Devmalya Paulfb990a52019-07-09 10:01:49 -0400279 /* Send event to KAFKA */
280 if err := em.eventProxy.SendDeviceEvent(&de, communication, pon, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530281 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400282 }
Shrey Baid26912972020-04-16 21:02:31 +0530283 logger.Debugw("onu-dying-gasp-event-sent-to-kafka", log.Fields{"intf-id": dgi.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530284 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400285}
286
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530287//wasLosRaised checks whether los raised already. If already raised returns true else false
288func (em *OpenOltEventMgr) wasLosRaised(onuAlarm *oop.OnuAlarmIndication) bool {
289 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
290 if onuInCache, ok := em.handler.onus.Load(onuKey); ok {
Girish Kumar2ad402b2020-03-20 19:45:12 +0000291 logger.Debugw("onu-device-found-in-cache.", log.Fields{"intfID": onuAlarm.IntfId, "onuID": onuAlarm.OnuId})
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530292
293 if onuAlarm.LosStatus == statusCheckOn {
294 if onuInCache.(*OnuDevice).losRaised {
Girish Kumar2ad402b2020-03-20 19:45:12 +0000295 logger.Warnw("onu-los-raised-already", log.Fields{"onu_id": onuAlarm.OnuId,
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530296 "intf_id": onuAlarm.IntfId, "LosStatus": onuAlarm.LosStatus})
297 return true
298 }
299 return false
300 }
301 }
302 return true
303}
304
305//wasLosCleared checks whether los cleared already. If already cleared returns true else false
306func (em *OpenOltEventMgr) wasLosCleared(onuAlarm *oop.OnuAlarmIndication) bool {
307 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
308 if onuInCache, ok := em.handler.onus.Load(onuKey); ok {
Girish Kumar2ad402b2020-03-20 19:45:12 +0000309 logger.Debugw("onu-device-found-in-cache.", log.Fields{"intfID": onuAlarm.IntfId, "onuID": onuAlarm.OnuId})
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530310
311 if onuAlarm.LosStatus == statusCheckOff {
312 if !onuInCache.(*OnuDevice).losRaised {
Girish Kumar2ad402b2020-03-20 19:45:12 +0000313 logger.Warnw("onu-los-cleared-already", log.Fields{"onu_id": onuAlarm.OnuId,
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530314 "intf_id": onuAlarm.IntfId, "LosStatus": onuAlarm.LosStatus})
315 return true
316 }
317 return false
318 }
319 }
320 return true
321}
322
323func (em *OpenOltEventMgr) getDeviceEventName(onuAlarm *oop.OnuAlarmIndication) string {
324 var deviceEventName string
325 if onuAlarm.LosStatus == statusCheckOn {
326 deviceEventName = fmt.Sprintf("%s_%s", onuLosEvent, "RAISE_EVENT")
327 } else if onuAlarm.LosStatus == statusCheckOff {
328 deviceEventName = fmt.Sprintf("%s_%s", onuLosEvent, "CLEAR_EVENT")
329 } else if onuAlarm.LobStatus == statusCheckOn {
330 deviceEventName = fmt.Sprintf("%s_%s", onuLobEvent, "RAISE_EVENT")
331 } else if onuAlarm.LobStatus == statusCheckOff {
332 deviceEventName = fmt.Sprintf("%s_%s", onuLobEvent, "CLEAR_EVENT")
333 } else if onuAlarm.LopcMissStatus == statusCheckOn {
334 deviceEventName = fmt.Sprintf("%s_%s", onuLopcMissEvent, "RAISE_EVENT")
335 } else if onuAlarm.LopcMissStatus == statusCheckOff {
336 deviceEventName = fmt.Sprintf("%s_%s", onuLopcMissEvent, "CLEAR_EVENT")
337 } else if onuAlarm.LopcMicErrorStatus == statusCheckOn {
338 deviceEventName = fmt.Sprintf("%s_%s", onuLopcMicErrorEvent, "RAISE_EVENT")
339 } else if onuAlarm.LopcMicErrorStatus == statusCheckOff {
340 deviceEventName = fmt.Sprintf("%s_%s", onuLopcMicErrorEvent, "CLEAR_EVENT")
341 } else if onuAlarm.LofiStatus == statusCheckOn {
342 deviceEventName = fmt.Sprintf("%s_%s", onuLossOfFrameEvent, "RAISE_EVENT")
343 } else if onuAlarm.LofiStatus == statusCheckOff {
344 deviceEventName = fmt.Sprintf("%s_%s", onuLossOfFrameEvent, "CLEAR_EVENT")
345 } else if onuAlarm.LoamiStatus == statusCheckOn {
346 deviceEventName = fmt.Sprintf("%s_%s", onuLossOfPloamEvent, "RAISE_EVENT")
347 } else if onuAlarm.LoamiStatus == statusCheckOff {
348 deviceEventName = fmt.Sprintf("%s_%s", onuLossOfPloamEvent, "CLEAR_EVENT")
349 }
350 return deviceEventName
351}
352
Naga Manjunath9546b912019-11-28 20:56:20 +0530353func (em *OpenOltEventMgr) onuAlarmIndication(onuAlarm *oop.OnuAlarmIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400354 var de voltha.DeviceEvent
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530355 var serialNumber string
Devmalya Paulfb990a52019-07-09 10:01:49 -0400356 context := make(map[string]string)
357 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530358 context["intf-id"] = strconv.FormatUint(uint64(onuAlarm.IntfId), base10)
359 context["onu-id"] = strconv.FormatUint(uint64(onuAlarm.OnuId), base10)
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530360 serialNumber = ""
361 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
362 if onu, ok := em.handler.onus.Load(onuKey); ok {
363 serialNumber = onu.(*OnuDevice).serialNumber
364 }
365 context["serial-number"] = serialNumber
366
Devmalya Paulfb990a52019-07-09 10:01:49 -0400367 /* Populating device event body */
368 de.Context = context
369 de.ResourceId = deviceID
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530370 de.DeviceEventName = em.getDeviceEventName(onuAlarm)
371
372 switch onuAlarm.LosStatus {
373 case statusCheckOn:
374 if em.wasLosRaised(onuAlarm) {
375 /* No need to raise Onu Los Event as it might have already raised
376 or Onu might have deleted */
377 return nil
378 }
379 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
380 if onuInCache, ok := em.handler.onus.Load(onuKey); ok {
381 /* Update onu device with LoS raised state as true */
382 em.handler.onus.Store(onuKey, NewOnuDevice(onuInCache.(*OnuDevice).deviceID, onuInCache.(*OnuDevice).deviceType,
383 onuInCache.(*OnuDevice).serialNumber, onuInCache.(*OnuDevice).onuID, onuInCache.(*OnuDevice).intfID,
384 onuInCache.(*OnuDevice).proxyDeviceID, true))
385 }
386 case statusCheckOff:
387 if em.wasLosCleared(onuAlarm) {
388 /* No need to clear Onu Los Event as it might have already cleared
389 or Onu might have deleted */
390 return nil
391 }
392 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
393 if onuInCache, ok := em.handler.onus.Load(onuKey); ok {
394 /* Update onu device with LoS raised state as false */
395 em.handler.onus.Store(onuKey, NewOnuDevice(onuInCache.(*OnuDevice).deviceID, onuInCache.(*OnuDevice).deviceType,
396 onuInCache.(*OnuDevice).serialNumber, onuInCache.(*OnuDevice).onuID, onuInCache.(*OnuDevice).intfID,
397 onuInCache.(*OnuDevice).proxyDeviceID, false))
398 }
Devmalya Paulfb990a52019-07-09 10:01:49 -0400399 }
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530400
Devmalya Paulfb990a52019-07-09 10:01:49 -0400401 /* Send event to KAFKA */
402 if err := em.eventProxy.SendDeviceEvent(&de, communication, onu, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530403 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400404 }
Shrey Baid26912972020-04-16 21:02:31 +0530405 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 +0530406 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400407}
408
Naga Manjunath9546b912019-11-28 20:56:20 +0530409func (em *OpenOltEventMgr) onuActivationFailIndication(oaf *oop.OnuActivationFailureIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400410 var de voltha.DeviceEvent
411 context := make(map[string]string)
412 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530413 context["intf-id"] = strconv.FormatUint(uint64(oaf.IntfId), base10)
414 context["onu-id"] = strconv.FormatUint(uint64(oaf.OnuId), base10)
Scott Bakerd4df1182020-02-05 11:38:42 -0800415 context["fail-reason"] = strconv.FormatUint(uint64(oaf.FailReason), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400416 /* Populating device event body */
417 de.Context = context
418 de.ResourceId = deviceID
419 de.DeviceEventName = fmt.Sprintf("%s_%s", onuActivationFailEvent, "RAISE_EVENT")
420 /* Send event to KAFKA */
421 if err := em.eventProxy.SendDeviceEvent(&de, equipment, pon, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530422 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400423 }
Shrey Baid26912972020-04-16 21:02:31 +0530424 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 +0530425 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400426}
427
Naga Manjunath9546b912019-11-28 20:56:20 +0530428func (em *OpenOltEventMgr) onuLossOmciIndication(onuLossOmci *oop.OnuLossOfOmciChannelIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400429 var de voltha.DeviceEvent
430 context := make(map[string]string)
431 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530432 context["intf-id"] = strconv.FormatUint(uint64(onuLossOmci.IntfId), base10)
433 context["onu-id"] = strconv.FormatUint(uint64(onuLossOmci.OnuId), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400434 /* Populating device event body */
435 de.Context = context
436 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530437 if onuLossOmci.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400438 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOmciEvent, "RAISE_EVENT")
439 } else {
440 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOmciEvent, "CLEAR_EVENT")
441 }
442 /* Send event to KAFKA */
443 if err := em.eventProxy.SendDeviceEvent(&de, communication, pon, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530444 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400445 }
Shrey Baid26912972020-04-16 21:02:31 +0530446 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 +0530447 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400448}
449
Naga Manjunath9546b912019-11-28 20:56:20 +0530450func (em *OpenOltEventMgr) onuDriftOfWindowIndication(onuDriftWindow *oop.OnuDriftOfWindowIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400451 var de voltha.DeviceEvent
452 context := make(map[string]string)
453 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530454 context["intf-id"] = strconv.FormatUint(uint64(onuDriftWindow.IntfId), base10)
455 context["onu-id"] = strconv.FormatUint(uint64(onuDriftWindow.OnuId), base10)
Scott Bakerd4df1182020-02-05 11:38:42 -0800456 context["drift"] = strconv.FormatUint(uint64(onuDriftWindow.Drift), base10)
457 context["new-eqd"] = strconv.FormatUint(uint64(onuDriftWindow.NewEqd), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400458 /* Populating device event body */
459 de.Context = context
460 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530461 if onuDriftWindow.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400462 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDriftOfWindowEvent, "RAISE_EVENT")
463 } else {
464 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDriftOfWindowEvent, "CLEAR_EVENT")
465 }
466 /* Send event to KAFKA */
467 if err := em.eventProxy.SendDeviceEvent(&de, communication, pon, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530468 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400469 }
Shrey Baid26912972020-04-16 21:02:31 +0530470 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 +0530471 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400472}
473
Naga Manjunath9546b912019-11-28 20:56:20 +0530474func (em *OpenOltEventMgr) onuSignalDegradeIndication(onuSignalDegrade *oop.OnuSignalDegradeIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400475 var de voltha.DeviceEvent
476 context := make(map[string]string)
477 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530478 context["intf-id"] = strconv.FormatUint(uint64(onuSignalDegrade.IntfId), base10)
479 context["onu-id"] = strconv.FormatUint(uint64(onuSignalDegrade.OnuId), base10)
Scott Bakerd4df1182020-02-05 11:38:42 -0800480 context["inverse-bit-error-rate"] = strconv.FormatUint(uint64(onuSignalDegrade.InverseBitErrorRate), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400481 /* Populating device event body */
482 de.Context = context
483 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530484 if onuSignalDegrade.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400485 de.DeviceEventName = fmt.Sprintf("%s_%s", onuSignalDegradeEvent, "RAISE_EVENT")
486 } else {
487 de.DeviceEventName = fmt.Sprintf("%s_%s", onuSignalDegradeEvent, "CLEAR_EVENT")
488 }
489 /* Send event to KAFKA */
490 if err := em.eventProxy.SendDeviceEvent(&de, communication, pon, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530491 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400492 }
Shrey Baid26912972020-04-16 21:02:31 +0530493 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 +0530494 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400495}
496
Naga Manjunath9546b912019-11-28 20:56:20 +0530497func (em *OpenOltEventMgr) onuSignalsFailIndication(onuSignalsFail *oop.OnuSignalsFailureIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400498 var de voltha.DeviceEvent
499 context := make(map[string]string)
500 /* Populating event context */
Naga Manjunath9546b912019-11-28 20:56:20 +0530501 context["onu-id"] = strconv.FormatUint(uint64(onuSignalsFail.OnuId), base10)
502 context["intf-id"] = strconv.FormatUint(uint64(onuSignalsFail.IntfId), base10)
503 context["inverse-bit-error-rate"] = strconv.FormatUint(uint64(onuSignalsFail.InverseBitErrorRate), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400504 /* Populating device event body */
505 de.Context = context
506 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530507 if onuSignalsFail.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400508 de.DeviceEventName = fmt.Sprintf("%s_%s", onuSignalsFailEvent, "RAISE_EVENT")
509 } else {
510 de.DeviceEventName = fmt.Sprintf("%s_%s", onuSignalsFailEvent, "CLEAR_EVENT")
511 }
512 /* Send event to KAFKA */
513 if err := em.eventProxy.SendDeviceEvent(&de, communication, pon, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530514 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400515 }
Shrey Baid26912972020-04-16 21:02:31 +0530516 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 +0530517 return nil
518}
519
Naga Manjunathf6f74642020-01-13 21:37:28 +0530520func (em *OpenOltEventMgr) onuStartupFailedIndication(onuStartupFail *oop.OnuStartupFailureIndication, deviceID string, raisedTs int64) error {
521 var de voltha.DeviceEvent
522 context := make(map[string]string)
523 /* Populating event context */
524 context["onu-id"] = strconv.FormatUint(uint64(onuStartupFail.OnuId), base10)
525 context["intf-id"] = strconv.FormatUint(uint64(onuStartupFail.IntfId), base10)
526
527 /* Populating device event body */
528 de.Context = context
529 de.ResourceId = deviceID
530 if onuStartupFail.Status == statusCheckOn {
531 de.DeviceEventName = fmt.Sprintf("%s_%s", onuStartupFailEvent, "RAISE_EVENT")
532 } else {
533 de.DeviceEventName = fmt.Sprintf("%s_%s", onuStartupFailEvent, "CLEAR_EVENT")
534 }
535 /* Send event to KAFKA */
536 if err := em.eventProxy.SendDeviceEvent(&de, communication, pon, raisedTs); err != nil {
Naga Manjunathf6f74642020-01-13 21:37:28 +0530537 return err
538 }
Shrey Baid26912972020-04-16 21:02:31 +0530539 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 +0530540 return nil
541}
542
Naga Manjunath9546b912019-11-28 20:56:20 +0530543func (em *OpenOltEventMgr) onuLossOfSyncIndication(onuLOKI *oop.OnuLossOfKeySyncFailureIndication, deviceID string, raisedTs int64) error {
544 var de voltha.DeviceEvent
545 context := make(map[string]string)
546 /* Populating event context */
547 context["onu-id"] = strconv.FormatUint(uint64(onuLOKI.OnuId), base10)
548 context["intf-id"] = strconv.FormatUint(uint64(onuLOKI.IntfId), base10)
549 /* Populating device event body */
550 de.Context = context
551 de.ResourceId = deviceID
552 if onuLOKI.Status == statusCheckOn {
553 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfKeySyncEvent, "RAISE_EVENT")
554 } else {
555 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfKeySyncEvent, "CLEAR_EVENT")
556 }
557
558 /* Send event to KAFKA */
559 if err := em.eventProxy.SendDeviceEvent(&de, security, onu, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530560 return err
561 }
Shrey Baid26912972020-04-16 21:02:31 +0530562 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 +0530563 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400564}
kesavand39e0aa32020-01-28 20:58:50 -0500565
566// oltIntfOperIndication handles Up and Down state of an OLT PON ports
Devmalya Paul24400472020-03-12 19:26:02 -0400567func (em *OpenOltEventMgr) oltIntfOperIndication(ifindication *oop.IntfOperIndication, deviceID string, raisedTs int64) error {
kesavand39e0aa32020-01-28 20:58:50 -0500568 var de voltha.DeviceEvent
569 context := make(map[string]string)
570 portID := IntfIDToPortNo(ifindication.IntfId, voltha.Port_PON_OLT)
571 device, err := em.handler.coreProxy.GetDevice(ctx.Background(), deviceID, deviceID)
572 if err != nil {
Shrey Baid26912972020-04-16 21:02:31 +0530573 return olterrors.NewErrAdapter("error-while-fetching-device-object", log.Fields{"DeviceId": deviceID}, err)
kesavand39e0aa32020-01-28 20:58:50 -0500574 }
575 for _, port := range device.Ports {
576 if port.PortNo == portID {
577 // Events are suppressed if the Port Adminstate is not enabled.
578 if port.AdminState != common.AdminState_ENABLED {
Shrey Baid26912972020-04-16 21:02:31 +0530579 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 -0400580 return nil
kesavand39e0aa32020-01-28 20:58:50 -0500581 }
582 break
583 }
584 }
585 /* Populating event context */
586 context["oper-state"] = ifindication.GetOperState()
587 /* Populating device event body */
588 de.Context = context
589 de.ResourceId = deviceID
590
591 if ifindication.GetOperState() == operationStateDown {
592 de.DeviceEventName = fmt.Sprintf("%s_%s", ponIntfDownIndiction, "RAISE_EVENT")
593 } else if ifindication.OperState == operationStateUp {
594 de.DeviceEventName = fmt.Sprintf("%s_%s", ponIntfDownIndiction, "CLEAR_EVENT")
595 }
596 /* Send event to KAFKA */
597 if err := em.eventProxy.SendDeviceEvent(&de, communication, olt, raisedTs); err != nil {
Devmalya Paul24400472020-03-12 19:26:02 -0400598 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 -0500599 }
Girish Kumar2ad402b2020-03-20 19:45:12 +0000600 logger.Debug("sent-olt-intf-oper-status-event-to-kafka")
Devmalya Paul24400472020-03-12 19:26:02 -0400601 return nil
kesavand39e0aa32020-01-28 20:58:50 -0500602}
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500603
604func (em *OpenOltEventMgr) onuDeactivationFailureIndication(onuDFI *oop.OnuDeactivationFailureIndication, deviceID string, raisedTs int64) error {
605 var de voltha.DeviceEvent
606 context := make(map[string]string)
607 /* Populating event context */
608 context["onu-id"] = strconv.FormatUint(uint64(onuDFI.OnuId), base10)
609 context["intf-id"] = strconv.FormatUint(uint64(onuDFI.IntfId), base10)
610 context["failure-reason"] = strconv.FormatUint(uint64(onuDFI.FailReason), base10)
611 /* Populating device event body */
612 de.Context = context
613 de.ResourceId = deviceID
614 de.DeviceEventName = onuDeactivationFailureEvent
615
616 /* Send event to KAFKA */
617 if err := em.eventProxy.SendDeviceEvent(&de, equipment, onu, raisedTs); err != nil {
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500618 return err
619 }
Shrey Baid26912972020-04-16 21:02:31 +0530620 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 -0500621 return nil
622}
Devmalya Paul6f063a62020-02-19 19:19:06 -0500623
624func (em *OpenOltEventMgr) onuRemoteDefectIndication(onuRDI *oop.OnuRemoteDefectIndication, deviceID string, raisedTs int64) error {
625 /* Populating event context */
626 context := map[string]string{
627 "onu-id": strconv.FormatUint(uint64(onuRDI.OnuId), base10),
628 "intf-id": strconv.FormatUint(uint64(onuRDI.IntfId), base10),
629 "rdi-errors": strconv.FormatUint(uint64(onuRDI.RdiErrors), base10),
630 }
631 /* Populating device event body */
632 de := &voltha.DeviceEvent{
633 Context: context,
634 ResourceId: deviceID,
635 DeviceEventName: onuRemoteDefectIndication,
636 }
637 /* Send event to KAFKA */
638 if err := em.eventProxy.SendDeviceEvent(de, equipment, onu, raisedTs); err != nil {
Devmalya Paul6f063a62020-02-19 19:19:06 -0500639 return err
640 }
Shrey Baid26912972020-04-16 21:02:31 +0530641 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 -0500642 return nil
643}
644
645func (em *OpenOltEventMgr) onuLossOfGEMChannelDelineationIndication(onuGCD *oop.OnuLossOfGEMChannelDelineationIndication, deviceID string, raisedTs int64) error {
646 /* Populating event context */
647 context := map[string]string{
648 "onu-id": strconv.FormatUint(uint64(onuGCD.OnuId), base10),
649 "intf-id": strconv.FormatUint(uint64(onuGCD.IntfId), base10),
650 "delineation-errors": strconv.FormatUint(uint64(onuGCD.DelineationErrors), base10),
651 }
652 /* Populating device event body */
653 de := &voltha.DeviceEvent{
654 Context: context,
655 ResourceId: deviceID,
656 }
657 if onuGCD.Status == statusCheckOn {
658 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfGEMChannelDelineationEvent, "RAISE_EVENT")
659 } else {
660 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfGEMChannelDelineationEvent, "CLEAR_EVENT")
661 }
662 /* Send event to KAFKA */
663 if err := em.eventProxy.SendDeviceEvent(de, communication, onu, raisedTs); err != nil {
664 return err
665 }
Shrey Baid26912972020-04-16 21:02:31 +0530666 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 -0500667 return nil
668}
669
670func (em *OpenOltEventMgr) onuPhysicalEquipmentErrorIndication(onuErr *oop.OnuPhysicalEquipmentErrorIndication, deviceID string, raisedTs int64) error {
671 /* Populating event context */
672 context := map[string]string{
673 "onu-id": strconv.FormatUint(uint64(onuErr.OnuId), base10),
674 "intf-id": strconv.FormatUint(uint64(onuErr.IntfId), base10),
675 }
676 /* Populating device event body */
677 de := &voltha.DeviceEvent{
678 Context: context,
679 ResourceId: deviceID,
680 }
681 if onuErr.Status == statusCheckOn {
682 de.DeviceEventName = fmt.Sprintf("%s_%s", onuPhysicalEquipmentErrorEvent, "RAISE_EVENT")
683 } else {
684 de.DeviceEventName = fmt.Sprintf("%s_%s", onuPhysicalEquipmentErrorEvent, "CLEAR_EVENT")
685 }
686 /* Send event to KAFKA */
687 if err := em.eventProxy.SendDeviceEvent(de, equipment, onu, raisedTs); err != nil {
688 return err
689 }
Shrey Baid26912972020-04-16 21:02:31 +0530690 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 -0500691 return nil
692}
693
694func (em *OpenOltEventMgr) onuLossOfAcknowledgementIndication(onuLOA *oop.OnuLossOfAcknowledgementIndication, deviceID string, raisedTs int64) error {
695 /* Populating event context */
696 context := map[string]string{
697 "onu-id": strconv.FormatUint(uint64(onuLOA.OnuId), base10),
698 "intf-id": strconv.FormatUint(uint64(onuLOA.IntfId), base10),
699 }
700 /* Populating device event body */
701 de := &voltha.DeviceEvent{
702 Context: context,
703 ResourceId: deviceID,
704 }
705 if onuLOA.Status == statusCheckOn {
706 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfAcknowledgementEvent, "RAISE_EVENT")
707 } else {
708 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfAcknowledgementEvent, "CLEAR_EVENT")
709 }
710 /* Send event to KAFKA */
711 if err := em.eventProxy.SendDeviceEvent(de, equipment, onu, raisedTs); err != nil {
712 return err
713 }
Shrey Baid26912972020-04-16 21:02:31 +0530714 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 -0500715 return nil
716}
Devmalya Pauleb5294e2020-03-19 03:01:39 -0400717
718func (em *OpenOltEventMgr) onuDifferentialReachExceededIndication(onuDRE *oop.OnuDifferentialReachExceededIndication, deviceID string, raisedTs int64) error {
719 /* Populating event context */
720 context := map[string]string{
721 "onu-id": strconv.FormatUint(uint64(onuDRE.OnuId), base10),
722 "intf-id": strconv.FormatUint(uint64(onuDRE.IntfId), base10),
723 "differential-distance": strconv.FormatUint(uint64(onuDRE.Distance), base10),
724 }
725 /* Populating device event body */
726 de := &voltha.DeviceEvent{
727 Context: context,
728 ResourceId: deviceID,
729 }
730 if onuDRE.Status == statusCheckOn {
731 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDifferentialReachExceededEvent, "RAISE_EVENT")
732 } else {
733 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDifferentialReachExceededEvent, "CLEAR_EVENT")
734 }
735 /* Send event to KAFKA */
736 if err := em.eventProxy.SendDeviceEvent(de, equipment, onu, raisedTs); err != nil {
737 return err
738 }
Shrey Baid26912972020-04-16 21:02:31 +0530739 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 -0400740 return nil
741}