meclearning and port ingnored rest interface along with multicast groups

Change-Id: I3116ac96b27cf5b83b5f6f459049f789dfff4154
diff --git a/internal/pkg/controller/controller.go b/internal/pkg/controller/controller.go
index ead1182..7f5d9f1 100644
--- a/internal/pkg/controller/controller.go
+++ b/internal/pkg/controller/controller.go
@@ -562,3 +562,68 @@
 	}
 	return flows, nil
 }
+func (v *VoltController) GetAllMeterInfo() (map[string][]*of.Meter, error) {
+	logger.Info(ctx, "Entering into GetAllMeterInfo method")
+	meters := map[string][]*of.Meter{}
+	for _, device := range v.devices {
+		logger.Infow(ctx, "Inside GetAllMeterInfo method", log.Fields{"deviceId": device.ID})
+		for _, meter := range device.meters {
+			meters[device.ID] = append(meters[device.ID], meter)
+		}
+		logger.Infow(ctx, "Inside GetAllMeterInfo method", log.Fields{"meters": meters})
+	}
+	return meters, nil
+}
+
+func (v *VoltController) GetMeterInfo(cntx context.Context, id uint32) (map[string]*of.Meter, error) {
+	logger.Info(ctx, "Entering into GetMeterInfo method")
+	meters := map[string]*of.Meter{}
+	for _, device := range v.devices {
+		logger.Infow(ctx, "Inside GetMeterInfo method", log.Fields{"deviceId": device.ID})
+		meter, err := device.GetMeter(id)
+		if err != nil {
+			logger.Errorw(ctx, "Failed to fetch the meter", log.Fields{"Reason": err.Error()})
+			return nil, err
+		}
+		meters[device.ID] = meter
+		logger.Infow(ctx, "Inside GetAllMeterInfo method", log.Fields{"Meter": meters})
+	}
+	return meters, nil
+}
+
+func (v *VoltController) GetGroupList() ([]*of.Group, error) {
+	logger.Info(ctx, "Entering into GetGroupList method")
+	groups := []*of.Group{}
+	for _, device := range v.devices {
+		device.groups.Range(func(key, value interface{}) bool {
+			groupID := key.(uint32)
+			logger.Infow(ctx, "Inside GetGroupList method", log.Fields{"groupID": groupID})
+			//Obtain all groups associated with the device
+			grps, ok := device.groups.Load(groupID)
+			if !ok {
+				return true
+			}
+			grp := grps.(*of.Group)
+			groups = append(groups, grp)
+			return true
+		})
+	}
+	logger.Debugw(ctx, "Groups", log.Fields{"groups": groups})
+	return groups, nil
+}
+
+func (v *VoltController) GetGroups(cntx context.Context, id uint32) (*of.Group, error) {
+
+	logger.Info(ctx, "Entering into GetGroupList method")
+	var groups *of.Group
+	for _, device := range v.devices {
+		logger.Infow(ctx, "Inside GetGroupList method", log.Fields{"groupID": id})
+		grps, ok := device.groups.Load(id)
+		if !ok {
+			return nil, errors.New("Group not found")
+		}
+		groups = grps.(*of.Group)
+		logger.Debugw(ctx, "Groups", log.Fields{"groups": groups})
+	}
+	return groups, nil
+}