SEBA-940 added rest endpoint for alarms

Change-Id: I16159933d7090cf1319e09210bdf9968515ef099
diff --git a/internal/bbsim/alarmsim/alarmsim.go b/internal/bbsim/alarmsim/alarmsim.go
index 57c7fe5..9607526 100644
--- a/internal/bbsim/alarmsim/alarmsim.go
+++ b/internal/bbsim/alarmsim/alarmsim.go
@@ -25,6 +25,40 @@
 	"strconv"
 )
 
+// AlarmNameMap string to enum map
+var AlarmNameMap = map[string]bbsim.AlarmType_Types{
+	"DyingGasp":                bbsim.AlarmType_DYING_GASP,
+	"StartupFailure":           bbsim.AlarmType_ONU_STARTUP_FAILURE,
+	"SignalDegrade":            bbsim.AlarmType_ONU_SIGNAL_DEGRADE,
+	"DriftOfWindow":            bbsim.AlarmType_ONU_DRIFT_OF_WINDOW,
+	"LossOfOmciChannel":        bbsim.AlarmType_ONU_LOSS_OF_OMCI_CHANNEL,
+	"SignalsFailure":           bbsim.AlarmType_ONU_SIGNALS_FAILURE,
+	"TransmissionInterference": bbsim.AlarmType_ONU_TRANSMISSION_INTERFERENCE_WARNING,
+	"ActivationFailure":        bbsim.AlarmType_ONU_ACTIVATION_FAILURE,
+	"ProcessingError":          bbsim.AlarmType_ONU_PROCESSING_ERROR,
+	"LossOfKeySyncFailure":     bbsim.AlarmType_ONU_LOSS_OF_KEY_SYNC_FAILURE,
+
+	// Break out OnuAlarm into its subcases.
+	"LossOfSignal":   bbsim.AlarmType_ONU_ALARM_LOS,
+	"LossOfBurst":    bbsim.AlarmType_ONU_ALARM_LOB,
+	"LOPC_MISS":      bbsim.AlarmType_ONU_ALARM_LOPC_MISS,
+	"LOPC_MIC_ERROR": bbsim.AlarmType_ONU_ALARM_LOPC_MIC_ERROR,
+	"LossOfFrame":    bbsim.AlarmType_ONU_ALARM_LOFI,
+	"LossOfPloam":    bbsim.AlarmType_ONU_ALARM_LOAMI,
+
+	// Whole-PON / Non-onu-specific
+	"PonLossOfSignal": bbsim.AlarmType_LOS,
+}
+
+func AlarmNameToEnum(name string) (*bbsim.AlarmType_Types, error) {
+	v, okay := AlarmNameMap[name]
+	if !okay {
+		return nil, fmt.Errorf("Unknown Alarm Name: %v", name)
+	}
+
+	return &v, nil
+}
+
 // Find a key in the optional AlarmParameters, convert it to an integer,
 // return 'def' if no key exists or it cannot be converted.
 func extractInt(params []*bbsim.AlarmParameter, name string, def int) int {
@@ -39,12 +73,18 @@
 	return def
 }
 
+// BuildAlarmIndication function forms openolt alarmIndication as per AlarmRequest
 func BuildAlarmIndication(req *bbsim.AlarmRequest, o *devices.OltDevice) (*openolt.AlarmIndication, error) {
 	var alarm *openolt.AlarmIndication
 	var onu *devices.Onu
 	var err error
 
-	if req.AlarmType != bbsim.AlarmType_LOS {
+	alarmType, err := AlarmNameToEnum(req.AlarmType)
+	if err != nil {
+		return nil, err
+	}
+
+	if *alarmType != bbsim.AlarmType_LOS {
 		// No ONU Id for LOS
 		onu, err = o.FindOnuBySn(req.SerialNumber)
 		if err != nil {
@@ -52,7 +92,7 @@
 		}
 	}
 
-	switch req.AlarmType {
+	switch *alarmType {
 	case bbsim.AlarmType_LOS:
 		alarm = &openolt.AlarmIndication{
 			Data: &openolt.AlarmIndication_LosInd{&openolt.LosIndication{
@@ -208,6 +248,7 @@
 	return alarm, nil
 }
 
+// SimulateAlarm accept request for alarms and send proper alarmIndication to openolt stream
 func SimulateAlarm(ctx context.Context, req *bbsim.AlarmRequest, o *devices.OltDevice) error {
 	alarmIndication, err := BuildAlarmIndication(req, o)
 	if err != nil {