Пример #1
0
        public void TestMRangeReduce()
        {
            IDatabase db = redisFixture.Redis.GetDatabase();

            foreach (var key in keys)
            {
                var label = new TimeSeriesLabel("key", "MRangeReduce");
                db.TimeSeriesCreate(key, labels: new List <TimeSeriesLabel> {
                    label
                });
            }

            var tuples  = CreateData(db, 50);
            var results = db.TimeSeriesMRange("-", "+", new List <string> {
                "key=MRangeReduce"
            }, withLabels: true, groupbyTuple: ("key", TsReduce.Sum));

            Assert.Equal(1, results.Count);
            Assert.Equal("key=MRangeReduce", results[0].key);
            Assert.Equal(new TimeSeriesLabel("key", "MRangeReduce"), results[0].labels[0]);
            Assert.Equal(new TimeSeriesLabel("__reducer__", "sum"), results[0].labels[1]);
            Assert.Equal(new TimeSeriesLabel("__source__", string.Join(",", keys)), results[0].labels[2]);
            for (int i = 0; i < results[0].values.Count; i++)
            {
                Assert.Equal(tuples[i].Val * 2, results[0].values[i].Val);
            }
        }
Пример #2
0
        public async Task TestMGetQueryWithLabels()
        {
            var keys = CreateKeyNames(2);
            var db   = redisFixture.Redis.GetDatabase();

            var label1  = new TimeSeriesLabel(keys[0], "value");
            var label2  = new TimeSeriesLabel(keys[1], "value2");
            var labels1 = new List <TimeSeriesLabel> {
                label1, label2
            };
            var labels2 = new List <TimeSeriesLabel> {
                label1
            };

            var ts1 = await db.TimeSeriesAddAsync(keys[0], "*", 1.1, labels : labels1);

            var tuple1 = new TimeSeriesTuple(ts1, 1.1);
            var ts2    = await db.TimeSeriesAddAsync(keys[1], "*", 2.2, labels : labels2);

            var tuple2 = new TimeSeriesTuple(ts2, 2.2);

            var results = await db.TimeSeriesMGetAsync(new List <string> {
                $"{keys[0]}=value"
            }, withLabels : true);

            Assert.Equal(2, results.Count);
            Assert.Equal(keys[0], results[0].key);
            Assert.Equal(tuple1, results[0].value);
            Assert.Equal(labels1, results[0].labels);
            Assert.Equal(keys[1], results[1].key);
            Assert.Equal(tuple2, results[1].value);
            Assert.Equal(labels2, results[1].labels);
        }
Пример #3
0
        public void TestMRangeGroupby()
        {
            IDatabase db = redisFixture.Redis.GetDatabase();

            for (int i = 0; i < keys.Length; i++)
            {
                var label1 = new TimeSeriesLabel("key", "MRangeGroupby");
                var label2 = new TimeSeriesLabel("group", i.ToString());
                db.TimeSeriesCreate(keys[i], labels: new List <TimeSeriesLabel> {
                    label1, label2
                });
            }

            var tuples  = CreateData(db, 50);
            var results = db.TimeSeriesMRange("-", "+", new List <string> {
                "key=MRangeGroupby"
            }, withLabels: true, groupbyTuple: ("group", TsReduce.Min));

            Assert.Equal(keys.Length, results.Count);
            for (int i = 0; i < results.Count; i++)
            {
                Assert.Equal("group=" + i, results[i].key);
                Assert.Equal(new TimeSeriesLabel("group", i.ToString()), results[i].labels[0]);
                Assert.Equal(new TimeSeriesLabel("__reducer__", "min"), results[i].labels[1]);
                Assert.Equal(new TimeSeriesLabel("__source__", keys[i]), results[i].labels[2]);
                Assert.Equal(tuples, results[i].values);
            }
        }
