snapshot of https://github.com/centrifugal/centrifugo.git (master, 2026-09-16; blobs > 131072B omitted)
This commit is contained in:
60
internal/redisqueue/xprending.go
Normal file
60
internal/redisqueue/xprending.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package redisqueue
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/redis/rueidis"
|
||||
)
|
||||
|
||||
type XPendingExt struct {
|
||||
ID string
|
||||
Consumer string
|
||||
Idle time.Duration
|
||||
RetryCount int64
|
||||
}
|
||||
|
||||
type XPendingExtCmd struct {
|
||||
Err error
|
||||
Val []XPendingExt
|
||||
}
|
||||
|
||||
func NewXPendingExtCmd(res rueidis.RedisResult) *XPendingExtCmd {
|
||||
arrs, err := res.ToArray()
|
||||
if err != nil {
|
||||
return &XPendingExtCmd{Err: err}
|
||||
}
|
||||
val := make([]XPendingExt, 0, len(arrs))
|
||||
for _, v := range arrs {
|
||||
arr, err := v.ToArray()
|
||||
if err != nil {
|
||||
return &XPendingExtCmd{Err: err}
|
||||
}
|
||||
if len(arr) < 4 {
|
||||
return &XPendingExtCmd{Err: fmt.Errorf("got %d, wanted 4", len(arr))}
|
||||
}
|
||||
id, err := arr[0].ToString()
|
||||
if err != nil {
|
||||
return &XPendingExtCmd{Err: err}
|
||||
}
|
||||
consumer, err := arr[1].ToString()
|
||||
if err != nil {
|
||||
return &XPendingExtCmd{Err: err}
|
||||
}
|
||||
idle, err := arr[2].AsInt64()
|
||||
if err != nil {
|
||||
return &XPendingExtCmd{Err: err}
|
||||
}
|
||||
retryCount, err := arr[3].AsInt64()
|
||||
if err != nil {
|
||||
return &XPendingExtCmd{Err: err}
|
||||
}
|
||||
val = append(val, XPendingExt{
|
||||
ID: id,
|
||||
Consumer: consumer,
|
||||
Idle: time.Duration(idle) * time.Millisecond,
|
||||
RetryCount: retryCount,
|
||||
})
|
||||
}
|
||||
return &XPendingExtCmd{Val: val, Err: err}
|
||||
}
|
||||
Reference in New Issue
Block a user