VOL-4029 Fetch ONU stats on demand
Change-Id: I7248ab65f320858e9bdf9bdf6a60a27a734b8640
diff --git a/internal/pkg/core/statsmanager.go b/internal/pkg/core/statsmanager.go
index 6fc3e53..42c60d7 100755
--- a/internal/pkg/core/statsmanager.go
+++ b/internal/pkg/core/statsmanager.go
@@ -88,6 +88,8 @@
LcdgErrors = "LcdgErrors"
//RdiErrors constant
RdiErrors = "RdiErrors"
+ //Timestamp constant
+ Timestamp = "Timestamp"
)
var mutex = &sync.Mutex{}
@@ -492,6 +494,7 @@
onuStatsVal[BerReported] = float32(onuStats.BerReported)
onuStatsVal[LcdgErrors] = float32(onuStats.LcdgErrors)
onuStatsVal[RdiErrors] = float32(onuStats.RdiErrors)
+ onuStatsVal[Timestamp] = float32(onuStats.Timestamp)
return onuStatsVal
}
@@ -506,6 +509,21 @@
}
}
+// collectOnDemandOnuStats will collect the onui-pon metrics
+func (StatMgr *OpenOltStatisticsMgr) collectOnDemandOnuStats(ctx context.Context, intfID uint32, onuID uint32) map[string]float32 {
+ onu := &openolt.Onu{IntfId: intfID, OnuId: onuID}
+ var stats *openolt.OnuStatistics
+ var err error
+ logger.Debugw(ctx, "pulling-onu-stats-on-demand", log.Fields{"IntfID": intfID, "OnuID": onuID})
+ if stats, err = StatMgr.Device.Client.GetOnuStatistics(context.Background(), onu); err == nil {
+ statValue := StatMgr.convertONUStats(stats)
+ return statValue
+
+ }
+ logger.Errorw(ctx, "error-while-getting-onu-stats-for-onu", log.Fields{"IntfID": intfID, "OnuID": onuID, "err": err})
+ return nil
+}
+
// collectOnuAndGemStats will collect both onu and gem metrics
func (StatMgr *OpenOltStatisticsMgr) collectOnuAndGemStats(ctx context.Context, onuGemInfo []rsrcMgr.OnuGemInfo) {
if !StatMgr.Device.openOLT.enableONUStats && !StatMgr.Device.openOLT.enableGemStats {
@@ -778,3 +796,89 @@
}
}
+
+func (StatMgr *OpenOltStatisticsMgr) updateGetOnuPonCountersResponse(ctx context.Context, singleValResp *extension.SingleGetValueResponse, stats map[string]float32) {
+
+ metrics := singleValResp.GetResponse().GetOnuPonCounters()
+ metrics.IsIntfId = &extension.GetOnuCountersResponse_IntfId{
+ IntfId: uint32(stats[IntfID]),
+ }
+ metrics.IsOnuId = &extension.GetOnuCountersResponse_OnuId{
+ OnuId: uint32(stats[OnuID]),
+ }
+ metrics.IsPositiveDrift = &extension.GetOnuCountersResponse_PositiveDrift{
+ PositiveDrift: uint64(stats[PositiveDrift]),
+ }
+ metrics.IsNegativeDrift = &extension.GetOnuCountersResponse_NegativeDrift{
+ NegativeDrift: uint64(stats[NegativeDrift]),
+ }
+ metrics.IsDelimiterMissDetection = &extension.GetOnuCountersResponse_DelimiterMissDetection{
+ DelimiterMissDetection: uint64(stats[DelimiterMissDetection]),
+ }
+ metrics.IsBipErrors = &extension.GetOnuCountersResponse_BipErrors{
+ BipErrors: uint64(stats[BipErrors]),
+ }
+ metrics.IsBipUnits = &extension.GetOnuCountersResponse_BipUnits{
+ BipUnits: uint64(stats[BipUnits]),
+ }
+ metrics.IsFecCorrectedSymbols = &extension.GetOnuCountersResponse_FecCorrectedSymbols{
+ FecCorrectedSymbols: uint64(stats[FecCorrectedSymbols]),
+ }
+ metrics.IsFecCodewordsCorrected = &extension.GetOnuCountersResponse_FecCodewordsCorrected{
+ FecCodewordsCorrected: uint64(stats[FecCodewordsCorrected]),
+ }
+ metrics.IsFecCodewordsUncorrectable = &extension.GetOnuCountersResponse_FecCodewordsUncorrectable{
+ FecCodewordsUncorrectable: uint64(stats[fecCodewordsUncorrectable]),
+ }
+ metrics.IsFecCodewords = &extension.GetOnuCountersResponse_FecCodewords{
+ FecCodewords: uint64(stats[FecCodewords]),
+ }
+ metrics.IsFecCorrectedUnits = &extension.GetOnuCountersResponse_FecCorrectedUnits{
+ FecCorrectedUnits: uint64(stats[FecCorrectedUnits]),
+ }
+ metrics.IsXgemKeyErrors = &extension.GetOnuCountersResponse_XgemKeyErrors{
+ XgemKeyErrors: uint64(stats[XGEMKeyErrors]),
+ }
+ metrics.IsXgemLoss = &extension.GetOnuCountersResponse_XgemLoss{
+ XgemLoss: uint64(stats[XGEMLoss]),
+ }
+ metrics.IsRxPloamsError = &extension.GetOnuCountersResponse_RxPloamsError{
+ RxPloamsError: uint64(stats[RxPloamsError]),
+ }
+ metrics.IsRxPloamsNonIdle = &extension.GetOnuCountersResponse_RxPloamsNonIdle{
+ RxPloamsNonIdle: uint64(stats[RxPloamsNonIdle]),
+ }
+ metrics.IsRxOmci = &extension.GetOnuCountersResponse_RxOmci{
+ RxOmci: uint64(stats[RxOmci]),
+ }
+ metrics.IsRxOmciPacketsCrcError = &extension.GetOnuCountersResponse_RxOmciPacketsCrcError{
+ RxOmciPacketsCrcError: uint64(stats[RxOmciPacketsCrcError]),
+ }
+ metrics.IsRxBytes = &extension.GetOnuCountersResponse_RxBytes{
+ RxBytes: uint64(stats[RxBytes]),
+ }
+ metrics.IsRxPackets = &extension.GetOnuCountersResponse_RxPackets{
+ RxPackets: uint64(stats[RxPackets]),
+ }
+ metrics.IsTxBytes = &extension.GetOnuCountersResponse_TxBytes{
+ TxBytes: uint64(stats[TxBytes]),
+ }
+ metrics.IsTxPackets = &extension.GetOnuCountersResponse_TxPackets{
+ TxPackets: uint64(stats[TxPackets]),
+ }
+ metrics.IsBerReported = &extension.GetOnuCountersResponse_BerReported{
+ BerReported: uint64(stats[BerReported]),
+ }
+ metrics.IsLcdgErrors = &extension.GetOnuCountersResponse_LcdgErrors{
+ LcdgErrors: uint64(stats[LcdgErrors]),
+ }
+ metrics.IsRdiErrors = &extension.GetOnuCountersResponse_RdiErrors{
+ RdiErrors: uint64(stats[RdiErrors]),
+ }
+ metrics.IsTimestamp = &extension.GetOnuCountersResponse_Timestamp{
+ Timestamp: uint32(stats[Timestamp]),
+ }
+
+ singleValResp.Response.Status = extension.GetValueResponse_OK
+ logger.Debugw(ctx, "updateGetOnuPonCountersResponse", log.Fields{"resp": singleValResp})
+}