blob: a8bc359892c56563453ef33aa87a56df4ed089b4 [file] [log] [blame]
Devmalya Paulfb990a52019-07-09 10:01:49 -04001/*
Joey Armstrong11f5a572024-01-12 19:11:32 -05002 * Copyright 2018-2024 Open Networking Foundation (ONF) and the ONF Contributors
Devmalya Paulfb990a52019-07-09 10:01:49 -04003
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 (
Neha Sharma96b7bf22020-06-15 10:37:32 +000021 "context"
Devmalya Paula1efa642020-04-20 01:36:43 -040022 "errors"
Devmalya Paulfb990a52019-07-09 10:01:49 -040023 "fmt"
Naga Manjunath9546b912019-11-28 20:56:20 +053024 "strconv"
Naga Manjunatha8dc9372019-10-31 23:01:18 +053025
khenaidoodc2116e2021-10-19 17:33:19 -040026 ca "github.com/opencord/voltha-protos/v5/go/core_adapter"
khenaidoo106c61a2021-08-11 18:05:46 -040027
28 "github.com/opencord/voltha-lib-go/v7/pkg/events/eventif"
29 "github.com/opencord/voltha-lib-go/v7/pkg/log"
Mahir Gunyel85f61c12021-10-06 11:53:45 -070030 plt "github.com/opencord/voltha-lib-go/v7/pkg/platform"
Thomas Lee S94109f12020-03-03 16:39:29 +053031 "github.com/opencord/voltha-openolt-adapter/internal/pkg/olterrors"
khenaidoo106c61a2021-08-11 18:05:46 -040032 "github.com/opencord/voltha-protos/v5/go/common"
33 oop "github.com/opencord/voltha-protos/v5/go/openolt"
34 "github.com/opencord/voltha-protos/v5/go/voltha"
Devmalya Paulfb990a52019-07-09 10:01:49 -040035)
36
37const (
Devmalya Paul41a762d2020-03-01 18:56:54 -050038 onuDiscoveryEvent = "ONU_DISCOVERY"
39 onuLosEvent = "ONU_LOSS_OF_SIGNAL"
40 onuLobEvent = "ONU_LOSS_OF_BURST"
41 onuLopcMissEvent = "ONU_LOPC_MISS"
42 onuLopcMicErrorEvent = "ONU_LOPC_MIC_ERROR"
43 oltLosEvent = "OLT_LOSS_OF_SIGNAL"
Gustavo Silva41af9122022-10-11 11:05:13 -030044 oltRebootFailedEvent = "OLT_REBOOT_FAILED"
Gamze Abaka07868a52020-12-17 14:19:28 +000045 oltCommFailure = "OLT_COMMUNICATION_FAILURE"
Devmalya Paul41a762d2020-03-01 18:56:54 -050046 oltIndicationDown = "OLT_DOWN_INDICATION"
47 onuDyingGaspEvent = "ONU_DYING_GASP"
48 onuSignalsFailEvent = "ONU_SIGNALS_FAIL"
49 onuStartupFailEvent = "ONU_STARTUP_FAIL"
50 onuSignalDegradeEvent = "ONU_SIGNAL_DEGRADE"
51 onuDriftOfWindowEvent = "ONU_DRIFT_OF_WINDOW"
52 onuActivationFailEvent = "ONU_ACTIVATION_FAIL"
Devmalya Paul41a762d2020-03-01 18:56:54 -050053 onuLossOmciEvent = "ONU_LOSS_OF_OMCI_CHANNEL"
54 onuLossOfKeySyncEvent = "ONU_LOSS_OF_KEY_SYNC"
55 onuLossOfFrameEvent = "ONU_LOSS_OF_FRAME"
56 onuLossOfPloamEvent = "ONU_LOSS_OF_PLOAM"
57 ponIntfDownIndiction = "OLT_PON_INTERFACE_DOWN"
58 onuDeactivationFailureEvent = "ONU_DEACTIVATION_FAILURE"
59 onuRemoteDefectIndication = "ONU_REMOTE_DEFECT"
60 onuLossOfGEMChannelDelineationEvent = "ONU_LOSS_OF_GEM_CHANNEL_DELINEATION"
61 onuPhysicalEquipmentErrorEvent = "ONU_PHYSICAL_EQUIPMENT_ERROR"
62 onuLossOfAcknowledgementEvent = "ONU_LOSS_OF_ACKNOWLEDGEMENT"
Devmalya Pauleb5294e2020-03-19 03:01:39 -040063 onuDifferentialReachExceededEvent = "ONU_DIFFERENTIAL_REACH_EXCEEDED"
Devmalya Paulfb990a52019-07-09 10:01:49 -040064)
65
66const (
Naga Manjunath9546b912019-11-28 20:56:20 +053067 // statusCheckOn represents status check On
68 statusCheckOn = "on"
69 // statusCheckOff represents status check Off
70 statusCheckOff = "off"
71 // operationStateUp represents operation state Up
72 operationStateUp = "up"
73 // operationStateDown represents operation state Down
74 operationStateDown = "down"
75 // base10 represents base 10 conversion
76 base10 = 10
77)
78
Amit Ghosh502056b2020-07-15 09:15:48 +010079const (
Gamze Abaka07868a52020-12-17 14:19:28 +000080 // ContextOltAdminState is for the admin state of the Olt in the context of the event
81 ContextOltAdminState = "admin-state"
82 // ContextOltConnectState is for the connect state of the Olt in the context of the event
83 ContextOltConnectState = "connect-state"
Gustavo Silva41af9122022-10-11 11:05:13 -030084 // ContextOltFailureReason is to report the reason of an operation failure in the Olt
85 ContextOltFailureReason = "failure-reason"
Amit Ghosh502056b2020-07-15 09:15:48 +010086 // ContextOltOperState is for the operational state of the Olt in the context of the event
87 ContextOltOperState = "oper-state"
Gamze Abaka07868a52020-12-17 14:19:28 +000088 // ContextOltVendor is for the Olt vendor in the context of the event
89 ContextOltVendor = "vendor"
90 // ContextOltType is for the Olt type in the context of the event
91 ContextOltType = "type"
92 // ContextOltParentID is for the Olt parent id in the context of the event
93 ContextOltParentID = "parent-id"
94 // ContextOltParentPortNo is for the Olt parent port no in the context of the event
95 ContextOltParentPortNo = "parent-port-no"
96 // ContextOltFirmwareVersion is for the Olt firmware version in the context of the event
97 ContextOltFirmwareVersion = "firmware-version"
98 // ContextOltHardwareVersion is for the Olt hardware version in the context of the event
99 ContextOltHardwareVersion = "hardware-version"
100 // ContextOltSerialNumber is for the serial number of the OLT
101 ContextOltSerialNumber = "serial-number"
102 // ContextOltMacAddress is for the OLT mac address
103 ContextOltMacAddress = "mac-address"
104 // ContextDeviceID is for the device id in the context of the event
105 ContextDeviceID = "id"
Amit Ghosh502056b2020-07-15 09:15:48 +0100106 // ContextOnuOnuID is for the Onu Id in the context of the event
107 ContextOnuOnuID = "onu-id"
108 // ContextOnuPonIntfID is for the PON interface Id on which the Onu Event occurred
109 ContextOnuPonIntfID = "intf-id"
110 // ContextOnuSerialNumber is for the serial number of the ONU
111 ContextOnuSerialNumber = "serial-number"
112 // ContextOnuDeviceID is for the device id of the ONU generated by VOLTHA
113 ContextOnuDeviceID = "onu-device-id"
114 // ContextOltPonIntfID is for the PON interface Id on an OLT event
115 ContextOltPonIntfID = "intf-id"
116 // ContextOnuFailureReaseon is for the reason of failure of/at ONU indicated by the event
117 ContextOnuFailureReaseon = "fail-reason"
118 // ContextOnuDrift is for the drift of an ONU in the context of an event
119 ContextOnuDrift = "drift"
120 // ContextOnuNewEqd is for the New Eqd of an ONU in the context of an event
121 ContextOnuNewEqd = "new-eqd"
122 // ContextOnuInverseBitErrorRate is for the inverse bit error rate in the context of an ONU event
123 ContextOnuInverseBitErrorRate = "inverse-bit-error-rate"
124 // ContextOltPonIntfOperState is for the operational state of a PON port in the context of an OLT event
125 ContextOltPonIntfOperState = "oper-state"
126 // ContextOnuRemoteDefectIndicatorCount is for the rdi in the context of an ONU event
127 ContextOnuRemoteDefectIndicatorCount = "rdi-count"
128 // ContextOnuDelineationErrors is for the delineation errors if present in an ONU events context
129 ContextOnuDelineationErrors = "delineation-errors"
130 // ContextOnuDifferentialDistance is for the differential distance in an ONU event context
131 ContextOnuDifferentialDistance = "differential-distance"
ssiddiqui04386ee2021-08-23 21:58:25 +0530132 // ContextOltPonTechnology is to indicate the pon-technology type, ie, 'GPON' or 'XGS-PON' (TODO check for combo?)
133 ContextOltPonTechnology = "pon-technology"
134 // ContextOltPortLabel is to indicate the string label of the pon-port, example: pon-0
135 ContextOltPortLabel = "port-label"
Amit Ghosh502056b2020-07-15 09:15:48 +0100136)
137
Devmalya Paulfb990a52019-07-09 10:01:49 -0400138// OpenOltEventMgr struct contains
139type OpenOltEventMgr struct {
Himani Chawlacd407802020-12-10 12:08:59 +0530140 eventProxy eventif.EventProxy
Devmalya Paul90ca3012019-09-02 21:55:45 -0400141 handler *DeviceHandler
Devmalya Paulfb990a52019-07-09 10:01:49 -0400142}
143
144// NewEventMgr is a Function to get a new event manager struct for the OpenOLT to process and publish OpenOLT event
Himani Chawlacd407802020-12-10 12:08:59 +0530145func NewEventMgr(eventProxy eventif.EventProxy, handler *DeviceHandler) *OpenOltEventMgr {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400146 var em OpenOltEventMgr
147 em.eventProxy = eventProxy
Devmalya Paul90ca3012019-09-02 21:55:45 -0400148 em.handler = handler
Devmalya Paulfb990a52019-07-09 10:01:49 -0400149 return &em
150}
151
152// ProcessEvents is function to process and publish OpenOLT event
Devmalya Paul41a762d2020-03-01 18:56:54 -0500153// nolint: gocyclo
Kent Hagermane6ff1012020-07-14 15:07:53 -0400154func (em *OpenOltEventMgr) ProcessEvents(ctx context.Context, alarmInd *oop.AlarmIndication, deviceID string, raisedTs int64) {
Naga Manjunath9546b912019-11-28 20:56:20 +0530155 var err error
Devmalya Paulfb990a52019-07-09 10:01:49 -0400156 switch alarmInd.Data.(type) {
157 case *oop.AlarmIndication_LosInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000158 logger.Debugw(ctx, "received-los-indication", log.Fields{"alarm-ind": alarmInd})
159 err = em.oltLosIndication(ctx, alarmInd.GetLosInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400160 case *oop.AlarmIndication_OnuAlarmInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000161 logger.Debugw(ctx, "received-onu-alarm-indication ", log.Fields{"alarm-ind": alarmInd})
162 err = em.onuAlarmIndication(ctx, alarmInd.GetOnuAlarmInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400163 case *oop.AlarmIndication_DyingGaspInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000164 logger.Debugw(ctx, "received-dying-gasp-indication", log.Fields{"alarm-ind": alarmInd})
165 err = em.onuDyingGaspIndication(ctx, alarmInd.GetDyingGaspInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400166 case *oop.AlarmIndication_OnuLossOmciInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000167 logger.Debugw(ctx, "received-onu-loss-omci-indication ", log.Fields{"alarm-ind": alarmInd})
168 err = em.onuLossOmciIndication(ctx, alarmInd.GetOnuLossOmciInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400169 case *oop.AlarmIndication_OnuDriftOfWindowInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000170 logger.Debugw(ctx, "received-onu-drift-of-window-indication ", log.Fields{"alarm-ind": alarmInd})
171 err = em.onuDriftOfWindowIndication(ctx, alarmInd.GetOnuDriftOfWindowInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400172 case *oop.AlarmIndication_OnuSignalDegradeInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000173 logger.Debugw(ctx, "received-onu-signal-degrade-indication ", log.Fields{"alarm-ind": alarmInd})
174 err = em.onuSignalDegradeIndication(ctx, alarmInd.GetOnuSignalDegradeInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400175 case *oop.AlarmIndication_OnuSignalsFailInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000176 logger.Debugw(ctx, "received-onu-signal-fail-indication ", log.Fields{"alarm-ind": alarmInd})
177 err = em.onuSignalsFailIndication(ctx, alarmInd.GetOnuSignalsFailInd(), deviceID, raisedTs)
Naga Manjunathf6f74642020-01-13 21:37:28 +0530178 case *oop.AlarmIndication_OnuStartupFailInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000179 logger.Debugw(ctx, "received-onu-startup-fail-indication ", log.Fields{"alarm-ind": alarmInd})
180 err = em.onuStartupFailedIndication(ctx, alarmInd.GetOnuStartupFailInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400181 case *oop.AlarmIndication_OnuTiwiInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000182 logger.Debugw(ctx, "received-onu-transmission-warning-indication ", log.Fields{"alarm-ind": alarmInd})
183 logger.Warnw(ctx, "not-implemented-yet", log.Fields{"alarm-ind": "Onu-Transmission-indication"})
Naga Manjunath9546b912019-11-28 20:56:20 +0530184 case *oop.AlarmIndication_OnuLossOfSyncFailInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000185 logger.Debugw(ctx, "received-onu-loss-of-sync-fail-indication ", log.Fields{"alarm-ind": alarmInd})
186 err = em.onuLossOfSyncIndication(ctx, alarmInd.GetOnuLossOfSyncFailInd(), deviceID, raisedTs)
Naga Manjunath9546b912019-11-28 20:56:20 +0530187 case *oop.AlarmIndication_OnuItuPonStatsInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000188 logger.Debugw(ctx, "received-onu-itu-pon-stats-indication ", log.Fields{"alarm-ind": alarmInd})
189 err = em.onuItuPonStatsIndication(ctx, alarmInd.GetOnuItuPonStatsInd(), deviceID, raisedTs)
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500190 case *oop.AlarmIndication_OnuDeactivationFailureInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000191 logger.Debugw(ctx, "received-onu-deactivation-failure-indication ", log.Fields{"alarm-ind": alarmInd})
192 err = em.onuDeactivationFailureIndication(ctx, alarmInd.GetOnuDeactivationFailureInd(), deviceID, raisedTs)
Devmalya Paul41a762d2020-03-01 18:56:54 -0500193 case *oop.AlarmIndication_OnuLossGemDelineationInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000194 logger.Debugw(ctx, "received-onu-loss-of-gem-channel-delineation-indication ", log.Fields{"alarm-ind": alarmInd})
195 err = em.onuLossOfGEMChannelDelineationIndication(ctx, alarmInd.GetOnuLossGemDelineationInd(), deviceID, raisedTs)
Devmalya Paul41a762d2020-03-01 18:56:54 -0500196 case *oop.AlarmIndication_OnuPhysicalEquipmentErrorInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000197 logger.Debugw(ctx, "received-onu-physical-equipment-error-indication ", log.Fields{"alarm-ind": alarmInd})
198 err = em.onuPhysicalEquipmentErrorIndication(ctx, alarmInd.GetOnuPhysicalEquipmentErrorInd(), deviceID, raisedTs)
Devmalya Paul41a762d2020-03-01 18:56:54 -0500199 case *oop.AlarmIndication_OnuLossOfAckInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000200 logger.Debugw(ctx, "received-onu-loss-of-acknowledgement-indication ", log.Fields{"alarm-ind": alarmInd})
201 err = em.onuLossOfAcknowledgementIndication(ctx, alarmInd.GetOnuLossOfAckInd(), deviceID, raisedTs)
Devmalya Pauleb5294e2020-03-19 03:01:39 -0400202 case *oop.AlarmIndication_OnuDiffReachExceededInd:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000203 logger.Debugw(ctx, "received-onu-differential-reach-exceeded-indication ", log.Fields{"alarm-ind": alarmInd})
204 err = em.onuDifferentialReachExceededIndication(ctx, alarmInd.GetOnuDiffReachExceededInd(), deviceID, raisedTs)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400205 default:
Thomas Lee S94109f12020-03-03 16:39:29 +0530206 err = olterrors.NewErrInvalidValue(log.Fields{"indication-type": alarmInd}, nil)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400207 }
Naga Manjunath9546b912019-11-28 20:56:20 +0530208 if err != nil {
Kent Hagermane6ff1012020-07-14 15:07:53 -0400209 _ = olterrors.NewErrCommunication("publish-message", log.Fields{"indication-type": alarmInd}, err).LogAt(log.WarnLevel)
Naga Manjunath9546b912019-11-28 20:56:20 +0530210 }
Devmalya Paulfb990a52019-07-09 10:01:49 -0400211}
212
Gamze Abaka07868a52020-12-17 14:19:28 +0000213func (em *OpenOltEventMgr) oltCommunicationEvent(ctx context.Context, device *voltha.Device, raisedTs int64) {
214 if device == nil {
215 logger.Warn(ctx, "device-is-nil-can't-send-olt-communication-failure-event")
216 return
217 }
218 var de voltha.DeviceEvent
219 context := make(map[string]string)
220 context[ContextOltOperState] = device.OperStatus.String()
221 context[ContextOltAdminState] = device.AdminState.String()
222 context[ContextOltVendor] = device.Vendor
223 context[ContextOltConnectState] = device.ConnectStatus.String()
224 context[ContextOltType] = device.Type
225 context[ContextOltParentID] = device.ParentId
226 context[ContextOltParentPortNo] = fmt.Sprintf("%d", device.ParentPortNo)
227 context[ContextDeviceID] = device.Id
228 context[ContextOltFirmwareVersion] = device.FirmwareVersion
229 context[ContextOltHardwareVersion] = device.HardwareVersion
230 context[ContextOltSerialNumber] = device.SerialNumber
231 context[ContextOltMacAddress] = device.MacAddress
232 de.Context = context
233 de.ResourceId = device.Id
234
235 if device.ConnectStatus == voltha.ConnectStatus_UNREACHABLE {
236 de.DeviceEventName = fmt.Sprintf("%s_%s", oltCommFailure, "RAISE_EVENT")
237 } else {
238 de.DeviceEventName = fmt.Sprintf("%s_%s", oltCommFailure, "CLEAR_EVENT")
239 }
240
241 if err := em.eventProxy.SendDeviceEvent(ctx, &de, voltha.EventCategory_COMMUNICATION, voltha.EventSubCategory_OLT, raisedTs); err != nil {
242 logger.Errorw(ctx, "failed-to-send-olt-comm-failure-event", log.Fields{"err": err})
243 }
244 logger.Debugw(ctx, "olt-comm-failure-event-sent-to-kafka",
245 log.Fields{
246 "device-id": device.Id,
247 "connect-status": device.ConnectStatus,
248 })
249}
250
Daniele Rossi051466a2019-07-26 13:39:37 +0000251// oltUpDownIndication handles Up and Down state of an OLT
Neha Sharma96b7bf22020-06-15 10:37:32 +0000252func (em *OpenOltEventMgr) oltUpDownIndication(ctx context.Context, oltIndication *oop.OltIndication, deviceID string, raisedTs int64) error {
Daniele Rossi051466a2019-07-26 13:39:37 +0000253 var de voltha.DeviceEvent
254 context := make(map[string]string)
255 /* Populating event context */
Amit Ghosh502056b2020-07-15 09:15:48 +0100256 context[ContextOltOperState] = oltIndication.OperState
Daniele Rossi051466a2019-07-26 13:39:37 +0000257 /* Populating device event body */
258 de.Context = context
259 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530260 if oltIndication.OperState == operationStateDown {
Daniele Rossi051466a2019-07-26 13:39:37 +0000261 de.DeviceEventName = fmt.Sprintf("%s_%s", oltIndicationDown, "RAISE_EVENT")
Naga Manjunath9546b912019-11-28 20:56:20 +0530262 } else if oltIndication.OperState == operationStateUp {
Daniele Rossi051466a2019-07-26 13:39:37 +0000263 de.DeviceEventName = fmt.Sprintf("%s_%s", oltIndicationDown, "CLEAR_EVENT")
264 }
265 /* Send event to KAFKA */
Kent Hagermane6ff1012020-07-14 15:07:53 -0400266 if err := em.eventProxy.SendDeviceEvent(ctx, &de, voltha.EventCategory_COMMUNICATION, voltha.EventSubCategory_OLT, raisedTs); err != nil {
Girish Kumarf26e4882020-03-05 06:49:10 +0000267 return olterrors.NewErrCommunication("send-olt-event", log.Fields{"device-id": deviceID}, err)
Daniele Rossi051466a2019-07-26 13:39:37 +0000268 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000269 logger.Debugw(ctx, "olt-updown-event-sent-to-kafka", log.Fields{})
Naga Manjunath9546b912019-11-28 20:56:20 +0530270 return nil
Daniele Rossi051466a2019-07-26 13:39:37 +0000271}
272
Devmalya Paulfb990a52019-07-09 10:01:49 -0400273// OnuDiscoveryIndication is an exported method to handle ONU discovery event
Neha Sharma96b7bf22020-06-15 10:37:32 +0000274func (em *OpenOltEventMgr) OnuDiscoveryIndication(ctx context.Context, onuDisc *oop.OnuDiscIndication, oltDeviceID string, onuDeviceID string, OnuID uint32, serialNumber string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400275 var de voltha.DeviceEvent
276 context := make(map[string]string)
277 /* Populating event context */
Amit Ghosh502056b2020-07-15 09:15:48 +0100278 context[ContextOnuOnuID] = strconv.FormatUint(uint64(OnuID), base10)
279 context[ContextOnuPonIntfID] = strconv.FormatUint(uint64(onuDisc.IntfId), base10)
280 context[ContextOnuSerialNumber] = serialNumber
281 context[ContextOnuDeviceID] = onuDeviceID
ssiddiqui04386ee2021-08-23 21:58:25 +0530282 context[ContextOltPonTechnology] = em.handler.getPonTechnology(onuDisc.IntfId)
283 context[ContextOltPortLabel], _ = GetportLabel(onuDisc.GetIntfId(), voltha.Port_PON_OLT)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400284 /* Populating device event body */
285 de.Context = context
Amit Ghosh75f0e292020-05-14 11:31:54 +0100286 de.ResourceId = oltDeviceID
Devmalya Paulfb990a52019-07-09 10:01:49 -0400287 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDiscoveryEvent, "RAISE_EVENT")
288 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530289 if err := em.eventProxy.SendDeviceEventWithKey(ctx, &de, voltha.EventCategory_EQUIPMENT, voltha.EventSubCategory_PON, raisedTs, onuDeviceID); err != nil {
Shrey Baid26912972020-04-16 21:02:31 +0530290 return olterrors.NewErrCommunication("send-onu-discovery-event",
291 log.Fields{
292 "serial-number": serialNumber,
293 "intf-id": onuDisc.IntfId}, err)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400294 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000295 logger.Debugw(ctx, "onu-discovery-event-sent-to-kafka",
Shrey Baid26912972020-04-16 21:02:31 +0530296 log.Fields{
297 "serial-number": serialNumber,
298 "intf-id": onuDisc.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530299 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400300}
301
Neha Sharma96b7bf22020-06-15 10:37:32 +0000302func (em *OpenOltEventMgr) oltLosIndication(ctx context.Context, oltLos *oop.LosIndication, deviceID string, raisedTs int64) error {
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530303 var err error = nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400304 var de voltha.DeviceEvent
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530305 var alarmInd oop.OnuAlarmIndication
Mahir Gunyel85f61c12021-10-06 11:53:45 -0700306 ponIntdID := plt.PortNoToIntfID(oltLos.IntfId, voltha.Port_PON_OLT)
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530307
Devmalya Paulfb990a52019-07-09 10:01:49 -0400308 context := make(map[string]string)
309 /* Populating event context */
yasin sapli0b242942021-10-11 08:51:16 +0000310 context[ContextOltPonIntfID] = strconv.FormatUint(uint64(ponIntdID), base10)
Abhilash Laxmeshwar42b58242021-11-24 19:27:25 +0530311 context[ContextOltPortLabel], _ = GetportLabel(oltLos.IntfId, voltha.Port_PON_OLT)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400312 /* Populating device event body */
313 de.Context = context
314 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530315 if oltLos.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400316 de.DeviceEventName = fmt.Sprintf("%s_%s", oltLosEvent, "RAISE_EVENT")
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530317
318 /* When PON cable disconnected from OLT, it was expected OnuAlarmIndication
319 with "los_status: on" should be raised for each Onu connected to the PON
320 but BAL does not raise this Alarm hence manually sending OnuLosRaise event
321 for all the ONU's connected to PON on receiving LoSIndication for PON */
322 em.handler.onus.Range(func(Onukey interface{}, onuInCache interface{}) bool {
323 if onuInCache.(*OnuDevice).intfID == ponIntdID {
324 alarmInd.IntfId = ponIntdID
325 alarmInd.OnuId = onuInCache.(*OnuDevice).onuID
326 alarmInd.LosStatus = statusCheckOn
Neha Sharma96b7bf22020-06-15 10:37:32 +0000327 err = em.onuAlarmIndication(ctx, &alarmInd, deviceID, raisedTs)
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530328 }
329 return true
330 })
331 if err != nil {
332 /* Return if any error encountered while processing ONU LoS Event*/
333 return err
334 }
Devmalya Paulfb990a52019-07-09 10:01:49 -0400335 } else {
336 de.DeviceEventName = fmt.Sprintf("%s_%s", oltLosEvent, "CLEAR_EVENT")
337 }
338 /* Send event to KAFKA */
Andrea Campanella4dea6312021-02-23 10:06:18 +0100339 if err := em.eventProxy.SendDeviceEvent(ctx, &de, voltha.EventCategory_COMMUNICATION, voltha.EventSubCategory_PON, raisedTs); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530340 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400341 }
yasin sapli0b242942021-10-11 08:51:16 +0000342 logger.Debugw(ctx, "olt-los-event-sent-to-kafka", log.Fields{"intf-id": ponIntdID})
Naga Manjunath9546b912019-11-28 20:56:20 +0530343 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400344}
Akash Kankanala041a2122024-10-16 15:49:22 +0530345
Gustavo Silva41af9122022-10-11 11:05:13 -0300346func (em *OpenOltEventMgr) oltRebootFailedEvent(ctx context.Context, deviceID string, reason string, raisedTs int64) error {
347 de := voltha.DeviceEvent{
348 Context: map[string]string{ContextOltFailureReason: "olt-reboot-failed"},
349 ResourceId: deviceID,
350 DeviceEventName: fmt.Sprintf("%s_%s", oltRebootFailedEvent, "RAISE_EVENT")}
351 if err := em.eventProxy.SendDeviceEvent(ctx, &de, voltha.EventCategory_COMMUNICATION, voltha.EventSubCategory_OLT,
352 raisedTs); err != nil {
353 return olterrors.NewErrCommunication("send-olt-reboot-failed-event", log.Fields{
Akash Kankanala041a2122024-10-16 15:49:22 +0530354 "device-id": deviceID, "raised-ts": raisedTs, "reason": reason}, err)
Gustavo Silva41af9122022-10-11 11:05:13 -0300355 }
356 logger.Debugw(ctx, "olt-reboot-failed-event-sent-to-kafka", log.Fields{
Akash Kankanala041a2122024-10-16 15:49:22 +0530357 "device-id": deviceID, "raised-ts": raisedTs, "reason": reason})
Gustavo Silva41af9122022-10-11 11:05:13 -0300358 return nil
359}
Devmalya Paulfb990a52019-07-09 10:01:49 -0400360
kesavand0ef592c2022-03-16 12:34:24 +0530361func (em *OpenOltEventMgr) populateContextWithSerialDeviceID(context map[string]string, intfID, onuID uint32) string {
Amit Ghosh502056b2020-07-15 09:15:48 +0100362 var serialNumber = ""
363 var onuDeviceID = ""
364 onu := em.handler.formOnuKey(intfID, onuID)
Naga Manjunatha8dc9372019-10-31 23:01:18 +0530365 if onu, ok := em.handler.onus.Load(onu); ok {
366 serialNumber = onu.(*OnuDevice).serialNumber
Amit Ghosh502056b2020-07-15 09:15:48 +0100367 onuDeviceID = onu.(*OnuDevice).deviceID
Devmalya Paul90ca3012019-09-02 21:55:45 -0400368 }
Amit Ghosh502056b2020-07-15 09:15:48 +0100369
ssiddiqui04386ee2021-08-23 21:58:25 +0530370 context[ContextOltPortLabel], _ = GetportLabel(intfID, voltha.Port_PON_OLT)
Amit Ghosh502056b2020-07-15 09:15:48 +0100371 context[ContextOnuSerialNumber] = serialNumber
372 context[ContextOnuDeviceID] = onuDeviceID
kesavand0ef592c2022-03-16 12:34:24 +0530373 return onuDeviceID
Amit Ghosh502056b2020-07-15 09:15:48 +0100374}
375
376func (em *OpenOltEventMgr) onuDyingGaspIndication(ctx context.Context, dgi *oop.DyingGaspIndication, deviceID string, raisedTs int64) error {
377 var de voltha.DeviceEvent
378 context := make(map[string]string)
379 /* Populating event context */
kesavand0ef592c2022-03-16 12:34:24 +0530380 onuDeviceID := em.populateContextWithSerialDeviceID(context, dgi.IntfId, dgi.OnuId)
Amit Ghosh502056b2020-07-15 09:15:48 +0100381
382 context[ContextOnuPonIntfID] = strconv.FormatUint(uint64(dgi.IntfId), base10)
383 context[ContextOnuOnuID] = strconv.FormatUint(uint64(dgi.OnuId), base10)
384
Devmalya Paulfb990a52019-07-09 10:01:49 -0400385 /* Populating device event body */
386 de.Context = context
387 de.ResourceId = deviceID
Marcos Aurelio Carrero (Furukawa)1992f992023-11-14 14:31:40 -0300388
389 if dgi.Status == statusCheckOn {
390 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDyingGaspEvent, "RAISE_EVENT")
391 } else {
392 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDyingGaspEvent, "CLEAR_EVENT")
393 }
394
Devmalya Paulfb990a52019-07-09 10:01:49 -0400395 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530396 if err := em.eventProxy.SendDeviceEventWithKey(ctx, &de, voltha.EventCategory_COMMUNICATION, voltha.EventSubCategory_ONU, raisedTs, onuDeviceID); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530397 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400398 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000399 logger.Debugw(ctx, "onu-dying-gasp-event-sent-to-kafka", log.Fields{"intf-id": dgi.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530400 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400401}
402
Joey Armstrong3f0e2422023-07-05 18:25:41 -0400403// wasLosRaised checks whether los raised already. If already raised returns true else false
Neha Sharma96b7bf22020-06-15 10:37:32 +0000404func (em *OpenOltEventMgr) wasLosRaised(ctx context.Context, onuAlarm *oop.OnuAlarmIndication) bool {
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530405 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
406 if onuInCache, ok := em.handler.onus.Load(onuKey); ok {
Neha Sharma96b7bf22020-06-15 10:37:32 +0000407 logger.Debugw(ctx, "onu-device-found-in-cache.", log.Fields{"intfID": onuAlarm.IntfId, "onuID": onuAlarm.OnuId})
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530408
409 if onuAlarm.LosStatus == statusCheckOn {
410 if onuInCache.(*OnuDevice).losRaised {
Neha Sharma96b7bf22020-06-15 10:37:32 +0000411 logger.Warnw(ctx, "onu-los-raised-already", log.Fields{"onu_id": onuAlarm.OnuId,
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530412 "intf_id": onuAlarm.IntfId, "LosStatus": onuAlarm.LosStatus})
413 return true
414 }
415 return false
416 }
417 }
418 return true
419}
420
Joey Armstrong3f0e2422023-07-05 18:25:41 -0400421// wasLosCleared checks whether los cleared already. If already cleared returns true else false
Neha Sharma96b7bf22020-06-15 10:37:32 +0000422func (em *OpenOltEventMgr) wasLosCleared(ctx context.Context, onuAlarm *oop.OnuAlarmIndication) bool {
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530423 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
424 if onuInCache, ok := em.handler.onus.Load(onuKey); ok {
Neha Sharma96b7bf22020-06-15 10:37:32 +0000425 logger.Debugw(ctx, "onu-device-found-in-cache.", log.Fields{"intfID": onuAlarm.IntfId, "onuID": onuAlarm.OnuId})
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530426
427 if onuAlarm.LosStatus == statusCheckOff {
428 if !onuInCache.(*OnuDevice).losRaised {
Neha Sharma96b7bf22020-06-15 10:37:32 +0000429 logger.Warnw(ctx, "onu-los-cleared-already", log.Fields{"onu_id": onuAlarm.OnuId,
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530430 "intf_id": onuAlarm.IntfId, "LosStatus": onuAlarm.LosStatus})
431 return true
432 }
433 return false
434 }
435 }
436 return true
437}
438
439func (em *OpenOltEventMgr) getDeviceEventName(onuAlarm *oop.OnuAlarmIndication) string {
440 var deviceEventName string
441 if onuAlarm.LosStatus == statusCheckOn {
442 deviceEventName = fmt.Sprintf("%s_%s", onuLosEvent, "RAISE_EVENT")
443 } else if onuAlarm.LosStatus == statusCheckOff {
444 deviceEventName = fmt.Sprintf("%s_%s", onuLosEvent, "CLEAR_EVENT")
445 } else if onuAlarm.LobStatus == statusCheckOn {
446 deviceEventName = fmt.Sprintf("%s_%s", onuLobEvent, "RAISE_EVENT")
447 } else if onuAlarm.LobStatus == statusCheckOff {
448 deviceEventName = fmt.Sprintf("%s_%s", onuLobEvent, "CLEAR_EVENT")
449 } else if onuAlarm.LopcMissStatus == statusCheckOn {
450 deviceEventName = fmt.Sprintf("%s_%s", onuLopcMissEvent, "RAISE_EVENT")
451 } else if onuAlarm.LopcMissStatus == statusCheckOff {
452 deviceEventName = fmt.Sprintf("%s_%s", onuLopcMissEvent, "CLEAR_EVENT")
453 } else if onuAlarm.LopcMicErrorStatus == statusCheckOn {
454 deviceEventName = fmt.Sprintf("%s_%s", onuLopcMicErrorEvent, "RAISE_EVENT")
455 } else if onuAlarm.LopcMicErrorStatus == statusCheckOff {
456 deviceEventName = fmt.Sprintf("%s_%s", onuLopcMicErrorEvent, "CLEAR_EVENT")
457 } else if onuAlarm.LofiStatus == statusCheckOn {
458 deviceEventName = fmt.Sprintf("%s_%s", onuLossOfFrameEvent, "RAISE_EVENT")
459 } else if onuAlarm.LofiStatus == statusCheckOff {
460 deviceEventName = fmt.Sprintf("%s_%s", onuLossOfFrameEvent, "CLEAR_EVENT")
461 } else if onuAlarm.LoamiStatus == statusCheckOn {
462 deviceEventName = fmt.Sprintf("%s_%s", onuLossOfPloamEvent, "RAISE_EVENT")
463 } else if onuAlarm.LoamiStatus == statusCheckOff {
464 deviceEventName = fmt.Sprintf("%s_%s", onuLossOfPloamEvent, "CLEAR_EVENT")
465 }
466 return deviceEventName
467}
468
Neha Sharma96b7bf22020-06-15 10:37:32 +0000469func (em *OpenOltEventMgr) onuAlarmIndication(ctx context.Context, onuAlarm *oop.OnuAlarmIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400470 var de voltha.DeviceEvent
Amit Ghosh502056b2020-07-15 09:15:48 +0100471
Devmalya Paulfb990a52019-07-09 10:01:49 -0400472 context := make(map[string]string)
473 /* Populating event context */
Amit Ghosh502056b2020-07-15 09:15:48 +0100474 context[ContextOnuPonIntfID] = strconv.FormatUint(uint64(onuAlarm.IntfId), base10)
475 context[ContextOnuOnuID] = strconv.FormatUint(uint64(onuAlarm.OnuId), base10)
kesavand0ef592c2022-03-16 12:34:24 +0530476 onuDeviceID := em.populateContextWithSerialDeviceID(context, onuAlarm.IntfId, onuAlarm.OnuId)
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530477
Devmalya Paulfb990a52019-07-09 10:01:49 -0400478 /* Populating device event body */
479 de.Context = context
480 de.ResourceId = deviceID
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530481 de.DeviceEventName = em.getDeviceEventName(onuAlarm)
482
483 switch onuAlarm.LosStatus {
484 case statusCheckOn:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000485 if em.wasLosRaised(ctx, onuAlarm) {
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530486 /* No need to raise Onu Los Event as it might have already raised
487 or Onu might have deleted */
488 return nil
489 }
490 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
491 if onuInCache, ok := em.handler.onus.Load(onuKey); ok {
492 /* Update onu device with LoS raised state as true */
493 em.handler.onus.Store(onuKey, NewOnuDevice(onuInCache.(*OnuDevice).deviceID, onuInCache.(*OnuDevice).deviceType,
494 onuInCache.(*OnuDevice).serialNumber, onuInCache.(*OnuDevice).onuID, onuInCache.(*OnuDevice).intfID,
khenaidoo106c61a2021-08-11 18:05:46 -0400495 onuInCache.(*OnuDevice).proxyDeviceID, true, onuInCache.(*OnuDevice).adapterEndpoint))
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530496 }
497 case statusCheckOff:
Neha Sharma96b7bf22020-06-15 10:37:32 +0000498 if em.wasLosCleared(ctx, onuAlarm) {
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530499 /* No need to clear Onu Los Event as it might have already cleared
500 or Onu might have deleted */
501 return nil
502 }
503 onuKey := em.handler.formOnuKey(onuAlarm.IntfId, onuAlarm.OnuId)
504 if onuInCache, ok := em.handler.onus.Load(onuKey); ok {
505 /* Update onu device with LoS raised state as false */
506 em.handler.onus.Store(onuKey, NewOnuDevice(onuInCache.(*OnuDevice).deviceID, onuInCache.(*OnuDevice).deviceType,
507 onuInCache.(*OnuDevice).serialNumber, onuInCache.(*OnuDevice).onuID, onuInCache.(*OnuDevice).intfID,
khenaidoo106c61a2021-08-11 18:05:46 -0400508 onuInCache.(*OnuDevice).proxyDeviceID, false, onuInCache.(*OnuDevice).adapterEndpoint))
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530509 }
Devmalya Paulfb990a52019-07-09 10:01:49 -0400510 }
Thiyagarajan Subramani34a00282020-03-10 20:19:31 +0530511
Devmalya Paulfb990a52019-07-09 10:01:49 -0400512 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530513 if err := em.eventProxy.SendDeviceEventWithKey(ctx, &de, voltha.EventCategory_COMMUNICATION, voltha.EventSubCategory_ONU, raisedTs, onuDeviceID); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530514 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400515 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000516 logger.Debugw(ctx, "onu-los-event-sent-to-kafka", log.Fields{"onu-id": onuAlarm.OnuId, "intf-id": onuAlarm.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530517 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400518}
519
kesavand7cf3a052020-08-28 12:49:18 +0530520func (em *OpenOltEventMgr) onuActivationIndication(ctx context.Context, eventName string, onuInd *oop.OnuIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400521 var de voltha.DeviceEvent
522 context := make(map[string]string)
523 /* Populating event context */
kesavand7cf3a052020-08-28 12:49:18 +0530524 context[ContextOnuPonIntfID] = strconv.FormatUint(uint64(onuInd.IntfId), base10)
525 context[ContextOnuOnuID] = strconv.FormatUint(uint64(onuInd.OnuId), base10)
526 context[ContextOnuFailureReaseon] = onuInd.FailReason.String()
Amit Ghosh502056b2020-07-15 09:15:48 +0100527
kesavand0ef592c2022-03-16 12:34:24 +0530528 onuDeviceID := em.populateContextWithSerialDeviceID(context, onuInd.IntfId, onuInd.OnuId)
Amit Ghosh502056b2020-07-15 09:15:48 +0100529
Devmalya Paulfb990a52019-07-09 10:01:49 -0400530 /* Populating device event body */
531 de.Context = context
532 de.ResourceId = deviceID
kesavand7cf3a052020-08-28 12:49:18 +0530533 de.DeviceEventName = eventName
Devmalya Paulfb990a52019-07-09 10:01:49 -0400534 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530535 if err := em.eventProxy.SendDeviceEventWithKey(ctx, &de, voltha.EventCategory_EQUIPMENT, voltha.EventSubCategory_PON, raisedTs, onuDeviceID); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530536 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400537 }
kesavand7cf3a052020-08-28 12:49:18 +0530538 logger.Debugw(ctx, "onu-activation-failure-event-sent-to-kafka", log.Fields{"onu-id": onuInd.OnuId, "intf-id": onuInd.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530539 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400540}
541
Neha Sharma96b7bf22020-06-15 10:37:32 +0000542func (em *OpenOltEventMgr) onuLossOmciIndication(ctx context.Context, onuLossOmci *oop.OnuLossOfOmciChannelIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400543 var de voltha.DeviceEvent
544 context := make(map[string]string)
545 /* Populating event context */
Amit Ghosh502056b2020-07-15 09:15:48 +0100546 context[ContextOnuPonIntfID] = strconv.FormatUint(uint64(onuLossOmci.IntfId), base10)
547 context[ContextOnuOnuID] = strconv.FormatUint(uint64(onuLossOmci.OnuId), base10)
548
kesavand0ef592c2022-03-16 12:34:24 +0530549 onuDeviceID := em.populateContextWithSerialDeviceID(context, onuLossOmci.IntfId, onuLossOmci.OnuId)
Amit Ghosh502056b2020-07-15 09:15:48 +0100550
Devmalya Paulfb990a52019-07-09 10:01:49 -0400551 /* Populating device event body */
552 de.Context = context
553 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530554 if onuLossOmci.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400555 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOmciEvent, "RAISE_EVENT")
556 } else {
557 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOmciEvent, "CLEAR_EVENT")
558 }
559 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530560 if err := em.eventProxy.SendDeviceEventWithKey(ctx, &de, voltha.EventCategory_COMMUNICATION, voltha.EventSubCategory_ONU, raisedTs, onuDeviceID); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530561 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400562 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000563 logger.Debugw(ctx, "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 +0530564 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400565}
566
Neha Sharma96b7bf22020-06-15 10:37:32 +0000567func (em *OpenOltEventMgr) onuDriftOfWindowIndication(ctx context.Context, onuDriftWindow *oop.OnuDriftOfWindowIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400568 var de voltha.DeviceEvent
569 context := make(map[string]string)
570 /* Populating event context */
Amit Ghosh502056b2020-07-15 09:15:48 +0100571 context[ContextOnuPonIntfID] = strconv.FormatUint(uint64(onuDriftWindow.IntfId), base10)
572 context[ContextOnuOnuID] = strconv.FormatUint(uint64(onuDriftWindow.OnuId), base10)
573 context[ContextOnuDrift] = strconv.FormatUint(uint64(onuDriftWindow.Drift), base10)
574 context[ContextOnuNewEqd] = strconv.FormatUint(uint64(onuDriftWindow.NewEqd), base10)
575
kesavand0ef592c2022-03-16 12:34:24 +0530576 onuDeviceID := em.populateContextWithSerialDeviceID(context, onuDriftWindow.IntfId, onuDriftWindow.OnuId)
Amit Ghosh502056b2020-07-15 09:15:48 +0100577
Devmalya Paulfb990a52019-07-09 10:01:49 -0400578 /* Populating device event body */
579 de.Context = context
580 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530581 if onuDriftWindow.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400582 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDriftOfWindowEvent, "RAISE_EVENT")
583 } else {
584 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDriftOfWindowEvent, "CLEAR_EVENT")
585 }
586 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530587 if err := em.eventProxy.SendDeviceEventWithKey(ctx, &de, voltha.EventCategory_COMMUNICATION, voltha.EventSubCategory_ONU, raisedTs, onuDeviceID); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530588 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400589 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000590 logger.Debugw(ctx, "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 +0530591 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400592}
593
Neha Sharma96b7bf22020-06-15 10:37:32 +0000594func (em *OpenOltEventMgr) onuSignalDegradeIndication(ctx context.Context, onuSignalDegrade *oop.OnuSignalDegradeIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400595 var de voltha.DeviceEvent
596 context := make(map[string]string)
597 /* Populating event context */
Amit Ghosh502056b2020-07-15 09:15:48 +0100598 context[ContextOnuPonIntfID] = strconv.FormatUint(uint64(onuSignalDegrade.IntfId), base10)
599 context[ContextOnuOnuID] = strconv.FormatUint(uint64(onuSignalDegrade.OnuId), base10)
600 context[ContextOnuInverseBitErrorRate] = strconv.FormatUint(uint64(onuSignalDegrade.InverseBitErrorRate), base10)
601
kesavand0ef592c2022-03-16 12:34:24 +0530602 onuDeviceID := em.populateContextWithSerialDeviceID(context, onuSignalDegrade.IntfId, onuSignalDegrade.OnuId)
Amit Ghosh502056b2020-07-15 09:15:48 +0100603
Devmalya Paulfb990a52019-07-09 10:01:49 -0400604 /* Populating device event body */
605 de.Context = context
606 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530607 if onuSignalDegrade.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400608 de.DeviceEventName = fmt.Sprintf("%s_%s", onuSignalDegradeEvent, "RAISE_EVENT")
609 } else {
610 de.DeviceEventName = fmt.Sprintf("%s_%s", onuSignalDegradeEvent, "CLEAR_EVENT")
611 }
612 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530613 if err := em.eventProxy.SendDeviceEventWithKey(ctx, &de, voltha.EventCategory_COMMUNICATION, voltha.EventSubCategory_ONU, raisedTs, onuDeviceID); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530614 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400615 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000616 logger.Debugw(ctx, "onu-signal-degrade-event-sent-to-kafka", log.Fields{"onu-id": onuSignalDegrade.OnuId, "intf-id": onuSignalDegrade.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530617 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400618}
619
Neha Sharma96b7bf22020-06-15 10:37:32 +0000620func (em *OpenOltEventMgr) onuSignalsFailIndication(ctx context.Context, onuSignalsFail *oop.OnuSignalsFailureIndication, deviceID string, raisedTs int64) error {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400621 var de voltha.DeviceEvent
622 context := make(map[string]string)
623 /* Populating event context */
kesavand0ef592c2022-03-16 12:34:24 +0530624 onuDeviceID := em.populateContextWithSerialDeviceID(context, onuSignalsFail.IntfId, onuSignalsFail.OnuId)
Amit Ghosh502056b2020-07-15 09:15:48 +0100625
626 context[ContextOnuOnuID] = strconv.FormatUint(uint64(onuSignalsFail.OnuId), base10)
627 context[ContextOnuPonIntfID] = strconv.FormatUint(uint64(onuSignalsFail.IntfId), base10)
628 context[ContextOnuInverseBitErrorRate] = strconv.FormatUint(uint64(onuSignalsFail.InverseBitErrorRate), base10)
Devmalya Paulfb990a52019-07-09 10:01:49 -0400629 /* Populating device event body */
630 de.Context = context
631 de.ResourceId = deviceID
Naga Manjunath9546b912019-11-28 20:56:20 +0530632 if onuSignalsFail.Status == statusCheckOn {
Devmalya Paulfb990a52019-07-09 10:01:49 -0400633 de.DeviceEventName = fmt.Sprintf("%s_%s", onuSignalsFailEvent, "RAISE_EVENT")
634 } else {
635 de.DeviceEventName = fmt.Sprintf("%s_%s", onuSignalsFailEvent, "CLEAR_EVENT")
636 }
637 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530638 if err := em.eventProxy.SendDeviceEventWithKey(ctx, &de, voltha.EventCategory_COMMUNICATION, voltha.EventSubCategory_ONU, raisedTs, onuDeviceID); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530639 return err
Devmalya Paulfb990a52019-07-09 10:01:49 -0400640 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000641 logger.Debugw(ctx, "onu-signals-fail-event-sent-to-kafka", log.Fields{"onu-id": onuSignalsFail.OnuId, "intf-id": onuSignalsFail.IntfId})
Naga Manjunath9546b912019-11-28 20:56:20 +0530642 return nil
643}
644
Neha Sharma96b7bf22020-06-15 10:37:32 +0000645func (em *OpenOltEventMgr) onuStartupFailedIndication(ctx context.Context, onuStartupFail *oop.OnuStartupFailureIndication, deviceID string, raisedTs int64) error {
Naga Manjunathf6f74642020-01-13 21:37:28 +0530646 var de voltha.DeviceEvent
647 context := make(map[string]string)
648 /* Populating event context */
kesavand0ef592c2022-03-16 12:34:24 +0530649 onuDeviceID := em.populateContextWithSerialDeviceID(context, onuStartupFail.IntfId, onuStartupFail.OnuId)
Amit Ghosh502056b2020-07-15 09:15:48 +0100650
651 context[ContextOnuOnuID] = strconv.FormatUint(uint64(onuStartupFail.OnuId), base10)
652 context[ContextOnuPonIntfID] = strconv.FormatUint(uint64(onuStartupFail.IntfId), base10)
Naga Manjunathf6f74642020-01-13 21:37:28 +0530653
654 /* Populating device event body */
655 de.Context = context
656 de.ResourceId = deviceID
657 if onuStartupFail.Status == statusCheckOn {
658 de.DeviceEventName = fmt.Sprintf("%s_%s", onuStartupFailEvent, "RAISE_EVENT")
659 } else {
660 de.DeviceEventName = fmt.Sprintf("%s_%s", onuStartupFailEvent, "CLEAR_EVENT")
661 }
662 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530663 if err := em.eventProxy.SendDeviceEventWithKey(ctx, &de, voltha.EventCategory_COMMUNICATION, voltha.EventSubCategory_PON, raisedTs, onuDeviceID); err != nil {
Naga Manjunathf6f74642020-01-13 21:37:28 +0530664 return err
665 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000666 logger.Debugw(ctx, "onu-startup-fail-event-sent-to-kafka", log.Fields{"onu-id": onuStartupFail.OnuId, "intf-id": onuStartupFail.IntfId})
Naga Manjunathf6f74642020-01-13 21:37:28 +0530667 return nil
668}
669
Neha Sharma96b7bf22020-06-15 10:37:32 +0000670func (em *OpenOltEventMgr) onuLossOfSyncIndication(ctx context.Context, onuLOKI *oop.OnuLossOfKeySyncFailureIndication, deviceID string, raisedTs int64) error {
Naga Manjunath9546b912019-11-28 20:56:20 +0530671 var de voltha.DeviceEvent
672 context := make(map[string]string)
673 /* Populating event context */
kesavand0ef592c2022-03-16 12:34:24 +0530674 onuDeviceID := em.populateContextWithSerialDeviceID(context, onuLOKI.IntfId, onuLOKI.OnuId)
Amit Ghosh502056b2020-07-15 09:15:48 +0100675
676 context[ContextOnuOnuID] = strconv.FormatUint(uint64(onuLOKI.OnuId), base10)
677 context[ContextOnuPonIntfID] = strconv.FormatUint(uint64(onuLOKI.IntfId), base10)
Naga Manjunath9546b912019-11-28 20:56:20 +0530678 /* Populating device event body */
679 de.Context = context
680 de.ResourceId = deviceID
681 if onuLOKI.Status == statusCheckOn {
682 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfKeySyncEvent, "RAISE_EVENT")
683 } else {
684 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfKeySyncEvent, "CLEAR_EVENT")
685 }
686
687 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530688 if err := em.eventProxy.SendDeviceEventWithKey(ctx, &de, voltha.EventCategory_SECURITY, voltha.EventSubCategory_ONU, raisedTs, onuDeviceID); err != nil {
Naga Manjunath9546b912019-11-28 20:56:20 +0530689 return err
690 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000691 logger.Debugw(ctx, "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 +0530692 return nil
Devmalya Paulfb990a52019-07-09 10:01:49 -0400693}
kesavand39e0aa32020-01-28 20:58:50 -0500694
695// oltIntfOperIndication handles Up and Down state of an OLT PON ports
Kent Hagermane6ff1012020-07-14 15:07:53 -0400696func (em *OpenOltEventMgr) oltIntfOperIndication(ctx context.Context, ifindication *oop.IntfOperIndication, deviceID string, raisedTs int64) {
Mahir Gunyel85f61c12021-10-06 11:53:45 -0700697 portNo := plt.IntfIDToPortNo(ifindication.IntfId, voltha.Port_PON_OLT)
khenaidoodc2116e2021-10-19 17:33:19 -0400698 if port, err := em.handler.getPortFromCore(ctx, &ca.PortFilter{
khenaidoo106c61a2021-08-11 18:05:46 -0400699 DeviceId: deviceID,
700 Port: portNo,
701 }); err != nil {
Girish Gowdra8a0bdcd2021-05-13 12:31:04 -0700702 logger.Warnw(ctx, "Error while fetching port object", log.Fields{"device-id": deviceID, "err": err})
Kent Hagermanf1db18b2020-07-08 13:38:15 -0400703 } else if port.AdminState != common.AdminState_ENABLED {
704 logger.Debugw(ctx, "port-disable/enable-event-not-generated--the-port-is-not-enabled-by-operator", log.Fields{"device-id": deviceID, "port": port})
Kent Hagermane6ff1012020-07-14 15:07:53 -0400705 return
kesavand39e0aa32020-01-28 20:58:50 -0500706 }
707 /* Populating event context */
Kent Hagermanf1db18b2020-07-08 13:38:15 -0400708 context := map[string]string{ContextOltPonIntfOperState: ifindication.GetOperState()}
kesavand39e0aa32020-01-28 20:58:50 -0500709 /* Populating device event body */
Kent Hagermanf1db18b2020-07-08 13:38:15 -0400710 var de voltha.DeviceEvent
kesavand39e0aa32020-01-28 20:58:50 -0500711 de.Context = context
712 de.ResourceId = deviceID
713
714 if ifindication.GetOperState() == operationStateDown {
715 de.DeviceEventName = fmt.Sprintf("%s_%s", ponIntfDownIndiction, "RAISE_EVENT")
716 } else if ifindication.OperState == operationStateUp {
717 de.DeviceEventName = fmt.Sprintf("%s_%s", ponIntfDownIndiction, "CLEAR_EVENT")
718 }
719 /* Send event to KAFKA */
Kent Hagermane6ff1012020-07-14 15:07:53 -0400720 if err := em.eventProxy.SendDeviceEvent(ctx, &de, voltha.EventCategory_COMMUNICATION, voltha.EventSubCategory_OLT, raisedTs); err != nil {
721 _ = olterrors.NewErrCommunication("send-olt-intf-oper-status-event", log.Fields{"device-id": deviceID, "intf-id": ifindication.IntfId, "oper-state": ifindication.OperState}, err).LogAt(log.WarnLevel)
722 return
kesavand39e0aa32020-01-28 20:58:50 -0500723 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000724 logger.Debug(ctx, "sent-olt-intf-oper-status-event-to-kafka")
kesavand39e0aa32020-01-28 20:58:50 -0500725}
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500726
Neha Sharma96b7bf22020-06-15 10:37:32 +0000727func (em *OpenOltEventMgr) onuDeactivationFailureIndication(ctx context.Context, onuDFI *oop.OnuDeactivationFailureIndication, deviceID string, raisedTs int64) error {
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500728 var de voltha.DeviceEvent
729 context := make(map[string]string)
730 /* Populating event context */
kesavand0ef592c2022-03-16 12:34:24 +0530731 onuDeviceID := em.populateContextWithSerialDeviceID(context, onuDFI.IntfId, onuDFI.OnuId)
Amit Ghosh502056b2020-07-15 09:15:48 +0100732
733 context[ContextOnuOnuID] = strconv.FormatUint(uint64(onuDFI.OnuId), base10)
734 context[ContextOnuPonIntfID] = strconv.FormatUint(uint64(onuDFI.IntfId), base10)
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500735 /* Populating device event body */
736 de.Context = context
737 de.ResourceId = deviceID
Devmalya Paula1efa642020-04-20 01:36:43 -0400738 if onuDFI.Status == statusCheckOn {
739 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDeactivationFailureEvent, "RAISE_EVENT")
740 } else {
741 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDeactivationFailureEvent, "CLEAR_EVENT")
742 }
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500743 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530744 if err := em.eventProxy.SendDeviceEventWithKey(ctx, &de, voltha.EventCategory_EQUIPMENT, voltha.EventSubCategory_ONU, raisedTs, onuDeviceID); err != nil {
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500745 return err
746 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000747 logger.Debugw(ctx, "onu-deactivation-failure-event-sent-to-kafka", log.Fields{"onu-id": onuDFI.OnuId, "intf-id": onuDFI.IntfId})
Devmalya Paul1abc34e2020-02-04 20:48:06 -0500748 return nil
749}
Amit Ghosh502056b2020-07-15 09:15:48 +0100750
Neha Sharma96b7bf22020-06-15 10:37:32 +0000751func (em *OpenOltEventMgr) onuRemoteDefectIndication(ctx context.Context, onuID uint32, intfID uint32, rdiCount uint64, status string, deviceID string, raisedTs int64) error {
Devmalya Paul6f063a62020-02-19 19:19:06 -0500752 /* Populating event context */
753 context := map[string]string{
Amit Ghosh502056b2020-07-15 09:15:48 +0100754 ContextOnuOnuID: strconv.FormatUint(uint64(onuID), base10),
755 ContextOnuPonIntfID: strconv.FormatUint(uint64(intfID), base10),
756 ContextOnuRemoteDefectIndicatorCount: strconv.FormatUint(rdiCount, base10),
Devmalya Paul6f063a62020-02-19 19:19:06 -0500757 }
kesavand0ef592c2022-03-16 12:34:24 +0530758 onuDeviceID := em.populateContextWithSerialDeviceID(context, intfID, onuID)
Amit Ghosh502056b2020-07-15 09:15:48 +0100759
Devmalya Paul6f063a62020-02-19 19:19:06 -0500760 /* Populating device event body */
761 de := &voltha.DeviceEvent{
Devmalya Paula1efa642020-04-20 01:36:43 -0400762 Context: context,
763 ResourceId: deviceID,
764 }
765 if status == statusCheckOn {
766 de.DeviceEventName = fmt.Sprintf("%s_%s", onuRemoteDefectIndication, "RAISE_EVENT")
767 } else {
768 de.DeviceEventName = fmt.Sprintf("%s_%s", onuRemoteDefectIndication, "CLEAR_EVENT")
Devmalya Paul6f063a62020-02-19 19:19:06 -0500769 }
770 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530771 if err := em.eventProxy.SendDeviceEventWithKey(ctx, de, voltha.EventCategory_EQUIPMENT, voltha.EventSubCategory_ONU, raisedTs, onuDeviceID); err != nil {
Devmalya Paul6f063a62020-02-19 19:19:06 -0500772 return err
773 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000774 logger.Debugw(ctx, "onu-remote-defect-event-sent-to-kafka", log.Fields{"onu-id": onuID, "intf-id": intfID})
Devmalya Paula1efa642020-04-20 01:36:43 -0400775 return nil
776}
777
Neha Sharma96b7bf22020-06-15 10:37:32 +0000778func (em *OpenOltEventMgr) onuItuPonStatsIndication(ctx context.Context, onuIPS *oop.OnuItuPonStatsIndication, deviceID string, raisedTs int64) error {
Devmalya Paula1efa642020-04-20 01:36:43 -0400779 onuDevice, found := em.handler.onus.Load(em.handler.formOnuKey(onuIPS.IntfId, onuIPS.OnuId))
780 if !found {
781 return errors.New("unknown-onu-device")
782 }
783 if onuIPS.GetRdiErrorInd().Status == statusCheckOn {
784 if !onuDevice.(*OnuDevice).rdiRaised {
Neha Sharma96b7bf22020-06-15 10:37:32 +0000785 if err := em.onuRemoteDefectIndication(ctx, onuIPS.OnuId, onuIPS.IntfId, onuIPS.GetRdiErrorInd().RdiErrorCount, statusCheckOn, deviceID, raisedTs); err != nil {
Devmalya Paula1efa642020-04-20 01:36:43 -0400786 return err
787 }
788 onuDevice.(*OnuDevice).rdiRaised = true
789 return nil
790 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000791 logger.Debugw(ctx, "onu-remote-defect-already-raised", log.Fields{"onu-id": onuIPS.OnuId, "intf-id": onuIPS.IntfId})
Devmalya Paula1efa642020-04-20 01:36:43 -0400792 } else {
Neha Sharma96b7bf22020-06-15 10:37:32 +0000793 if err := em.onuRemoteDefectIndication(ctx, onuIPS.OnuId, onuIPS.IntfId, onuIPS.GetRdiErrorInd().RdiErrorCount, statusCheckOff, deviceID, raisedTs); err != nil {
Devmalya Paula1efa642020-04-20 01:36:43 -0400794 return err
795 }
796 onuDevice.(*OnuDevice).rdiRaised = false
797 }
Devmalya Paul41a762d2020-03-01 18:56:54 -0500798 return nil
799}
800
Neha Sharma96b7bf22020-06-15 10:37:32 +0000801func (em *OpenOltEventMgr) onuLossOfGEMChannelDelineationIndication(ctx context.Context, onuGCD *oop.OnuLossOfGEMChannelDelineationIndication, deviceID string, raisedTs int64) error {
Devmalya Paul41a762d2020-03-01 18:56:54 -0500802 /* Populating event context */
803 context := map[string]string{
Amit Ghosh502056b2020-07-15 09:15:48 +0100804 ContextOnuOnuID: strconv.FormatUint(uint64(onuGCD.OnuId), base10),
805 ContextOnuPonIntfID: strconv.FormatUint(uint64(onuGCD.IntfId), base10),
806 ContextOnuDelineationErrors: strconv.FormatUint(uint64(onuGCD.DelineationErrors), base10),
Devmalya Paul41a762d2020-03-01 18:56:54 -0500807 }
kesavand0ef592c2022-03-16 12:34:24 +0530808 onuDeviceID := em.populateContextWithSerialDeviceID(context, onuGCD.IntfId, onuGCD.OnuId)
Amit Ghosh502056b2020-07-15 09:15:48 +0100809
Devmalya Paul41a762d2020-03-01 18:56:54 -0500810 /* Populating device event body */
811 de := &voltha.DeviceEvent{
812 Context: context,
813 ResourceId: deviceID,
814 }
815 if onuGCD.Status == statusCheckOn {
816 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfGEMChannelDelineationEvent, "RAISE_EVENT")
817 } else {
818 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfGEMChannelDelineationEvent, "CLEAR_EVENT")
819 }
820 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530821 if err := em.eventProxy.SendDeviceEventWithKey(ctx, de, voltha.EventCategory_COMMUNICATION, voltha.EventSubCategory_ONU, raisedTs, onuDeviceID); err != nil {
Devmalya Paul41a762d2020-03-01 18:56:54 -0500822 return err
823 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000824 logger.Debugw(ctx, "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 -0500825 return nil
826}
827
Neha Sharma96b7bf22020-06-15 10:37:32 +0000828func (em *OpenOltEventMgr) onuPhysicalEquipmentErrorIndication(ctx context.Context, onuErr *oop.OnuPhysicalEquipmentErrorIndication, deviceID string, raisedTs int64) error {
Devmalya Paul41a762d2020-03-01 18:56:54 -0500829 /* Populating event context */
830 context := map[string]string{
Amit Ghosh502056b2020-07-15 09:15:48 +0100831 ContextOnuOnuID: strconv.FormatUint(uint64(onuErr.OnuId), base10),
832 ContextOnuPonIntfID: strconv.FormatUint(uint64(onuErr.IntfId), base10),
Devmalya Paul41a762d2020-03-01 18:56:54 -0500833 }
kesavand0ef592c2022-03-16 12:34:24 +0530834 onuDeviceID := em.populateContextWithSerialDeviceID(context, onuErr.IntfId, onuErr.OnuId)
Devmalya Paul41a762d2020-03-01 18:56:54 -0500835 /* Populating device event body */
836 de := &voltha.DeviceEvent{
837 Context: context,
838 ResourceId: deviceID,
839 }
840 if onuErr.Status == statusCheckOn {
841 de.DeviceEventName = fmt.Sprintf("%s_%s", onuPhysicalEquipmentErrorEvent, "RAISE_EVENT")
842 } else {
843 de.DeviceEventName = fmt.Sprintf("%s_%s", onuPhysicalEquipmentErrorEvent, "CLEAR_EVENT")
844 }
845 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530846 if err := em.eventProxy.SendDeviceEventWithKey(ctx, de, voltha.EventCategory_EQUIPMENT, voltha.EventSubCategory_ONU, raisedTs, onuDeviceID); err != nil {
Devmalya Paul41a762d2020-03-01 18:56:54 -0500847 return err
848 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000849 logger.Debugw(ctx, "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 -0500850 return nil
851}
852
Neha Sharma96b7bf22020-06-15 10:37:32 +0000853func (em *OpenOltEventMgr) onuLossOfAcknowledgementIndication(ctx context.Context, onuLOA *oop.OnuLossOfAcknowledgementIndication, deviceID string, raisedTs int64) error {
Devmalya Paul41a762d2020-03-01 18:56:54 -0500854 /* Populating event context */
855 context := map[string]string{
Amit Ghosh502056b2020-07-15 09:15:48 +0100856 ContextOnuOnuID: strconv.FormatUint(uint64(onuLOA.OnuId), base10),
857 ContextOnuPonIntfID: strconv.FormatUint(uint64(onuLOA.IntfId), base10),
Devmalya Paul41a762d2020-03-01 18:56:54 -0500858 }
kesavand0ef592c2022-03-16 12:34:24 +0530859 onuDeviceID := em.populateContextWithSerialDeviceID(context, onuLOA.IntfId, onuLOA.OnuId)
Amit Ghosh502056b2020-07-15 09:15:48 +0100860
Devmalya Paul41a762d2020-03-01 18:56:54 -0500861 /* Populating device event body */
862 de := &voltha.DeviceEvent{
863 Context: context,
864 ResourceId: deviceID,
865 }
866 if onuLOA.Status == statusCheckOn {
867 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfAcknowledgementEvent, "RAISE_EVENT")
868 } else {
869 de.DeviceEventName = fmt.Sprintf("%s_%s", onuLossOfAcknowledgementEvent, "CLEAR_EVENT")
870 }
871 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530872 if err := em.eventProxy.SendDeviceEventWithKey(ctx, de, voltha.EventCategory_EQUIPMENT, voltha.EventSubCategory_ONU, raisedTs, onuDeviceID); err != nil {
Devmalya Paul41a762d2020-03-01 18:56:54 -0500873 return err
874 }
Neha Sharma96b7bf22020-06-15 10:37:32 +0000875 logger.Debugw(ctx, "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 -0500876 return nil
877}
Devmalya Pauleb5294e2020-03-19 03:01:39 -0400878
Neha Sharma96b7bf22020-06-15 10:37:32 +0000879func (em *OpenOltEventMgr) onuDifferentialReachExceededIndication(ctx context.Context, onuDRE *oop.OnuDifferentialReachExceededIndication, deviceID string, raisedTs int64) error {
Devmalya Pauleb5294e2020-03-19 03:01:39 -0400880 /* Populating event context */
881 context := map[string]string{
Amit Ghosh502056b2020-07-15 09:15:48 +0100882 ContextOnuOnuID: strconv.FormatUint(uint64(onuDRE.OnuId), base10),
883 ContextOnuPonIntfID: strconv.FormatUint(uint64(onuDRE.IntfId), base10),
884 ContextOnuDifferentialDistance: strconv.FormatUint(uint64(onuDRE.Distance), base10),
Devmalya Pauleb5294e2020-03-19 03:01:39 -0400885 }
kesavand0ef592c2022-03-16 12:34:24 +0530886 onuDeviceID := em.populateContextWithSerialDeviceID(context, onuDRE.IntfId, onuDRE.OnuId)
Amit Ghosh502056b2020-07-15 09:15:48 +0100887
Devmalya Pauleb5294e2020-03-19 03:01:39 -0400888 /* Populating device event body */
889 de := &voltha.DeviceEvent{
890 Context: context,
891 ResourceId: deviceID,
892 }
893 if onuDRE.Status == statusCheckOn {
894 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDifferentialReachExceededEvent, "RAISE_EVENT")
895 } else {
896 de.DeviceEventName = fmt.Sprintf("%s_%s", onuDifferentialReachExceededEvent, "CLEAR_EVENT")
897 }
898 /* Send event to KAFKA */
kesavand0ef592c2022-03-16 12:34:24 +0530899 if err := em.eventProxy.SendDeviceEventWithKey(ctx, de, voltha.EventCategory_EQUIPMENT, voltha.EventSubCategory_ONU, raisedTs, onuDeviceID); err != nil {
Devmalya Pauleb5294e2020-03-19 03:01:39 -0400900 return err
901 }
Girish Kumara1ea2aa2020-08-19 18:14:22 +0000902 logger.Debugw(ctx, "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 -0400903 return nil
904}