Пример #4
0
        public async Task TestMRangeWithLabels()
        {
            var keys   = CreateKeyNames(2);
            var db     = redisFixture.Redis.GetDatabase();
            var label  = new TimeSeriesLabel(keys[0], "value");
            var labels = new List <TimeSeriesLabel> {
                label
            };

            foreach (var key in keys)
            {
                await db.TimeSeriesCreateAsync(key, labels : labels);
            }

            var tuples = await CreateData(db, keys, 50);

            var results = await db.TimeSeriesMRangeAsync("-", "+", new List <string> {
                $"{keys[0]}=value"
            }, withLabels : true);

            Assert.Equal(keys.Length, results.Count);
            for (var i = 0; i < results.Count; i++)
            {
                Assert.Equal(keys[i], results[i].key);
                Assert.Equal(labels, results[i].labels);
                Assert.Equal(tuples, results[i].values);
            }
        }
Пример #5
0
        public void TestMGetQueryWithLabels()
        {
            IDatabase db = redisFixture.Redis.GetDatabase();

            var label1  = new TimeSeriesLabel("MGET_TESTS_1", "value");
            var label2  = new TimeSeriesLabel("MGET_TESTS_2", "value2");
            var labels1 = new List <TimeSeriesLabel> {
                label1, label2
            };
            var labels2 = new List <TimeSeriesLabel> {
                label1
            };

            TimeStamp       ts1    = db.TimeSeriesAdd(keys[0], "*", 1.1, labels: labels1);
            TimeSeriesTuple tuple1 = new TimeSeriesTuple(ts1, 1.1);
            TimeStamp       ts2    = db.TimeSeriesAdd(keys[1], "*", 2.2, labels: labels2);
            TimeSeriesTuple tuple2 = new TimeSeriesTuple(ts2, 2.2);

            var results = db.TimeSeriesMGet(new List <string> {
                "MGET_TESTS_1=value"
            }, withLabels: true);

            Assert.Equal(2, results.Count);
            Assert.Equal(keys[0], results[0].key);
            Assert.Equal(tuple1, results[0].value);
            Assert.Equal(labels1, results[0].labels);
            Assert.Equal(keys[1], results[1].key);
            Assert.Equal(tuple2, results[1].value);
            Assert.Equal(labels2, results[1].labels);
        }
        public void TestLabelConstructor()
        {
            TimeSeriesLabel label = new TimeSeriesLabel("a", "b");

            Assert.Equal("a", label.Key);
            Assert.Equal("b", label.Value);
        }
Пример #7
0
        public void TestMRangeWithLabels()
        {
            IDatabase       db     = redisFixture.Redis.GetDatabase();
            TimeSeriesLabel label  = new TimeSeriesLabel("key", "MRangeWithLabels");
            var             labels = new List <TimeSeriesLabel> {
                label
            };

            foreach (string key in keys)
            {
                db.TimeSeriesCreate(key, labels: labels);
            }

            var tuples  = CreateData(db, 50);
            var results = db.TimeSeriesMRange("-", "+", new List <string> {
                "key=MRangeWithLabels"
            }, withLabels: true);

            Assert.Equal(keys.Length, results.Count);
            for (int i = 0; i < results.Count; i++)
            {
                Assert.Equal(keys[i], results[i].key);
                Assert.Equal(labels, results[i].labels);
                Assert.Equal(tuples, results[i].values);
            }
        }
Пример #8
0
        public void TestMRangeAggregation()
        {
            IDatabase       db     = redisFixture.Redis.GetDatabase();
            TimeSeriesLabel labal  = new TimeSeriesLabel("key", "value");
            var             labels = new List <TimeSeriesLabel> {
                labal
            };

            foreach (string key in keys)
            {
                db.TimeSeriesCreate(key, labels: labels);
            }

            var tuples  = CreateData(db, 50);
            var results = db.TimeSeriesMRange("-", "+", new List <string> {
                "key=value"
            }, aggregation: Aggregation.MIN, timeBucket: 50);

            Assert.Equal(keys.Length, results.Count);
            for (int i = 0; i < results.Count; i++)
            {
                Assert.Equal(keys[i], results[i].key);
                Assert.Equal(0, results[i].labels.Count);
                Assert.Equal(tuples, results[i].values);
            }
        }
