[VOL-5292] Implementation for fetching the GEM port history Data from the ONT
Change-Id: I4cf22555cbd13bcd5e49e620c8aa8b67cbd2891c
Signed-off-by: Akash Reddy Kankanala <akash.kankanala@radisys.com>
diff --git a/internal/pkg/pmmgr/onu_metrics_manager.go b/internal/pkg/pmmgr/onu_metrics_manager.go
index 11c6435..b60e5f3 100755
--- a/internal/pkg/pmmgr/onu_metrics_manager.go
+++ b/internal/pkg/pmmgr/onu_metrics_manager.go
@@ -4050,3 +4050,62 @@
defer mm.OnuMetricsManagerLock.Unlock()
mm.deviceDeletionInProgress = true
}
+
+// Obtain the ONU GEM counters for the ONU device
+func (mm *OnuMetricsManager) GetONUGEMCounters(ctx context.Context) *extension.SingleGetValueResponse {
+
+ resp := extension.SingleGetValueResponse{
+ Response: &extension.GetValueResponse{
+ Status: extension.GetValueResponse_OK,
+ Response: &extension.GetValueResponse_OnuAllocGemStatsResponse{
+ OnuAllocGemStatsResponse: &extension.GetOnuAllocGemHistoryResponse{},
+ },
+ },
+ }
+
+ if mm.GetdeviceDeletionInProgress() {
+ logger.Infow(ctx, "device already deleted, return", log.Fields{"curr-state": mm.PAdaptFsm.PFsm.Current, "deviceID": mm.deviceID})
+ return nil
+ }
+
+ mm.OnuMetricsManagerLock.RLock()
+ defer mm.OnuMetricsManagerLock.RUnlock()
+
+ gemtoAllocId := mm.pDeviceHandler.GetOnuTP().GetGEMportToAllocIDMappingForONU(ctx, mm.deviceID)
+ allocIDtoGem := make(map[uint16][]uint16)
+ for key, value := range gemtoAllocId {
+ allocIDtoGem[value] = append(allocIDtoGem[value], key)
+ }
+
+ for allocID, gemSlice := range allocIDtoGem {
+ logger.Infow(ctx, "AllocID", log.Fields{"alloc-id": allocID})
+ allocIdGemData := extension.OnuAllocGemHistoryData{
+ OnuAllocIdInfo: &extension.OnuAllocHistoryData{},
+ GemPortInfo: []*extension.OnuGemPortHistoryData{},
+ }
+ allocIdGemData.OnuAllocIdInfo.AllocId = uint32(allocID)
+
+ // Loop through each element in the slice
+ for _, gem := range gemSlice {
+ logger.Debugw(ctx, "Collecting stats for Gem: ", log.Fields{"GEMID": gem})
+ if metricInfo := mm.collectGemHistoryData(ctx, gem); metricInfo != nil {
+ logger.Infow(ctx, "Metricinfo for GEM", log.Fields{"GEMID": gem, "metricInfo": metricInfo})
+ gemHistoryData := extension.OnuGemPortHistoryData{}
+ gemHistoryData.GemId = uint32(gem)
+ gemHistoryData.TransmittedGEMFrames = uint32(metricInfo.GetMetrics()["transmitted_gem_frames"])
+ gemHistoryData.ReceivedGEMFrames = uint32(metricInfo.GetMetrics()["received_gem_frames"])
+ gemHistoryData.ReceivedPayloadBytes = uint32(metricInfo.GetMetrics()["received_payload_bytes"])
+ gemHistoryData.TransmittedPayloadBytes = uint32(metricInfo.GetMetrics()["transmitted_payload_bytes"])
+ gemHistoryData.EncryptionKeyErrors = uint32(metricInfo.GetMetrics()["encryption_key_errors"])
+ allocIdGemData.GemPortInfo = append(allocIdGemData.GemPortInfo, &gemHistoryData)
+ logger.Debugw(ctx, " allocIdGemData value ", log.Fields{"AllocIDGemData": allocIdGemData})
+
+ }
+ }
+ resp.Response.GetOnuAllocGemStatsResponse().OnuAllocGemHistoryData = append(resp.Response.GetOnuAllocGemStatsResponse().OnuAllocGemHistoryData, &allocIdGemData)
+ }
+
+ logger.Debugw(ctx, "Request to fetch GEM Performance Counters ", log.Fields{"device-id": mm.deviceID, "response": resp})
+ return &resp
+
+}