VOL-892 Alarm - ONU Deactivation Failure

        This commit contains the changes required to publish ONU
        deactivation failure event to the KAFKA bus.

Change-Id: I9f1cb27842938169677ee363139d62e8ac6b0603
diff --git a/adaptercore/openolt_eventmgr.go b/adaptercore/openolt_eventmgr.go
index b5650ed..f233f6c 100644
--- a/adaptercore/openolt_eventmgr.go
+++ b/adaptercore/openolt_eventmgr.go
@@ -30,26 +30,27 @@
 )
 
 const (
-	onuDiscoveryEvent       = "ONU_DISCOVERY"
-	onuLosEvent             = "ONU_LOSS_OF_SIGNAL"
-	onuLobEvent             = "ONU_LOSS_OF_BURST"
-	onuLopcMissEvent        = "ONU_LOPC_MISS"
-	onuLopcMicErrorEvent    = "ONU_LOPC_MIC_ERROR"
-	oltLosEvent             = "OLT_LOSS_OF_SIGNAL"
-	oltIndicationDown       = "OLT_DOWN_INDICATION"
-	onuDyingGaspEvent       = "ONU_DYING_GASP"
-	onuSignalsFailEvent     = "ONU_SIGNALS_FAIL"
-	onuStartupFailEvent     = "ONU_STARTUP_FAIL"
-	onuSignalDegradeEvent   = "ONU_SIGNAL_DEGRADE"
-	onuDriftOfWindowEvent   = "ONU_DRIFT_OF_WINDOW"
-	onuActivationFailEvent  = "ONU_ACTIVATION_FAIL"
-	onuProcessingErrorEvent = "ONU_PROCESSING_ERROR"
-	onuTiwiEvent            = "ONU_TRANSMISSION_WARNING"
-	onuLossOmciEvent        = "ONU_LOSS_OF_OMCI_CHANNEL"
-	onuLossOfKeySyncEvent   = "ONU_LOSS_OF_KEY_SYNC"
-	onuLossOfFrameEvent     = "ONU_LOSS_OF_FRAME"
-	onuLossOfPloamEvent     = "ONU_LOSS_OF_PLOAM"
-	ponIntfDownIndiction    = "OLT_PON_INTERFACE_DOWN"
+	onuDiscoveryEvent           = "ONU_DISCOVERY"
+	onuLosEvent                 = "ONU_LOSS_OF_SIGNAL"
+	onuLobEvent                 = "ONU_LOSS_OF_BURST"
+	onuLopcMissEvent            = "ONU_LOPC_MISS"
+	onuLopcMicErrorEvent        = "ONU_LOPC_MIC_ERROR"
+	oltLosEvent                 = "OLT_LOSS_OF_SIGNAL"
+	oltIndicationDown           = "OLT_DOWN_INDICATION"
+	onuDyingGaspEvent           = "ONU_DYING_GASP"
+	onuSignalsFailEvent         = "ONU_SIGNALS_FAIL"
+	onuStartupFailEvent         = "ONU_STARTUP_FAIL"
+	onuSignalDegradeEvent       = "ONU_SIGNAL_DEGRADE"
+	onuDriftOfWindowEvent       = "ONU_DRIFT_OF_WINDOW"
+	onuActivationFailEvent      = "ONU_ACTIVATION_FAIL"
+	onuProcessingErrorEvent     = "ONU_PROCESSING_ERROR"
+	onuTiwiEvent                = "ONU_TRANSMISSION_WARNING"
+	onuLossOmciEvent            = "ONU_LOSS_OF_OMCI_CHANNEL"
+	onuLossOfKeySyncEvent       = "ONU_LOSS_OF_KEY_SYNC"
+	onuLossOfFrameEvent         = "ONU_LOSS_OF_FRAME"
+	onuLossOfPloamEvent         = "ONU_LOSS_OF_PLOAM"
+	ponIntfDownIndiction        = "OLT_PON_INTERFACE_DOWN"
+	onuDeactivationFailureEvent = "ONU_DEACTIVATION_FAILURE"
 )
 
 const (
@@ -133,6 +134,9 @@
 	case *oop.AlarmIndication_OnuItuPonStatsInd:
 		log.Infow("Received onu Itu Pon Stats indication ", log.Fields{"alarm_ind": alarmInd})
 		log.Infow("Not implemented yet", log.Fields{"alarm_ind": alarmInd})
+	case *oop.AlarmIndication_OnuDeactivationFailureInd:
+		log.Infow("Received onu deactivation failure indication ", log.Fields{"alarm_ind": alarmInd})
+		err = em.onuDeactivationFailureIndication(alarmInd.GetOnuDeactivationFailureInd(), deviceID, raisedTs)
 	default:
 		err = NewErrInvalidValue(log.Fields{"indication-type": alarmInd}, nil)
 	}
@@ -477,3 +481,24 @@
 	}
 	log.Info("sent-olt-intf-oper-status-event-to-kafka")
 }
+
+func (em *OpenOltEventMgr) onuDeactivationFailureIndication(onuDFI *oop.OnuDeactivationFailureIndication, deviceID string, raisedTs int64) error {
+	var de voltha.DeviceEvent
+	context := make(map[string]string)
+	/* Populating event context */
+	context["onu-id"] = strconv.FormatUint(uint64(onuDFI.OnuId), base10)
+	context["intf-id"] = strconv.FormatUint(uint64(onuDFI.IntfId), base10)
+	context["failure-reason"] = strconv.FormatUint(uint64(onuDFI.FailReason), base10)
+	/* Populating device event body */
+	de.Context = context
+	de.ResourceId = deviceID
+	de.DeviceEventName = onuDeactivationFailureEvent
+
+	/* Send event to KAFKA */
+	if err := em.eventProxy.SendDeviceEvent(&de, equipment, onu, raisedTs); err != nil {
+		log.Errorw("Failed to send ONU deactivation failure event", log.Fields{"onu-id": onuDFI.OnuId, "intf-id": onuDFI.IntfId})
+		return err
+	}
+	log.Infow("ONU deactivation failure event sent to KAFKA", log.Fields{"onu-id": onuDFI.OnuId, "intf-id": onuDFI.IntfId})
+	return nil
+}