Пример #9
0
        public async Task TestMissingTimeBucket()
        {
            var keys   = CreateKeyNames(2);
            var db     = redisFixture.Redis.GetDatabase();
            var label  = new TimeSeriesLabel(keys[0], "value");
            var labels = new List <TimeSeriesLabel> {
                label
            };

            foreach (var key in keys)
            {
                await db.TimeSeriesCreateAsync(key, labels : labels);
            }

            var tuples = await CreateData(db, keys, 50);

            var ex = await Assert.ThrowsAsync <ArgumentException>(async() =>
            {
                await db.TimeSeriesMRangeAsync("-", "+",
                                               filter: new List <string>()
                {
                    $"key=value"
                },
                                               aggregation: TsAggregation.Avg);
            });

            Assert.Equal("RANGE Aggregation should have timeBucket value", ex.Message);
        }
Пример #10
0
        public async Task TestMRangeReduce()
        {
            var keys = CreateKeyNames(2);
            var db   = redisFixture.Redis.GetDatabase();

            foreach (var key in keys)
            {
                var label = new TimeSeriesLabel(keys[0], "value");
                await db.TimeSeriesCreateAsync(key, labels : new List <TimeSeriesLabel> {
                    label
                });
            }

            var tuples = await CreateData(db, keys, 50);

            var results = await db.TimeSeriesMRangeAsync("-", "+", new List <string> {
                $"{keys[0]}=value"
            }, withLabels : true, groupbyTuple : (keys[0], TsReduce.Sum));

            Assert.Equal(1, results.Count);
            Assert.Equal($"{keys[0]}=value", results[0].key);
            Assert.Equal(new TimeSeriesLabel(keys[0], "value"), results[0].labels[0]);
            Assert.Equal(new TimeSeriesLabel("__reducer__", "sum"), results[0].labels[1]);
            Assert.Equal(new TimeSeriesLabel("__source__", string.Join(",", keys)), results[0].labels[2]);
            for (int i = 0; i < results[0].values.Count; i++)
            {
                Assert.Equal(tuples[i].Val * 2, results[0].values[i].Val);
            }
        }
Пример #11
0
        public async Task TestMRangeGroupby()
        {
            var keys = CreateKeyNames(2);
            var db   = redisFixture.Redis.GetDatabase();

            for (int i = 0; i < keys.Length; i++)
            {
                var label1 = new TimeSeriesLabel(keys[0], "value");
                var label2 = new TimeSeriesLabel("group", i.ToString());
                await db.TimeSeriesCreateAsync(keys[i], labels : new List <TimeSeriesLabel> {
                    label1, label2
                });
            }

            var tuples = await CreateData(db, keys, 50);

            var results = await db.TimeSeriesMRangeAsync("-", "+", new List <string> {
                $"{keys[0]}=value"
            }, withLabels : true, groupbyTuple : ("group", TsReduce.Min));

            Assert.Equal(keys.Length, results.Count);
            for (int i = 0; i < results.Count; i++)
            {
                Assert.Equal("group=" + i, results[i].key);
                Assert.Equal(new TimeSeriesLabel("group", i.ToString()), results[i].labels[0]);
                Assert.Equal(new TimeSeriesLabel("__reducer__", "min"), results[i].labels[1]);
                Assert.Equal(new TimeSeriesLabel("__source__", keys[i]), results[i].labels[2]);
                Assert.Equal(tuples, results[i].values);
            }
        }
Пример #12
0
        public async Task TestTSQueryIndex()
        {
            var keys    = CreateKeyNames(2);
            var db      = redisFixture.Redis.GetDatabase();
            var label1  = new TimeSeriesLabel(keys[0], "value");
            var label2  = new TimeSeriesLabel(keys[1], "value2");
            var labels1 = new List <TimeSeriesLabel> {
                label1, label2
            };
            var labels2 = new List <TimeSeriesLabel> {
                label1
            };

            await db.TimeSeriesCreateAsync(keys[0], labels : labels1);

            await db.TimeSeriesCreateAsync(keys[1], labels : labels2);

            Assert.Equal(keys, db.TimeSeriesQueryIndex(new List <string> {
                $"{keys[0]}=value"
            }));
            Assert.Equal(new List <string> {
                keys[0]
            }, db.TimeSeriesQueryIndex(new List <string> {
                $"{keys[1]}=value2"
            }));
        }
