[VOL-3085]Implement UpdatePmConfig api for voltha-openolt-adapter

Change-Id: Id1f2ae30d7f0d8f4aa4516b96809cf4a1e116dd1
diff --git a/internal/pkg/core/statsmanager.go b/internal/pkg/core/statsmanager.go
index 3512f89..c7bd546 100755
--- a/internal/pkg/core/statsmanager.go
+++ b/internal/pkg/core/statsmanager.go
@@ -285,32 +285,40 @@
 	mutex.Lock()
 	cm := StatMgr.Device.portStats.NorthBoundPort[nniID]
 	mutex.Unlock()
-	metricName := StatMgr.Device.metrics.GetSubscriberMetrics()
+	metricNames := StatMgr.Device.metrics.GetSubscriberMetrics()
 
-	if metricName != nil && len(metricName) > 0 {
-		for mName := range metricName {
-			switch mName {
-			case "rx_bytes":
-				nnival["RxBytes"] = float32(cm.RxBytes)
-			case "rx_packets":
-				nnival["RxPackets"] = float32(cm.RxPackets)
-			case "rx_ucast_packets":
-				nnival["RxUcastPackets"] = float32(cm.RxUcastPackets)
-			case "rx_mcast_packets":
-				nnival["RxMcastPackets"] = float32(cm.RxMcastPackets)
-			case "rx_bcast_packets":
-				nnival["RxBcastPackets"] = float32(cm.RxBcastPackets)
-			case "tx_bytes":
-				nnival["TxBytes"] = float32(cm.TxBytes)
-			case "tx_packets":
-				nnival["TxPackets"] = float32(cm.TxPackets)
-			case "tx_mcast_packets":
-				nnival["TxMcastPackets"] = float32(cm.TxMcastPackets)
-			case "tx_bcast_packets":
-				nnival["TxBcastPackets"] = float32(cm.TxBcastPackets)
+	var metrics []string
+
+	if metricNames != nil && len(metricNames) > 0 {
+		for metric := range metricNames {
+			if metricNames[metric].Enabled {
+				metrics = append(metrics, metric)
 			}
 		}
 	}
+
+	for _, mName := range metrics {
+		switch mName {
+		case "rx_bytes":
+			nnival["RxBytes"] = float32(cm.RxBytes)
+		case "rx_packets":
+			nnival["RxPackets"] = float32(cm.RxPackets)
+		case "rx_ucast_packets":
+			nnival["RxUcastPackets"] = float32(cm.RxUcastPackets)
+		case "rx_mcast_packets":
+			nnival["RxMcastPackets"] = float32(cm.RxMcastPackets)
+		case "rx_bcast_packets":
+			nnival["RxBcastPackets"] = float32(cm.RxBcastPackets)
+		case "tx_bytes":
+			nnival["TxBytes"] = float32(cm.TxBytes)
+		case "tx_packets":
+			nnival["TxPackets"] = float32(cm.TxPackets)
+		case "tx_mcast_packets":
+			nnival["TxMcastPackets"] = float32(cm.TxMcastPackets)
+		case "tx_bcast_packets":
+			nnival["TxBcastPackets"] = float32(cm.TxBcastPackets)
+		}
+	}
 	return nnival
 }
 
@@ -321,39 +329,41 @@
 	mutex.Lock()
 	cm := StatMgr.Device.portStats.SouthBoundPort[pID]
 	mutex.Unlock()
-	metricName := StatMgr.Device.metrics.GetSubscriberMetrics()
+	metricNames := StatMgr.Device.metrics.GetSubscriberMetrics()
 
-	if metricName != nil && len(metricName) > 0 {
-		for mName := range metricName {
-			switch mName {
-			case "rx_bytes":
-				ponval["RxBytes"] = float32(cm.RxBytes)
-			case "rx_packets":
-				ponval["RxPackets"] = float32(cm.RxPackets)
-			// these are not supported in OpenOlt Agent now
-			// will return zero until supported
-			case "rx_ucast_packets":
-				ponval["RxUcastPackets"] = float32(cm.RxUcastPackets)
-			case "rx_mcast_packets":
-				ponval["RxMcastPackets"] = float32(cm.RxMcastPackets)
-			case "rx_bcast_packets":
-				ponval["RxBcastPackets"] = float32(cm.RxBcastPackets)
-			// End will return zero until supported
-			case "tx_bytes":
-				ponval["TxBytes"] = float32(cm.TxBytes)
-			case "tx_packets":
-				ponval["TxPackets"] = float32(cm.TxPackets)
-			// these are not supported in OpenOlt Agent now
-			// will return zero until supported
-			case "tx_ucast_packets":
-				ponval["TxUcastPackets"] = float32(cm.TxUcastPackets)
-			case "tx_mcast_packets":
-				ponval["TxMcastPackets"] = float32(cm.TxMcastPackets)
-			case "tx_bcast_packets":
-				ponval["TxBcastPackets"] = float32(cm.TxBcastPackets)
+	var metrics []string
+
+	if metricNames != nil && len(metricNames) > 0 {
+		for metric := range metricNames {
+			if metricNames[metric].Enabled {
+				metrics = append(metrics, metric)
 			}
 		}
 	}
+
+	for _, mName := range metrics {
+		switch mName {
+		case "rx_bytes":
+			ponval["RxBytes"] = float32(cm.RxBytes)
+		case "rx_packets":
+			ponval["RxPackets"] = float32(cm.RxPackets)
+		case "rx_ucast_packets":
+			ponval["RxUcastPackets"] = float32(cm.RxUcastPackets)
+		case "rx_mcast_packets":
+			ponval["RxMcastPackets"] = float32(cm.RxMcastPackets)
+		case "rx_bcast_packets":
+			ponval["RxBcastPackets"] = float32(cm.RxBcastPackets)
+		case "tx_bytes":
+			ponval["TxBytes"] = float32(cm.TxBytes)
+		case "tx_packets":
+			ponval["TxPackets"] = float32(cm.TxPackets)
+		case "tx_mcast_packets":
+			ponval["TxMcastPackets"] = float32(cm.TxMcastPackets)
+		case "tx_bcast_packets":
+			ponval["TxBcastPackets"] = float32(cm.TxBcastPackets)
+		}
+	}
+
 	return ponval
 }