From ed8ac2a31703f0ee4417267a83c8fc8ae52e666c Mon Sep 17 00:00:00 2001 From: DanB Date: Wed, 16 Oct 2024 20:09:24 +0200 Subject: [PATCH] Adding rankingSorter interface --- engine/librankings.go | 39 +++++++++++++++++++++++++++++++++++++++ utils/consts.go | 2 ++ 2 files changed, 41 insertions(+) diff --git a/engine/librankings.go b/engine/librankings.go index a82fce0a1..b32e137e9 100644 --- a/engine/librankings.go +++ b/engine/librankings.go @@ -96,3 +96,42 @@ type Ranking struct { metricIDs utils.StringSet // convert the metricIDs here for faster matching } + +type rankingSorter interface { + sortStatIDs() []string // sortStatIDs returns the sorted list of statIDs +} + +// rankingSortStats will return the list of sorted statIDs out of the sortingData map +func rankingSortStats(sortingType string, sortingParams []string, statMetrics map[string]map[string]float64) (sortedStatIDs []string, err error) { + var rnkSrtr rankingSorter + if rnkSrtr, err = newRankingSorter(sortingType, sortingParams, statMetrics); err != nil { + return + } + return rnkSrtr.sortStatIDs(), nil +} + +// newRankingSorter is the constructor for various ranking sorters +// +// returns error if the sortingType is not implemented +func newRankingSorter(sortingType string, sortingParams []string, + statMetrics map[string]map[string]float64) (rkStr rankingSorter, err error) { + switch sortingType { + default: + err = utils.ErrPrefixNotErrNotImplemented(sortingType) + return + case utils.MetaDescending: + return &rankingDescSorter{sortingParams, statMetrics}, nil + + } + return +} + +// rankingDescSorter will sort data descendently for metrics in sortingParams or randomly if all equal +type rankingDescSorter struct { + sortingParams []string + statMetrics map[string]map[string]float64 +} + +func (rkDsrtr *rankingDescSorter) sortStatIDs() (statIDs []string) { + return +} diff --git a/utils/consts.go b/utils/consts.go index 73aea3edf..db71e8be1 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -1017,6 +1017,8 @@ const ( MetaSessionsBackup = "*sessions_backup" MetaLoadIDs = "*load_ids" MetaNodeID = "*node_id" + MetaAscending = "*ascending" + MetaDescending = "*descending" ) // MetaMetrics