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 {
diff --git a/internal/bbsimctl/commands/alarms.go b/internal/bbsimctl/commands/alarms.go
index eb4813c..a1c7113 100755
--- a/internal/bbsimctl/commands/alarms.go
+++ b/internal/bbsimctl/commands/alarms.go
@@ -23,6 +23,7 @@
 	"github.com/jessevdk/go-flags"
 	pb "github.com/opencord/bbsim/api/bbsim"
 	"github.com/opencord/bbsim/internal/bbsimctl/config"
+	"github.com/opencord/bbsim/internal/bbsim/alarmsim"
 	"github.com/opencord/cordctl/pkg/format"
 	log "github.com/sirupsen/logrus"
 	"os"
@@ -63,38 +64,6 @@
 	List  AlarmList  `command:"list"`
 }
 
-var AlarmNameMap = map[string]pb.AlarmType_Types{"DyingGasp": pb.AlarmType_DYING_GASP,
-	"StartupFailure":           pb.AlarmType_ONU_STARTUP_FAILURE,
-	"SignalDegrade":            pb.AlarmType_ONU_SIGNAL_DEGRADE,
-	"DriftOfWindow":            pb.AlarmType_ONU_DRIFT_OF_WINDOW,
-	"LossOfOmciChannel":        pb.AlarmType_ONU_LOSS_OF_OMCI_CHANNEL,
-	"SignalsFailure":           pb.AlarmType_ONU_SIGNALS_FAILURE,
-	"TransmissionInterference": pb.AlarmType_ONU_TRANSMISSION_INTERFERENCE_WARNING,
-	"ActivationFailure":        pb.AlarmType_ONU_ACTIVATION_FAILURE,
-	"ProcessingError":          pb.AlarmType_ONU_PROCESSING_ERROR,
-	"LossOfKeySyncFailure":     pb.AlarmType_ONU_LOSS_OF_KEY_SYNC_FAILURE,
-
-	// Break out OnuAlarm into its subcases.
-	"LossOfSignal":   pb.AlarmType_ONU_ALARM_LOS,
-	"LossOfBurst":    pb.AlarmType_ONU_ALARM_LOB,
-	"LOPC_MISS":      pb.AlarmType_ONU_ALARM_LOPC_MISS,
-	"LOPC_MIC_ERROR": pb.AlarmType_ONU_ALARM_LOPC_MIC_ERROR,
-	"LossOfFrame":    pb.AlarmType_ONU_ALARM_LOFI,
-	"LossOfPloam":    pb.AlarmType_ONU_ALARM_LOAMI,
-
-	// Whole-PON / Non-onu-specific
-	"PonLossOfSignal": pb.AlarmType_LOS,
-}
-
-func alarmNameToEnum(name string) (*pb.AlarmType_Types, error) {
-	v, okay := AlarmNameMap[name]
-	if !okay {
-		return nil, fmt.Errorf("Unknown Alarm Name: %v", name)
-	}
-
-	return &v, nil
-}
-
 // add optional parameters from the command-line to the AlarmRequest
 func addParameters(parameters []string, req *pb.AlarmRequest) error {
 	req.Parameters = make([]*pb.AlarmParameter, len(parameters))
@@ -112,29 +81,24 @@
 	parser.AddCommand("alarm", "Alarm Commands", "Commands to raise and clear alarms", &AlarmOptions{})
 }
 
+// Execute alarm raise
 func (o *AlarmRaise) Execute(args []string) error {
-	alarmType, err := alarmNameToEnum(string(o.Args.Name))
-	if err != nil {
-		return err
-	}
-
 	client, conn := connect()
 	defer conn.Close()
 
 	ctx, cancel := context.WithTimeout(context.Background(), config.GlobalConfig.Grpc.Timeout)
 	defer cancel()
 
-	req := pb.AlarmRequest{AlarmType: *alarmType,
+	req := pb.AlarmRequest{AlarmType: string(o.Args.Name),
 		SerialNumber: string(o.Args.SerialNumber),
 		Status:       "on"}
 
-	err = addParameters(o.Parameters, &req)
+	err := addParameters(o.Parameters, &req)
 	if err != nil {
 		return err
 	}
 
 	res, err := client.SetAlarmIndication(ctx, &req)
-
 	if err != nil {
 		log.Fatalf("Cannot raise alarm: %v", err)
 		return err
@@ -144,23 +108,19 @@
 	return nil
 }
 
+// Execute alarm clear
 func (o *AlarmClear) Execute(args []string) error {
-	alarmType, err := alarmNameToEnum(string(o.Args.Name))
-	if err != nil {
-		return err
-	}
-
 	client, conn := connect()
 	defer conn.Close()
 
 	ctx, cancel := context.WithTimeout(context.Background(), config.GlobalConfig.Grpc.Timeout)
 	defer cancel()
 
-	req := pb.AlarmRequest{AlarmType: *alarmType,
+	req := pb.AlarmRequest{AlarmType: string(o.Args.Name),
 		SerialNumber: string(o.Args.SerialNumber),
 		Status:       "off"}
 
-	err = addParameters(o.Parameters, &req)
+	err := addParameters(o.Parameters, &req)
 	if err != nil {
 		return err
 	}
@@ -176,10 +136,11 @@
 	return nil
 }
 
+// Execute alarm list
 func (o *AlarmList) Execute(args []string) error {
-	alarmNames := make([]AlarmListOutput, len(AlarmNameMap))
+	alarmNames := make([]AlarmListOutput, len(alarmsim.AlarmNameMap))
 	i := 0
-	for k := range AlarmNameMap {
+	for k := range alarmsim.AlarmNameMap {
 		alarmNames[i] = AlarmListOutput{Name: k}
 		i++
 	}
@@ -191,7 +152,7 @@
 
 func (onuSn *AlarmNameString) Complete(match string) []flags.Completion {
 	list := make([]flags.Completion, 0)
-	for k := range AlarmNameMap {
+	for k := range alarmsim.AlarmNameMap {
 		if strings.HasPrefix(k, match) {
 			list = append(list, flags.Completion{Item: k})
 		}