2025-11-17 16:39:26 +08:00
|
|
|
// Package util provide some utility fun
|
|
|
|
|
package util
|
|
|
|
|
|
|
|
|
|
import (
|
2025-11-28 17:17:58 +08:00
|
|
|
"sort"
|
2025-11-17 16:39:26 +08:00
|
|
|
|
|
|
|
|
"github.com/redis/go-redis/v9"
|
|
|
|
|
)
|
|
|
|
|
|
2026-06-16 16:15:28 +08:00
|
|
|
// MapSlice define func to build a new slice by applying f to every element of s.
|
|
|
|
|
func MapSlice[T, U any](s []T, f func(T) U) []U {
|
|
|
|
|
result := make([]U, 0, len(s))
|
|
|
|
|
for _, item := range s {
|
|
|
|
|
result = append(result, f(item))
|
|
|
|
|
}
|
|
|
|
|
return result
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-17 16:39:26 +08:00
|
|
|
// ConvertZSetMembersToFloat64 define func to conver zset member type to float64
|
2025-11-28 17:17:58 +08:00
|
|
|
func ConvertZSetMembersToFloat64(members []redis.Z) []float64 {
|
|
|
|
|
// recovery time sorted in ascending order
|
|
|
|
|
sortRedisZByTimeMemberAscending(members)
|
2026-06-16 16:15:28 +08:00
|
|
|
return MapSlice(members, func(member redis.Z) float64 {
|
|
|
|
|
return member.Score
|
|
|
|
|
})
|
2025-11-17 16:39:26 +08:00
|
|
|
}
|
2025-11-28 17:17:58 +08:00
|
|
|
|
|
|
|
|
func sortRedisZByTimeMemberAscending(data []redis.Z) {
|
|
|
|
|
sort.Slice(data, func(i, j int) bool {
|
|
|
|
|
memberI := data[i].Member.(string)
|
|
|
|
|
memberJ := data[j].Member.(string)
|
|
|
|
|
return memberI < memberJ
|
|
|
|
|
})
|
|
|
|
|
}
|