Пример #13
0
        public void TestSimpleMRevRange()
        {
            var keys   = CreateKeyNames(2);
            var db     = redisFixture.Redis.GetDatabase();
            var label  = new TimeSeriesLabel(keys[0], "value");
            var labels = new List <TimeSeriesLabel> {
                label
            };

            foreach (var key in keys)
            {
                db.TimeSeriesCreate(key, labels: labels);
            }

            var tuples  = CreateData(db, keys, 50);
            var results = db.TimeSeriesMRevRange("-", "+", new List <string> {
                $"{keys[0]}=value"
            });

            Assert.Equal(keys.Length, results.Count);
            for (var i = 0; i < results.Count; i++)
            {
                Assert.Equal(keys[i], results[i].key);
                Assert.Equal(0, results[i].labels.Count);
                Assert.Equal(ReverseData(tuples), results[i].values);
            }
        }
        public void TestLbaelEquals()
        {
            TimeSeriesLabel label_ab = new TimeSeriesLabel("a", "b");
            TimeSeriesLabel label1   = new TimeSeriesLabel("a", "b");
            TimeSeriesLabel label2   = new TimeSeriesLabel("a", "c");
            TimeSeriesLabel label3   = new TimeSeriesLabel("c", "b");

            Assert.Equal(label_ab, label1);
            Assert.NotEqual(label_ab, label2);
            Assert.NotEqual(label_ab, label3);
        }
        public void TestLabelHashCode()
        {
            TimeSeriesLabel label_ab = new TimeSeriesLabel("a", "b");
            TimeSeriesLabel label1   = new TimeSeriesLabel("a", "b");
            TimeSeriesLabel label2   = new TimeSeriesLabel("a", "c");
            TimeSeriesLabel label3   = new TimeSeriesLabel("c", "b");

            Assert.Equal(label_ab.GetHashCode(), label1.GetHashCode());
            Assert.NotEqual(label_ab.GetHashCode(), label2.GetHashCode());
            Assert.NotEqual(label_ab.GetHashCode(), label3.GetHashCode());
        }
Пример #16
0
        /// <summary>
        /// Example for setting the last sample timestamp to system time and its value to 5, with INCRBY.
        /// The parameters retentionTime, uncompressed and labels are optional and can be set in any order when used as named argument.
        /// </summary>
        public static void ParameterizedIncrByExample()
        {
            ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
            IDatabase             db    = redis.GetDatabase();
            var label  = new TimeSeriesLabel("key", "value");
            var labels = new List <TimeSeriesLabel> {
                label
            };

            db.TimeSeriesIncrBy("my_ts", 5, timestamp: "*", retentionTime: 5000, uncompressed: true, labels: labels);
            redis.Close();
        }
Пример #17
0
        /// <summary>
        /// Example for time-series creation parameters with ADD.
        /// Named arguments are used in the same manner of TimeSeriesCreate.
        /// </summary>
        public static void ParameterizedAdd()
        {
            ConnectionMultiplexer redis     = ConnectionMultiplexer.Connect("localhost");
            IDatabase             db        = redis.GetDatabase();
            TimeStamp             timestamp = "*";
            var label  = new TimeSeriesLabel("key", "value");
            var labels = new List <TimeSeriesLabel> {
                label
            };

            db.TimeSeriesAdd("my_ts", timestamp, 0.0, retentionTime: 5000, labels: labels, uncompressed: true);
            redis.Close();
        }
Пример #18
0
        public void TestCreateLabels()
        {
            TimeSeriesLabel label  = new TimeSeriesLabel("key", "value");
            var             labels = new List <TimeSeriesLabel> {
                label
            };
            IDatabase db = redisFixture.Redis.GetDatabase();

            Assert.True(db.TimeSeriesCreate(key, labels: labels));
            TimeSeriesInformation info = db.TimeSeriesInfo(key);

            Assert.Equal(labels, info.Labels);
        }
