VOL-3049 initial support changes for alarm notifications

Change-Id: Ic6e17196e6955a669e2bf8fc248bdbdbca1654c5
diff --git a/internal/pkg/onuadaptercore/device_handler.go b/internal/pkg/onuadaptercore/device_handler.go
index 379afa8..5db246b 100644
--- a/internal/pkg/onuadaptercore/device_handler.go
+++ b/internal/pkg/onuadaptercore/device_handler.go
@@ -177,6 +177,7 @@
 	pOnuOmciDevice  *OnuDeviceEntry
 	pOnuTP          *onuUniTechProf
 	pOnuMetricsMgr  *onuMetricsManager
+	pAlarmMgr       *onuAlarmManager
 	exitChannel     chan int
 	lockDevice      sync.RWMutex
 	pOnuIndication  *oop.OnuIndication
@@ -194,6 +195,7 @@
 	collectorIsRunning         bool
 	mutexCollectorFlag         sync.RWMutex
 	stopCollector              chan bool
+	stopAlarmManager           chan bool
 	stopHeartbeatCheck         chan bool
 	uniEntityMap               map[uint32]*onuUniPort
 	lockVlanConfig             sync.Mutex
@@ -219,6 +221,7 @@
 	dh.deviceEntrySet = make(chan bool, 1)
 	dh.collectorIsRunning = false
 	dh.stopCollector = make(chan bool, 2)
+	dh.stopAlarmManager = make(chan bool, 2)
 	dh.stopHeartbeatCheck = make(chan bool, 2)
 	//dh.metrics = pmmetrics.NewPmMetrics(cloned.Id, pmmetrics.Frequency(150), pmmetrics.FrequencyOverride(false), pmmetrics.Grouped(false), pmmetrics.Metrics(pmNames))
 	//TODO initialize the support classes.
@@ -1236,12 +1239,13 @@
 
 //setOnuDeviceEntry sets the ONU device entry within the handler
 func (dh *deviceHandler) setOnuDeviceEntry(
-	apDeviceEntry *OnuDeviceEntry, apOnuTp *onuUniTechProf, apOnuMetricsMgr *onuMetricsManager) {
+	apDeviceEntry *OnuDeviceEntry, apOnuTp *onuUniTechProf, apOnuMetricsMgr *onuMetricsManager, apOnuAlarmMgr *onuAlarmManager) {
 	dh.lockDevice.Lock()
 	defer dh.lockDevice.Unlock()
 	dh.pOnuOmciDevice = apDeviceEntry
 	dh.pOnuTP = apOnuTp
 	dh.pOnuMetricsMgr = apOnuMetricsMgr
+	dh.pAlarmMgr = apOnuAlarmMgr
 }
 
 //addOnuDeviceEntry creates a new ONU device or returns the existing
@@ -1257,8 +1261,9 @@
 		deviceEntry = newOnuDeviceEntry(ctx, dh)
 		onuTechProfProc := newOnuUniTechProf(ctx, dh)
 		onuMetricsMgr := newonuMetricsManager(ctx, dh)
+		onuAlarmManager := newAlarmManager(ctx, dh)
 		//error treatment possible //TODO!!!
-		dh.setOnuDeviceEntry(deviceEntry, onuTechProfProc, onuMetricsMgr)
+		dh.setOnuDeviceEntry(deviceEntry, onuTechProfProc, onuMetricsMgr, onuAlarmManager)
 		// fire deviceEntry ready event to spread to possibly waiting processing
 		dh.deviceEntrySet <- true
 		logger.Debugw(ctx, "onuDeviceEntry-added", log.Fields{"device-id": dh.deviceID})
@@ -1454,6 +1459,8 @@
 		// Start PM collector routine
 		go dh.startCollector(ctx)
 	}
+	go dh.startAlarmManager(ctx)
+
 	return nil
 }
 
@@ -1578,6 +1585,7 @@
 		// Stop collector routine
 		dh.stopCollector <- true
 	}
+	dh.stopAlarmManager <- true
 	return nil
 }
 
@@ -2859,3 +2867,14 @@
 	dh.mutexCollectorFlag.RUnlock()
 	return flagValue
 }
+
+func (dh *deviceHandler) startAlarmManager(ctx context.Context) {
+	logger.Debugf(ctx, "startingAlarmManager")
+
+	// Start routine to process OMCI GET Responses
+	go dh.pAlarmMgr.startOMCIAlarmMessageProcessing(ctx)
+	if stop := <-dh.stopAlarmManager; stop {
+		logger.Debugw(ctx, "stopping-collector-for-onu", log.Fields{"device-id": dh.device.Id})
+		dh.pAlarmMgr.stopProcessingOmciMessages <- true // Stop the OMCI routines if any
+	}
+}