forked from ebhomengo/niki
1
0
Fork 0
niki/vendor/github.com/redis/go-redis/v9/timeseries_commands.go

1681 lines
29 KiB
Go
Raw Normal View History

2024-02-18 10:42:21 +00:00
package redis
import (
"context"
"strconv"
"github.com/redis/go-redis/v9/internal/proto"
)
type TimeseriesCmdable interface {
TSAdd(ctx context.Context, key string, timestamp interface{}, value float64) *IntCmd
2024-02-18 10:42:21 +00:00
TSAddWithArgs(ctx context.Context, key string, timestamp interface{}, value float64, options *TSOptions) *IntCmd
2024-02-18 10:42:21 +00:00
TSCreate(ctx context.Context, key string) *StatusCmd
2024-02-18 10:42:21 +00:00
TSCreateWithArgs(ctx context.Context, key string, options *TSOptions) *StatusCmd
2024-02-18 10:42:21 +00:00
TSAlter(ctx context.Context, key string, options *TSAlterOptions) *StatusCmd
2024-02-18 10:42:21 +00:00
TSCreateRule(ctx context.Context, sourceKey string, destKey string, aggregator Aggregator, bucketDuration int) *StatusCmd
2024-02-18 10:42:21 +00:00
TSCreateRuleWithArgs(ctx context.Context, sourceKey string, destKey string, aggregator Aggregator, bucketDuration int, options *TSCreateRuleOptions) *StatusCmd
2024-02-18 10:42:21 +00:00
TSIncrBy(ctx context.Context, Key string, timestamp float64) *IntCmd
2024-02-18 10:42:21 +00:00
TSIncrByWithArgs(ctx context.Context, key string, timestamp float64, options *TSIncrDecrOptions) *IntCmd
2024-02-18 10:42:21 +00:00
TSDecrBy(ctx context.Context, Key string, timestamp float64) *IntCmd
2024-02-18 10:42:21 +00:00
TSDecrByWithArgs(ctx context.Context, key string, timestamp float64, options *TSIncrDecrOptions) *IntCmd
2024-02-18 10:42:21 +00:00
TSDel(ctx context.Context, Key string, fromTimestamp int, toTimestamp int) *IntCmd
2024-02-18 10:42:21 +00:00
TSDeleteRule(ctx context.Context, sourceKey string, destKey string) *StatusCmd
2024-02-18 10:42:21 +00:00
TSGet(ctx context.Context, key string) *TSTimestampValueCmd
2024-02-18 10:42:21 +00:00
TSGetWithArgs(ctx context.Context, key string, options *TSGetOptions) *TSTimestampValueCmd
2024-02-18 10:42:21 +00:00
TSInfo(ctx context.Context, key string) *MapStringInterfaceCmd
2024-02-18 10:42:21 +00:00
TSInfoWithArgs(ctx context.Context, key string, options *TSInfoOptions) *MapStringInterfaceCmd
2024-02-18 10:42:21 +00:00
TSMAdd(ctx context.Context, ktvSlices [][]interface{}) *IntSliceCmd
2024-02-18 10:42:21 +00:00
TSQueryIndex(ctx context.Context, filterExpr []string) *StringSliceCmd
2024-02-18 10:42:21 +00:00
TSRevRange(ctx context.Context, key string, fromTimestamp int, toTimestamp int) *TSTimestampValueSliceCmd
2024-02-18 10:42:21 +00:00
TSRevRangeWithArgs(ctx context.Context, key string, fromTimestamp int, toTimestamp int, options *TSRevRangeOptions) *TSTimestampValueSliceCmd
2024-02-18 10:42:21 +00:00
TSRange(ctx context.Context, key string, fromTimestamp int, toTimestamp int) *TSTimestampValueSliceCmd
2024-02-18 10:42:21 +00:00
TSRangeWithArgs(ctx context.Context, key string, fromTimestamp int, toTimestamp int, options *TSRangeOptions) *TSTimestampValueSliceCmd
2024-02-18 10:42:21 +00:00
TSMRange(ctx context.Context, fromTimestamp int, toTimestamp int, filterExpr []string) *MapStringSliceInterfaceCmd
2024-02-18 10:42:21 +00:00
TSMRangeWithArgs(ctx context.Context, fromTimestamp int, toTimestamp int, filterExpr []string, options *TSMRangeOptions) *MapStringSliceInterfaceCmd
2024-02-18 10:42:21 +00:00
TSMRevRange(ctx context.Context, fromTimestamp int, toTimestamp int, filterExpr []string) *MapStringSliceInterfaceCmd
2024-02-18 10:42:21 +00:00
TSMRevRangeWithArgs(ctx context.Context, fromTimestamp int, toTimestamp int, filterExpr []string, options *TSMRevRangeOptions) *MapStringSliceInterfaceCmd
2024-02-18 10:42:21 +00:00
TSMGet(ctx context.Context, filters []string) *MapStringSliceInterfaceCmd
2024-02-18 10:42:21 +00:00
TSMGetWithArgs(ctx context.Context, filters []string, options *TSMGetOptions) *MapStringSliceInterfaceCmd
}
type TSOptions struct {
Retention int
ChunkSize int
Encoding string
2024-02-18 10:42:21 +00:00
DuplicatePolicy string
Labels map[string]string
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
type TSIncrDecrOptions struct {
Timestamp int64
Retention int
ChunkSize int
2024-02-18 10:42:21 +00:00
Uncompressed bool
Labels map[string]string
2024-02-18 10:42:21 +00:00
}
type TSAlterOptions struct {
Retention int
ChunkSize int
2024-02-18 10:42:21 +00:00
DuplicatePolicy string
Labels map[string]string
2024-02-18 10:42:21 +00:00
}
type TSCreateRuleOptions struct {
alignTimestamp int64
}
type TSGetOptions struct {
Latest bool
}
type TSInfoOptions struct {
Debug bool
}
2024-02-18 10:42:21 +00:00
type Aggregator int
const (
Invalid = Aggregator(iota)
2024-02-18 10:42:21 +00:00
Avg
2024-02-18 10:42:21 +00:00
Sum
2024-02-18 10:42:21 +00:00
Min
2024-02-18 10:42:21 +00:00
Max
2024-02-18 10:42:21 +00:00
Range
2024-02-18 10:42:21 +00:00
Count
2024-02-18 10:42:21 +00:00
First
2024-02-18 10:42:21 +00:00
Last
2024-02-18 10:42:21 +00:00
StdP
2024-02-18 10:42:21 +00:00
StdS
2024-02-18 10:42:21 +00:00
VarP
2024-02-18 10:42:21 +00:00
VarS
2024-02-18 10:42:21 +00:00
Twa
)
func (a Aggregator) String() string {
2024-02-18 10:42:21 +00:00
switch a {
2024-02-18 10:42:21 +00:00
case Invalid:
2024-02-18 10:42:21 +00:00
return ""
2024-02-18 10:42:21 +00:00
case Avg:
2024-02-18 10:42:21 +00:00
return "AVG"
2024-02-18 10:42:21 +00:00
case Sum:
2024-02-18 10:42:21 +00:00
return "SUM"
2024-02-18 10:42:21 +00:00
case Min:
2024-02-18 10:42:21 +00:00
return "MIN"
2024-02-18 10:42:21 +00:00
case Max:
2024-02-18 10:42:21 +00:00
return "MAX"
2024-02-18 10:42:21 +00:00
case Range:
2024-02-18 10:42:21 +00:00
return "RANGE"
2024-02-18 10:42:21 +00:00
case Count:
2024-02-18 10:42:21 +00:00
return "COUNT"
2024-02-18 10:42:21 +00:00
case First:
2024-02-18 10:42:21 +00:00
return "FIRST"
2024-02-18 10:42:21 +00:00
case Last:
2024-02-18 10:42:21 +00:00
return "LAST"
2024-02-18 10:42:21 +00:00
case StdP:
2024-02-18 10:42:21 +00:00
return "STD.P"
2024-02-18 10:42:21 +00:00
case StdS:
2024-02-18 10:42:21 +00:00
return "STD.S"
2024-02-18 10:42:21 +00:00
case VarP:
2024-02-18 10:42:21 +00:00
return "VAR.P"
2024-02-18 10:42:21 +00:00
case VarS:
2024-02-18 10:42:21 +00:00
return "VAR.S"
2024-02-18 10:42:21 +00:00
case Twa:
2024-02-18 10:42:21 +00:00
return "TWA"
2024-02-18 10:42:21 +00:00
default:
2024-02-18 10:42:21 +00:00
return ""
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
type TSRangeOptions struct {
Latest bool
FilterByTS []int
FilterByValue []int
Count int
Align interface{}
Aggregator Aggregator
BucketDuration int
2024-02-18 10:42:21 +00:00
BucketTimestamp interface{}
Empty bool
2024-02-18 10:42:21 +00:00
}
type TSRevRangeOptions struct {
Latest bool
FilterByTS []int
FilterByValue []int
Count int
Align interface{}
Aggregator Aggregator
BucketDuration int
2024-02-18 10:42:21 +00:00
BucketTimestamp interface{}
Empty bool
2024-02-18 10:42:21 +00:00
}
type TSMRangeOptions struct {
Latest bool
FilterByTS []int
FilterByValue []int
WithLabels bool
SelectedLabels []interface{}
Count int
Align interface{}
Aggregator Aggregator
BucketDuration int
2024-02-18 10:42:21 +00:00
BucketTimestamp interface{}
Empty bool
GroupByLabel interface{}
Reducer interface{}
2024-02-18 10:42:21 +00:00
}
type TSMRevRangeOptions struct {
Latest bool
FilterByTS []int
FilterByValue []int
WithLabels bool
SelectedLabels []interface{}
Count int
Align interface{}
Aggregator Aggregator
BucketDuration int
2024-02-18 10:42:21 +00:00
BucketTimestamp interface{}
Empty bool
GroupByLabel interface{}
Reducer interface{}
2024-02-18 10:42:21 +00:00
}
type TSMGetOptions struct {
Latest bool
WithLabels bool
2024-02-18 10:42:21 +00:00
SelectedLabels []interface{}
}
// TSAdd - Adds one or more observations to a t-digest sketch.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.add/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSAdd(ctx context.Context, key string, timestamp interface{}, value float64) *IntCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.ADD", key, timestamp, value}
2024-02-18 10:42:21 +00:00
cmd := NewIntCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSAddWithArgs - Adds one or more observations to a t-digest sketch.
2024-02-18 10:42:21 +00:00
// This function also allows for specifying additional options such as:
2024-02-18 10:42:21 +00:00
// Retention, ChunkSize, Encoding, DuplicatePolicy and Labels.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.add/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSAddWithArgs(ctx context.Context, key string, timestamp interface{}, value float64, options *TSOptions) *IntCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.ADD", key, timestamp, value}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.Retention != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "RETENTION", options.Retention)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.ChunkSize != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "CHUNK_SIZE", options.ChunkSize)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Encoding != "" {
2024-02-18 10:42:21 +00:00
args = append(args, "ENCODING", options.Encoding)
2024-02-18 10:42:21 +00:00
}
if options.DuplicatePolicy != "" {
2024-02-18 10:42:21 +00:00
args = append(args, "DUPLICATE_POLICY", options.DuplicatePolicy)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Labels != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "LABELS")
2024-02-18 10:42:21 +00:00
for label, value := range options.Labels {
2024-02-18 10:42:21 +00:00
args = append(args, label, value)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewIntCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSCreate - Creates a new time-series key.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.create/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSCreate(ctx context.Context, key string) *StatusCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.CREATE", key}
2024-02-18 10:42:21 +00:00
cmd := NewStatusCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSCreateWithArgs - Creates a new time-series key with additional options.
2024-02-18 10:42:21 +00:00
// This function allows for specifying additional options such as:
2024-02-18 10:42:21 +00:00
// Retention, ChunkSize, Encoding, DuplicatePolicy and Labels.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.create/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSCreateWithArgs(ctx context.Context, key string, options *TSOptions) *StatusCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.CREATE", key}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.Retention != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "RETENTION", options.Retention)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.ChunkSize != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "CHUNK_SIZE", options.ChunkSize)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Encoding != "" {
2024-02-18 10:42:21 +00:00
args = append(args, "ENCODING", options.Encoding)
2024-02-18 10:42:21 +00:00
}
if options.DuplicatePolicy != "" {
2024-02-18 10:42:21 +00:00
args = append(args, "DUPLICATE_POLICY", options.DuplicatePolicy)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Labels != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "LABELS")
2024-02-18 10:42:21 +00:00
for label, value := range options.Labels {
2024-02-18 10:42:21 +00:00
args = append(args, label, value)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewStatusCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSAlter - Alters an existing time-series key with additional options.
2024-02-18 10:42:21 +00:00
// This function allows for specifying additional options such as:
2024-02-18 10:42:21 +00:00
// Retention, ChunkSize and DuplicatePolicy.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.alter/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSAlter(ctx context.Context, key string, options *TSAlterOptions) *StatusCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.ALTER", key}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.Retention != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "RETENTION", options.Retention)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.ChunkSize != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "CHUNK_SIZE", options.ChunkSize)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.DuplicatePolicy != "" {
2024-02-18 10:42:21 +00:00
args = append(args, "DUPLICATE_POLICY", options.DuplicatePolicy)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Labels != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "LABELS")
2024-02-18 10:42:21 +00:00
for label, value := range options.Labels {
2024-02-18 10:42:21 +00:00
args = append(args, label, value)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewStatusCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSCreateRule - Creates a compaction rule from sourceKey to destKey.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.createrule/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSCreateRule(ctx context.Context, sourceKey string, destKey string, aggregator Aggregator, bucketDuration int) *StatusCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.CREATERULE", sourceKey, destKey, "AGGREGATION", aggregator.String(), bucketDuration}
2024-02-18 10:42:21 +00:00
cmd := NewStatusCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSCreateRuleWithArgs - Creates a compaction rule from sourceKey to destKey with additional option.
2024-02-18 10:42:21 +00:00
// This function allows for specifying additional option such as:
2024-02-18 10:42:21 +00:00
// alignTimestamp.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.createrule/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSCreateRuleWithArgs(ctx context.Context, sourceKey string, destKey string, aggregator Aggregator, bucketDuration int, options *TSCreateRuleOptions) *StatusCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.CREATERULE", sourceKey, destKey, "AGGREGATION", aggregator.String(), bucketDuration}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.alignTimestamp != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, options.alignTimestamp)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewStatusCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSIncrBy - Increments the value of a time-series key by the specified timestamp.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.incrby/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSIncrBy(ctx context.Context, Key string, timestamp float64) *IntCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.INCRBY", Key, timestamp}
2024-02-18 10:42:21 +00:00
cmd := NewIntCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSIncrByWithArgs - Increments the value of a time-series key by the specified timestamp with additional options.
2024-02-18 10:42:21 +00:00
// This function allows for specifying additional options such as:
2024-02-18 10:42:21 +00:00
// Timestamp, Retention, ChunkSize, Uncompressed and Labels.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.incrby/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSIncrByWithArgs(ctx context.Context, key string, timestamp float64, options *TSIncrDecrOptions) *IntCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.INCRBY", key, timestamp}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.Timestamp != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "TIMESTAMP", options.Timestamp)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Retention != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "RETENTION", options.Retention)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.ChunkSize != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "CHUNK_SIZE", options.ChunkSize)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Uncompressed {
2024-02-18 10:42:21 +00:00
args = append(args, "UNCOMPRESSED")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Labels != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "LABELS")
2024-02-18 10:42:21 +00:00
for label, value := range options.Labels {
2024-02-18 10:42:21 +00:00
args = append(args, label, value)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewIntCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSDecrBy - Decrements the value of a time-series key by the specified timestamp.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.decrby/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSDecrBy(ctx context.Context, Key string, timestamp float64) *IntCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.DECRBY", Key, timestamp}
2024-02-18 10:42:21 +00:00
cmd := NewIntCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSDecrByWithArgs - Decrements the value of a time-series key by the specified timestamp with additional options.
2024-02-18 10:42:21 +00:00
// This function allows for specifying additional options such as:
2024-02-18 10:42:21 +00:00
// Timestamp, Retention, ChunkSize, Uncompressed and Labels.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.decrby/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSDecrByWithArgs(ctx context.Context, key string, timestamp float64, options *TSIncrDecrOptions) *IntCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.DECRBY", key, timestamp}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.Timestamp != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "TIMESTAMP", options.Timestamp)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Retention != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "RETENTION", options.Retention)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.ChunkSize != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "CHUNK_SIZE", options.ChunkSize)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Uncompressed {
2024-02-18 10:42:21 +00:00
args = append(args, "UNCOMPRESSED")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Labels != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "LABELS")
2024-02-18 10:42:21 +00:00
for label, value := range options.Labels {
2024-02-18 10:42:21 +00:00
args = append(args, label, value)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewIntCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSDel - Deletes a range of samples from a time-series key.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.del/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSDel(ctx context.Context, Key string, fromTimestamp int, toTimestamp int) *IntCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.DEL", Key, fromTimestamp, toTimestamp}
2024-02-18 10:42:21 +00:00
cmd := NewIntCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSDeleteRule - Deletes a compaction rule from sourceKey to destKey.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.deleterule/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSDeleteRule(ctx context.Context, sourceKey string, destKey string) *StatusCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.DELETERULE", sourceKey, destKey}
2024-02-18 10:42:21 +00:00
cmd := NewStatusCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSGetWithArgs - Gets the last sample of a time-series key with additional option.
2024-02-18 10:42:21 +00:00
// This function allows for specifying additional option such as:
2024-02-18 10:42:21 +00:00
// Latest.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.get/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSGetWithArgs(ctx context.Context, key string, options *TSGetOptions) *TSTimestampValueCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.GET", key}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.Latest {
2024-02-18 10:42:21 +00:00
args = append(args, "LATEST")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := newTSTimestampValueCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSGet - Gets the last sample of a time-series key.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.get/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSGet(ctx context.Context, key string) *TSTimestampValueCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.GET", key}
2024-02-18 10:42:21 +00:00
cmd := newTSTimestampValueCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
type TSTimestampValue struct {
Timestamp int64
Value float64
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
type TSTimestampValueCmd struct {
baseCmd
2024-02-18 10:42:21 +00:00
val TSTimestampValue
}
func newTSTimestampValueCmd(ctx context.Context, args ...interface{}) *TSTimestampValueCmd {
2024-02-18 10:42:21 +00:00
return &TSTimestampValueCmd{
2024-02-18 10:42:21 +00:00
baseCmd: baseCmd{
ctx: ctx,
2024-02-18 10:42:21 +00:00
args: args,
},
}
2024-02-18 10:42:21 +00:00
}
func (cmd *TSTimestampValueCmd) String() string {
2024-02-18 10:42:21 +00:00
return cmdString(cmd, cmd.val)
2024-02-18 10:42:21 +00:00
}
func (cmd *TSTimestampValueCmd) SetVal(val TSTimestampValue) {
2024-02-18 10:42:21 +00:00
cmd.val = val
2024-02-18 10:42:21 +00:00
}
func (cmd *TSTimestampValueCmd) Result() (TSTimestampValue, error) {
2024-02-18 10:42:21 +00:00
return cmd.val, cmd.err
2024-02-18 10:42:21 +00:00
}
func (cmd *TSTimestampValueCmd) Val() TSTimestampValue {
2024-02-18 10:42:21 +00:00
return cmd.val
2024-02-18 10:42:21 +00:00
}
func (cmd *TSTimestampValueCmd) readReply(rd *proto.Reader) (err error) {
2024-02-18 10:42:21 +00:00
n, err := rd.ReadMapLen()
2024-02-18 10:42:21 +00:00
if err != nil {
2024-02-18 10:42:21 +00:00
return err
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd.val = TSTimestampValue{}
2024-02-18 10:42:21 +00:00
for i := 0; i < n; i++ {
2024-02-18 10:42:21 +00:00
timestamp, err := rd.ReadInt()
2024-02-18 10:42:21 +00:00
if err != nil {
2024-02-18 10:42:21 +00:00
return err
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
value, err := rd.ReadString()
2024-02-18 10:42:21 +00:00
if err != nil {
2024-02-18 10:42:21 +00:00
return err
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd.val.Timestamp = timestamp
2024-02-18 10:42:21 +00:00
cmd.val.Value, err = strconv.ParseFloat(value, 64)
2024-02-18 10:42:21 +00:00
if err != nil {
2024-02-18 10:42:21 +00:00
return err
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
return nil
2024-02-18 10:42:21 +00:00
}
// TSInfo - Returns information about a time-series key.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.info/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSInfo(ctx context.Context, key string) *MapStringInterfaceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.INFO", key}
2024-02-18 10:42:21 +00:00
cmd := NewMapStringInterfaceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSInfoWithArgs - Returns information about a time-series key with additional option.
2024-02-18 10:42:21 +00:00
// This function allows for specifying additional option such as:
2024-02-18 10:42:21 +00:00
// Debug.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.info/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSInfoWithArgs(ctx context.Context, key string, options *TSInfoOptions) *MapStringInterfaceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.INFO", key}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.Debug {
2024-02-18 10:42:21 +00:00
args = append(args, "DEBUG")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewMapStringInterfaceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSMAdd - Adds multiple samples to multiple time-series keys.
2024-02-18 10:42:21 +00:00
// It accepts a slice of 'ktv' slices, each containing exactly three elements: key, timestamp, and value.
2024-02-18 10:42:21 +00:00
// This struct must be provided for this command to work.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.madd/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSMAdd(ctx context.Context, ktvSlices [][]interface{}) *IntSliceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.MADD"}
2024-02-18 10:42:21 +00:00
for _, ktv := range ktvSlices {
2024-02-18 10:42:21 +00:00
args = append(args, ktv...)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewIntSliceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSQueryIndex - Returns all the keys matching the filter expression.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.queryindex/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSQueryIndex(ctx context.Context, filterExpr []string) *StringSliceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.QUERYINDEX"}
2024-02-18 10:42:21 +00:00
for _, f := range filterExpr {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewStringSliceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSRevRange - Returns a range of samples from a time-series key in reverse order.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.revrange/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSRevRange(ctx context.Context, key string, fromTimestamp int, toTimestamp int) *TSTimestampValueSliceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.REVRANGE", key, fromTimestamp, toTimestamp}
2024-02-18 10:42:21 +00:00
cmd := newTSTimestampValueSliceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSRevRangeWithArgs - Returns a range of samples from a time-series key in reverse order with additional options.
2024-02-18 10:42:21 +00:00
// This function allows for specifying additional options such as:
2024-02-18 10:42:21 +00:00
// Latest, FilterByTS, FilterByValue, Count, Align, Aggregator,
2024-02-18 10:42:21 +00:00
// BucketDuration, BucketTimestamp and Empty.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.revrange/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSRevRangeWithArgs(ctx context.Context, key string, fromTimestamp int, toTimestamp int, options *TSRevRangeOptions) *TSTimestampValueSliceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.REVRANGE", key, fromTimestamp, toTimestamp}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.Latest {
2024-02-18 10:42:21 +00:00
args = append(args, "LATEST")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.FilterByTS != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "FILTER_BY_TS")
2024-02-18 10:42:21 +00:00
for _, f := range options.FilterByTS {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.FilterByValue != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "FILTER_BY_VALUE")
2024-02-18 10:42:21 +00:00
for _, f := range options.FilterByValue {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Count != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "COUNT", options.Count)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Align != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "ALIGN", options.Align)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Aggregator != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "AGGREGATION", options.Aggregator.String())
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.BucketDuration != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, options.BucketDuration)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.BucketTimestamp != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "BUCKETTIMESTAMP", options.BucketTimestamp)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Empty {
2024-02-18 10:42:21 +00:00
args = append(args, "EMPTY")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := newTSTimestampValueSliceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSRange - Returns a range of samples from a time-series key.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.range/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSRange(ctx context.Context, key string, fromTimestamp int, toTimestamp int) *TSTimestampValueSliceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.RANGE", key, fromTimestamp, toTimestamp}
2024-02-18 10:42:21 +00:00
cmd := newTSTimestampValueSliceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSRangeWithArgs - Returns a range of samples from a time-series key with additional options.
2024-02-18 10:42:21 +00:00
// This function allows for specifying additional options such as:
2024-02-18 10:42:21 +00:00
// Latest, FilterByTS, FilterByValue, Count, Align, Aggregator,
2024-02-18 10:42:21 +00:00
// BucketDuration, BucketTimestamp and Empty.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.range/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSRangeWithArgs(ctx context.Context, key string, fromTimestamp int, toTimestamp int, options *TSRangeOptions) *TSTimestampValueSliceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.RANGE", key, fromTimestamp, toTimestamp}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.Latest {
2024-02-18 10:42:21 +00:00
args = append(args, "LATEST")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.FilterByTS != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "FILTER_BY_TS")
2024-02-18 10:42:21 +00:00
for _, f := range options.FilterByTS {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.FilterByValue != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "FILTER_BY_VALUE")
2024-02-18 10:42:21 +00:00
for _, f := range options.FilterByValue {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Count != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "COUNT", options.Count)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Align != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "ALIGN", options.Align)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Aggregator != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "AGGREGATION", options.Aggregator.String())
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.BucketDuration != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, options.BucketDuration)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.BucketTimestamp != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "BUCKETTIMESTAMP", options.BucketTimestamp)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Empty {
2024-02-18 10:42:21 +00:00
args = append(args, "EMPTY")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := newTSTimestampValueSliceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
type TSTimestampValueSliceCmd struct {
baseCmd
2024-02-18 10:42:21 +00:00
val []TSTimestampValue
}
func newTSTimestampValueSliceCmd(ctx context.Context, args ...interface{}) *TSTimestampValueSliceCmd {
2024-02-18 10:42:21 +00:00
return &TSTimestampValueSliceCmd{
2024-02-18 10:42:21 +00:00
baseCmd: baseCmd{
ctx: ctx,
2024-02-18 10:42:21 +00:00
args: args,
},
}
2024-02-18 10:42:21 +00:00
}
func (cmd *TSTimestampValueSliceCmd) String() string {
2024-02-18 10:42:21 +00:00
return cmdString(cmd, cmd.val)
2024-02-18 10:42:21 +00:00
}
func (cmd *TSTimestampValueSliceCmd) SetVal(val []TSTimestampValue) {
2024-02-18 10:42:21 +00:00
cmd.val = val
2024-02-18 10:42:21 +00:00
}
func (cmd *TSTimestampValueSliceCmd) Result() ([]TSTimestampValue, error) {
2024-02-18 10:42:21 +00:00
return cmd.val, cmd.err
2024-02-18 10:42:21 +00:00
}
func (cmd *TSTimestampValueSliceCmd) Val() []TSTimestampValue {
2024-02-18 10:42:21 +00:00
return cmd.val
2024-02-18 10:42:21 +00:00
}
func (cmd *TSTimestampValueSliceCmd) readReply(rd *proto.Reader) (err error) {
2024-02-18 10:42:21 +00:00
n, err := rd.ReadArrayLen()
2024-02-18 10:42:21 +00:00
if err != nil {
2024-02-18 10:42:21 +00:00
return err
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd.val = make([]TSTimestampValue, n)
2024-02-18 10:42:21 +00:00
for i := 0; i < n; i++ {
2024-02-18 10:42:21 +00:00
_, _ = rd.ReadArrayLen()
2024-02-18 10:42:21 +00:00
timestamp, err := rd.ReadInt()
2024-02-18 10:42:21 +00:00
if err != nil {
2024-02-18 10:42:21 +00:00
return err
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
value, err := rd.ReadString()
2024-02-18 10:42:21 +00:00
if err != nil {
2024-02-18 10:42:21 +00:00
return err
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd.val[i].Timestamp = timestamp
2024-02-18 10:42:21 +00:00
cmd.val[i].Value, err = strconv.ParseFloat(value, 64)
2024-02-18 10:42:21 +00:00
if err != nil {
2024-02-18 10:42:21 +00:00
return err
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
return nil
2024-02-18 10:42:21 +00:00
}
// TSMRange - Returns a range of samples from multiple time-series keys.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.mrange/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSMRange(ctx context.Context, fromTimestamp int, toTimestamp int, filterExpr []string) *MapStringSliceInterfaceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.MRANGE", fromTimestamp, toTimestamp, "FILTER"}
2024-02-18 10:42:21 +00:00
for _, f := range filterExpr {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewMapStringSliceInterfaceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSMRangeWithArgs - Returns a range of samples from multiple time-series keys with additional options.
2024-02-18 10:42:21 +00:00
// This function allows for specifying additional options such as:
2024-02-18 10:42:21 +00:00
// Latest, FilterByTS, FilterByValue, WithLabels, SelectedLabels,
2024-02-18 10:42:21 +00:00
// Count, Align, Aggregator, BucketDuration, BucketTimestamp,
2024-02-18 10:42:21 +00:00
// Empty, GroupByLabel and Reducer.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.mrange/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSMRangeWithArgs(ctx context.Context, fromTimestamp int, toTimestamp int, filterExpr []string, options *TSMRangeOptions) *MapStringSliceInterfaceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.MRANGE", fromTimestamp, toTimestamp}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.Latest {
2024-02-18 10:42:21 +00:00
args = append(args, "LATEST")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.FilterByTS != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "FILTER_BY_TS")
2024-02-18 10:42:21 +00:00
for _, f := range options.FilterByTS {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.FilterByValue != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "FILTER_BY_VALUE")
2024-02-18 10:42:21 +00:00
for _, f := range options.FilterByValue {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.WithLabels {
2024-02-18 10:42:21 +00:00
args = append(args, "WITHLABELS")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.SelectedLabels != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "SELECTED_LABELS")
2024-02-18 10:42:21 +00:00
args = append(args, options.SelectedLabels...)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Count != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "COUNT", options.Count)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Align != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "ALIGN", options.Align)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Aggregator != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "AGGREGATION", options.Aggregator.String())
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.BucketDuration != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, options.BucketDuration)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.BucketTimestamp != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "BUCKETTIMESTAMP", options.BucketTimestamp)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Empty {
2024-02-18 10:42:21 +00:00
args = append(args, "EMPTY")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
args = append(args, "FILTER")
2024-02-18 10:42:21 +00:00
for _, f := range filterExpr {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.GroupByLabel != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "GROUPBY", options.GroupByLabel)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Reducer != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "REDUCE", options.Reducer)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewMapStringSliceInterfaceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSMRevRange - Returns a range of samples from multiple time-series keys in reverse order.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.mrevrange/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSMRevRange(ctx context.Context, fromTimestamp int, toTimestamp int, filterExpr []string) *MapStringSliceInterfaceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.MREVRANGE", fromTimestamp, toTimestamp, "FILTER"}
2024-02-18 10:42:21 +00:00
for _, f := range filterExpr {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewMapStringSliceInterfaceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSMRevRangeWithArgs - Returns a range of samples from multiple time-series keys in reverse order with additional options.
2024-02-18 10:42:21 +00:00
// This function allows for specifying additional options such as:
2024-02-18 10:42:21 +00:00
// Latest, FilterByTS, FilterByValue, WithLabels, SelectedLabels,
2024-02-18 10:42:21 +00:00
// Count, Align, Aggregator, BucketDuration, BucketTimestamp,
2024-02-18 10:42:21 +00:00
// Empty, GroupByLabel and Reducer.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.mrevrange/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSMRevRangeWithArgs(ctx context.Context, fromTimestamp int, toTimestamp int, filterExpr []string, options *TSMRevRangeOptions) *MapStringSliceInterfaceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.MREVRANGE", fromTimestamp, toTimestamp}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.Latest {
2024-02-18 10:42:21 +00:00
args = append(args, "LATEST")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.FilterByTS != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "FILTER_BY_TS")
2024-02-18 10:42:21 +00:00
for _, f := range options.FilterByTS {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.FilterByValue != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "FILTER_BY_VALUE")
2024-02-18 10:42:21 +00:00
for _, f := range options.FilterByValue {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.WithLabels {
2024-02-18 10:42:21 +00:00
args = append(args, "WITHLABELS")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.SelectedLabels != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "SELECTED_LABELS")
2024-02-18 10:42:21 +00:00
args = append(args, options.SelectedLabels...)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Count != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "COUNT", options.Count)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Align != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "ALIGN", options.Align)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Aggregator != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, "AGGREGATION", options.Aggregator.String())
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.BucketDuration != 0 {
2024-02-18 10:42:21 +00:00
args = append(args, options.BucketDuration)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.BucketTimestamp != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "BUCKETTIMESTAMP", options.BucketTimestamp)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Empty {
2024-02-18 10:42:21 +00:00
args = append(args, "EMPTY")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
args = append(args, "FILTER")
2024-02-18 10:42:21 +00:00
for _, f := range filterExpr {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.GroupByLabel != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "GROUPBY", options.GroupByLabel)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.Reducer != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "REDUCE", options.Reducer)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewMapStringSliceInterfaceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSMGet - Returns the last sample of multiple time-series keys.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.mget/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSMGet(ctx context.Context, filters []string) *MapStringSliceInterfaceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.MGET", "FILTER"}
2024-02-18 10:42:21 +00:00
for _, f := range filters {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewMapStringSliceInterfaceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}
// TSMGetWithArgs - Returns the last sample of multiple time-series keys with additional options.
2024-02-18 10:42:21 +00:00
// This function allows for specifying additional options such as:
2024-02-18 10:42:21 +00:00
// Latest, WithLabels and SelectedLabels.
2024-02-18 10:42:21 +00:00
// For more information - https://redis.io/commands/ts.mget/
2024-02-18 10:42:21 +00:00
func (c cmdable) TSMGetWithArgs(ctx context.Context, filters []string, options *TSMGetOptions) *MapStringSliceInterfaceCmd {
2024-02-18 10:42:21 +00:00
args := []interface{}{"TS.MGET"}
2024-02-18 10:42:21 +00:00
if options != nil {
2024-02-18 10:42:21 +00:00
if options.Latest {
2024-02-18 10:42:21 +00:00
args = append(args, "LATEST")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.WithLabels {
2024-02-18 10:42:21 +00:00
args = append(args, "WITHLABELS")
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
if options.SelectedLabels != nil {
2024-02-18 10:42:21 +00:00
args = append(args, "SELECTED_LABELS")
2024-02-18 10:42:21 +00:00
args = append(args, options.SelectedLabels...)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
args = append(args, "FILTER")
2024-02-18 10:42:21 +00:00
for _, f := range filters {
2024-02-18 10:42:21 +00:00
args = append(args, f)
2024-02-18 10:42:21 +00:00
}
2024-02-18 10:42:21 +00:00
cmd := NewMapStringSliceInterfaceCmd(ctx, args...)
2024-02-18 10:42:21 +00:00
_ = c(ctx, cmd)
2024-02-18 10:42:21 +00:00
return cmd
2024-02-18 10:42:21 +00:00
}