61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
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}
|
|
}
|