Пример #19
0
        /// <summary>
        /// Examples for altering time-series.
        /// The parameters retentionTime, and labels are optional and can be set in any order when used as named argument.
        /// </summary>
        public static void ParameterizedAlter()
        {
            ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
            IDatabase             db    = redis.GetDatabase();
            var label  = new TimeSeriesLabel("key", "value");
            var labels = new List <TimeSeriesLabel> {
                label
            };

            db.TimeSeriesAlter("labeld_ts", labels: labels);
            db.TimeSeriesAlter("retention_time_ts", retentionTime: 5000);
            db.TimeSeriesAlter("parameterized_ts", retentionTime: 5000, labels: labels);
            redis.Close();
        }
Пример #20
0
        /// <summary>
        /// Example for time-series creation parameters with ADD.
        /// Named arguments are used in the same manner of TimeSeriesCreate
        /// </summary>
        public static async Task ParameterizedAddAsync()
        {
            ConnectionMultiplexer redis     = ConnectionMultiplexer.Connect("localhost");
            IDatabase             db        = redis.GetDatabase();
            TimeStamp             timestamp = "*";
            var label  = new TimeSeriesLabel("key", "value");
            var labels = new List <TimeSeriesLabel> {
                label
            };
            var policy = TsDuplicatePolicy.SUM;
            await db.TimeSeriesAddAsync("my_ts", timestamp, 0.0, retentionTime : 5000, labels : labels, uncompressed : true, policy : policy);

            redis.Close();
        }
Пример #21
0
        public void TestDefaultIncrByWithLabels()
        {
            double          value  = 5.5;
            TimeSeriesLabel label  = new TimeSeriesLabel("key", "value");
            IDatabase       db     = redisFixture.Redis.GetDatabase();
            var             labels = new List <TimeSeriesLabel> {
                label
            };

            Assert.True(db.TimeSeriesIncrBy(key, value, labels: labels) > 0);
            Assert.Equal(value, db.TimeSeriesGet(key).Val);
            TimeSeriesInformation info = db.TimeSeriesInfo(key);

            Assert.Equal(labels, info.Labels);
        }
Пример #22
0
        public async Task TestCreateLabels()
        {
            var key    = CreateKeyName();
            var label  = new TimeSeriesLabel("key", "value");
            var labels = new List <TimeSeriesLabel> {
                label
            };
            var db = redisFixture.Redis.GetDatabase();

            Assert.True(await db.TimeSeriesCreateAsync(key, labels: labels));

            var info = await db.TimeSeriesInfoAsync(key);

            Assert.Equal(labels, info.Labels);
        }
Пример #23
0
        public void TestAddWithLabels()
        {
            IDatabase       db     = redisFixture.Redis.GetDatabase();
            TimeStamp       now    = DateTime.Now;
            TimeSeriesLabel label  = new TimeSeriesLabel("key", "value");
            var             labels = new List <TimeSeriesLabel> {
                label
            };

            Assert.Equal(now, db.TimeSeriesAdd(key, now, 1.1, labels: labels));
            TimeSeriesInformation info = db.TimeSeriesInfo(key);

            Assert.Equal(now, info.FirstTimeStamp);
            Assert.Equal(now, info.LastTimeStap);
            Assert.Equal(labels, info.Labels);
        }
Пример #24
0
        /// <summary>
        /// Examples for creating time-series with parameters.
        /// The parameters retentionTime, uncompressed and labels are optional and can be set in any order when used as named argument.
        /// </summary>
        public static void ParameterizedCreate()
        {
            ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
            IDatabase             db    = redis.GetDatabase();

            db.TimeSeriesCreate("retentionTime_ts", retentionTime: 5000);
            db.TimeSeriesCreate("uncompressed_ts", uncompressed: true);
            var label  = new TimeSeriesLabel("key", "value");
            var labels = new List <TimeSeriesLabel> {
                label
            };

            db.TimeSeriesCreate("labeled_ts", labels: labels);
            db.TimeSeriesCreate("parameterized_ts", labels: labels, uncompressed: true, retentionTime: 5000);
            redis.Close();
        }
Пример #25
0
        public void TestMissingFilter()
        {
            IDatabase       db     = redisFixture.Redis.GetDatabase();
            TimeSeriesLabel label  = new TimeSeriesLabel("key", "MissingFilter");
            var             labels = new List <TimeSeriesLabel> {
                label
            };

            foreach (string key in keys)
            {
                db.TimeSeriesCreate(key, labels: labels);
            }

            var tuples = CreateData(db, 50);
            var ex     = Assert.Throws <ArgumentException>(() => db.TimeSeriesMRange("-", "+", new List <string>()));

            Assert.Equal("There should be at least one filter on MRANGE/MREVRANGE", ex.Message);
        }
