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

Change-Id: Id1f2ae30d7f0d8f4aa4516b96809cf4a1e116dd1
diff --git a/internal/pkg/core/device_handler.go b/internal/pkg/core/device_handler.go
index 39775a0..a5b131d 100644
--- a/internal/pkg/core/device_handler.go
+++ b/internal/pkg/core/device_handler.go
@@ -703,6 +703,10 @@
 		}
 	}()
 	go dh.updateLocalDevice()
+
+	if device.PmConfigs != nil {
+		dh.UpdatePmConfig(device.PmConfigs)
+	}
 	return nil
 }
 
@@ -777,13 +781,12 @@
 
 func startCollector(dh *DeviceHandler) {
 	logger.Debugf("starting-collector")
-	freq := dh.metrics.ToPmConfigs().DefaultFreq
 	for {
 		select {
 		case <-dh.stopCollector:
 			logger.Debugw("stopping-collector-for-olt", log.Fields{"deviceID:": dh.device.Id})
 			return
-		case <-time.After(time.Duration(freq) * time.Second):
+		case <-time.After(time.Duration(dh.metrics.ToPmConfigs().DefaultFreq) * time.Second):
 
 			ports := make([]*voltha.Port, len(dh.device.Ports))
 			copy(ports, dh.device.Ports)
@@ -1361,6 +1364,25 @@
 	}
 }
 
+// UpdatePmConfig updates the pm metrics.
+func (dh *DeviceHandler) UpdatePmConfig(pmConfigs *voltha.PmConfigs) {
+
+	logger.Infow("update-pm-configs", log.Fields{"device-id": dh.device.Id, "pm-configs": pmConfigs})
+
+	if pmConfigs.DefaultFreq != dh.metrics.ToPmConfigs().DefaultFreq {
+		dh.metrics.UpdateFrequency(pmConfigs.DefaultFreq)
+		logger.Debugf("frequency-updated")
+	}
+
+	if pmConfigs.Grouped == false {
+		metrics := dh.metrics.GetSubscriberMetrics()
+		for _, m := range pmConfigs.Metrics {
+			metrics[m.Name].Enabled = m.Enabled
+
+		}
+	}
+}
+
 //UpdateFlowsIncrementally updates the device flow
 func (dh *DeviceHandler) UpdateFlowsIncrementally(ctx context.Context, device *voltha.Device, flows *of.FlowChanges, groups *of.FlowGroupChanges, flowMetadata *voltha.FlowMetadata) error {
 	logger.Debugw("received-incremental-flowupdate-in-device-handler", log.Fields{"device-id": device.Id, "flows": flows, "groups": groups, "flowMetadata": flowMetadata})