Пример #26
0
        public async Task TestAddWithLabels()
        {
            var       key       = CreateKeyName();
            var       db        = redisFixture.Redis.GetDatabase();
            TimeStamp timeStamp = DateTime.UtcNow;
            var       label     = new TimeSeriesLabel("key", "value");
            var       labels    = new List <TimeSeriesLabel> {
                label
            };

            Assert.Equal(timeStamp, await db.TimeSeriesAddAsync(key, timeStamp, 1.1, labels: labels));

            var info = await db.TimeSeriesInfoAsync(key);

            Assert.Equal(timeStamp, info.FirstTimeStamp);
            Assert.Equal(timeStamp, info.LastTimeStamp);
            Assert.Equal(labels, info.Labels);
        }
        /// <summary>
        /// Examples for creating time-series with parameters.
        /// The parameters retentionTime, uncompressed and labels are optional and can be set in any order when used as named argument.
        /// </summary>
        public static async Task ParameterizedCreateAsync()
        {
            ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
            IDatabase             db    = redis.GetDatabase();
            await db.TimeSeriesCreateAsync("retentionTime_ts", retentionTime : 5000);

            await db.TimeSeriesCreateAsync("uncompressed_ts", uncompressed : true);

            var label  = new TimeSeriesLabel("key", "value");
            var labels = new List <TimeSeriesLabel> {
                label
            };
            await db.TimeSeriesCreateAsync("labeled_ts", labels : labels);

            await db.TimeSeriesCreateAsync("parameterized_ts", labels : labels, uncompressed : true, retentionTime : 5000, duplicatePolicy : TsDuplicatePolicy.LAST);

            redis.Close();
        }
Пример #28
0
        public void TestMRangeFilter()
        {
            IDatabase       db     = redisFixture.Redis.GetDatabase();
            TimeSeriesLabel label  = new TimeSeriesLabel("key", "MRangeFilter");
            var             labels = new List <TimeSeriesLabel> {
                label
            };

            db.TimeSeriesCreate(keys[0], labels: labels);
            var tuples  = CreateData(db, 50);
            var results = db.TimeSeriesMRange("-", "+", new List <string> {
                "key=MRangeFilter"
            });

            Assert.Equal(1, results.Count);
            Assert.Equal(keys[0], results[0].key);
            Assert.Equal(0, results[0].labels.Count);
            Assert.Equal(tuples, results[0].values);
        }
Пример #29
0
        public void TestMissingFilter()
        {
            var keys   = CreateKeyNames(2);
            var db     = redisFixture.Redis.GetDatabase();
            var label  = new TimeSeriesLabel(keys[0], "value");
            var labels = new List <TimeSeriesLabel> {
                label
            };

            foreach (var key in keys)
            {
                db.TimeSeriesCreateAsync(key, labels: labels);
            }

            var tuples = CreateData(db, keys, 50);
            var ex     = Assert.Throws <ArgumentException>(() => db.TimeSeriesMRevRange("-", "+", new List <string>()));

            Assert.Equal("There should be at least one filter on MRANGE/MREVRANGE", ex.Message);
        }
Пример #30
0
        public void TestMRevRangeFilter()
        {
            var keys   = CreateKeyNames(2);
            var db     = redisFixture.Redis.GetDatabase();
            var label  = new TimeSeriesLabel(keys[0], "value");
            var labels = new List <TimeSeriesLabel> {
                label
            };

            db.TimeSeriesCreateAsync(keys[0], labels: labels);
            var tuples  = CreateData(db, keys, 50);
            var results = db.TimeSeriesMRevRange("-", "+", new List <string> {
                $"{keys[0]}=value"
            });

            Assert.Equal(1, results.Count);
            Assert.Equal(keys[0], results[0].key);
            Assert.Equal(0, results[0].labels.Count);
            Assert.Equal(ReverseData(tuples), results[0].values);
        }