public void QueryAll()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                        select s;

            var sensors = query.ToList();

            Assert.AreEqual(8, sensors.Count);
        }
        public void QueryCountDifferentTimeSeries()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                        select s;

            var sensors = query.LongCount();

            Assert.AreEqual(8, sensors);
        }
        public void QueryTakeSkip()
        {
            var query = (from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                         select s).Take(2).Skip(3);

            var sensors = query.ToList();

            Assert.AreEqual(1 + 1, sensors.Count);
        }
        public void QueryWhereNothing()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                            where s.SensorId == "id-nothing"
                        select s;

            var sensors = query.ToList();

            Assert.AreEqual(0, sensors.Count);
        }
        public void QueryTimeGreaterEqual()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                            where s.Timestamp >= new DateTime(2020, 11, 16, 8, 20, 15, DateTimeKind.Utc)
                        select s;

            var sensors = query.ToList();

            Assert.AreEqual(4, sensors.Count);
        }
        public void QueryOr()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                            where s.Value >= 28 || s.Value <= 12
                        select s;

            var sensors = query.ToList();

            Assert.AreEqual(6, sensors.Count);
        }
Пример #7
0
        public void ResultOperatorNotSupported()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _queryApi)
                        select s;

            var nse = Assert.Throws <NotSupportedException>(() =>
                                                            BuildQueryVisitor(MakeExpression(query, q => q.Max())));

            Assert.AreEqual("MaxResultOperator is not supported.", nse.Message);
        }
        public void QueryCount()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                            where s.SensorId == "id-1"
                        select s;

            var sensors = query.Count();

            Assert.AreEqual(4, sensors);
        }
        public void QueryOrderBy()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                        orderby s.Value
                        select s;

            var sensors = query.ToList();

            Assert.AreEqual(12, sensors.First().Value);
            Assert.AreEqual(89, sensors.Last().Value);
        }
Пример #10
0
        public void DefaultQuery()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _queryApi)
                        select s;

            var visitor = BuildQueryVisitor(query.Expression);

            const string expected = FluxStart;

            Assert.AreEqual(expected, visitor.BuildFluxQuery());
        }
Пример #11
0
        public void ResultOperatorTake()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _queryApi)
                        select s;

            var visitor = BuildQueryVisitor(MakeExpression(query, q => q.Take(10)));

            const string expected = FluxStart + " " + "|> limit(n: p3)";

            Assert.AreEqual(expected, visitor.BuildFluxQuery());
        }
        public void QueryOrderByTime()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                        orderby s.Timestamp descending
                        select s;

            var sensors = query.ToList();

            Assert.AreEqual(new DateTime(2020, 11, 17, 8, 20, 15, DateTimeKind.Utc),
                            sensors.First().Timestamp);
            Assert.AreEqual(new DateTime(2020, 10, 15, 8, 20, 15, DateTimeKind.Utc),
                            sensors.Last().Timestamp);
        }
        public void QueryExampleCount()
        {
            var query = (from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                         where s.SensorId == "id-1"
                         where s.Value > 12
                         where s.Timestamp > new DateTime(2019, 11, 16, 8, 20, 15, DateTimeKind.Utc)
                         where s.Timestamp < new DateTime(2021, 01, 10, 5, 10, 0, DateTimeKind.Utc)
                         orderby s.Timestamp
                         select s)
                        .Count();

            Assert.AreEqual(3, query);
        }
        public void QueryWhereNotEqual()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                            where s.SensorId != "id-1"
                        select s;

            var sensors = query.ToList();

            Assert.AreEqual(4, sensors.Count);
            foreach (var sensor in sensors)
            {
                Assert.AreEqual("id-2", sensor.SensorId);
            }
        }
        public void QueryLessThanOrEqual()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                            where s.Value <= 28
                        select s;

            var sensors = query.ToList();

            Assert.AreEqual(6, sensors.Count);
            foreach (var sensor in sensors)
            {
                Assert.LessOrEqual(sensor.Value, 28);
            }
        }
        public void QueryAnd()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                            where s.Value >= 28 && s.SensorId != "id-1"
                        select s;

            var sensors = query.ToList();

            Assert.AreEqual(2, sensors.Count);
            foreach (var sensor in sensors)
            {
                Assert.GreaterOrEqual(sensor.Value, 28);
            }
        }
        public void QueryTimeEqual()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _client.GetQueryApiSync())
                            where s.Timestamp == new DateTime(2020, 10, 15, 8, 20, 15, DateTimeKind.Utc)
                        select s;

            var sensors = query.ToList();

            Assert.AreEqual(2, sensors.Count);
            foreach (var sensor in sensors)
            {
                Assert.GreaterOrEqual(sensor.Value, 15);
            }
        }
Пример #18
0
        public void DefaultAst()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _queryApi)
                        select s;

            var visitor = BuildQueryVisitor(query.Expression);

            var ast = visitor.BuildFluxAST();

            Assert.NotNull(ast);
            Assert.NotNull(ast.Body);
            Assert.AreEqual(2, ast.Body.Count);

            var bucketAssignment = ((OptionStatement)ast.Body[0]).Assignment as VariableAssignment;

            Assert.AreEqual("p1", bucketAssignment?.Id.Name);
            Assert.AreEqual("my-bucket", (bucketAssignment?.Init as StringLiteral)?.Value);

            var rangeAssignment = ((OptionStatement)ast.Body[1]).Assignment as VariableAssignment;

            Assert.AreEqual("p2", rangeAssignment?.Id.Name);
            Assert.AreEqual("0", (rangeAssignment?.Init as IntegerLiteral)?.Value);
        }
        public static void Main(string[] args)
        {
            const string host         = "https://us-west-2-1.aws.cloud2.influxdata.com";
            const string token        = "...";
            const string bucket       = "linq_bucket";
            const string organization = "jakub_bednar";
            var          options      = new InfluxDBClientOptions.Builder()
                                        .Url(host)
                                        .AuthenticateToken(token.ToCharArray())
                                        .Org(organization)
                                        .Bucket(bucket)
                                        .Build();

            var converter = new DomainEntityConverter();
            var client    = InfluxDBClientFactory.Create(options)
                            .EnableGzip();

            //
            // Query Data to Domain object
            //
            var queryApi = client.GetQueryApiSync(converter);

            var stopWatch = new Stopwatch();

            stopWatch.Start();

            //
            // Select Cloud
            //
            var query = from s in InfluxDBQueryable <DomainEntity> .Queryable(bucket, organization, queryApi, converter)
                        select s;

            var entities = query.ToList();

            Console.WriteLine("==== Cloud Query Results ====");
            Console.WriteLine($"> count: {entities.Count}");
            Console.WriteLine($"> first: {entities.First()}");
            Console.WriteLine($"> elapsed seconds: {stopWatch.Elapsed.TotalSeconds}");
            Console.WriteLine();

            //
            // Debug Query
            //
            Console.WriteLine("==== Debug LINQ Queryable Flux output ====");
            var influxQuery = ((InfluxDBQueryable <DomainEntity>)query).ToDebugQuery();

            Console.WriteLine("> variables:");
            foreach (var statement in influxQuery.Extern.Body)
            {
                var os    = statement as OptionStatement;
                var va    = os?.Assignment as VariableAssignment;
                var name  = va?.Id.Name;
                var value = va?.Init.GetType().GetProperty("Value")?.GetValue(va.Init, null);

                Console.WriteLine($"{name}={value}");
            }
            Console.WriteLine();
            Console.WriteLine("> query:");
            Console.WriteLine(influxQuery._Query);

            client.Dispose();
        }
Пример #20
0
        public void ResultOperatorTakeSkipMultipleTimes()
        {
            var query = from s in InfluxDBQueryable <Sensor> .Queryable("my-bucket", "my-org", _queryApi)
                        select s;

            var queries = new[]
        public static async Task Main(string[] args)
        {
            const string host         = "http://localhost:9999";
            const string token        = "my-token";
            const string bucket       = "my-bucket";
            const string organization = "my-org";
            var          options      = new InfluxDBClientOptions.Builder()
                                        .Url(host)
                                        .AuthenticateToken(token.ToCharArray())
                                        .Org(organization)
                                        .Bucket(bucket)
                                        .Build();

            var converter = new DomainEntityConverter();
            var client    = InfluxDBClientFactory.Create(options);

            //
            // Prepare data to write
            //
            var time = new DateTimeOffset(2020, 11, 15, 8, 20, 15,
                                          new TimeSpan(3, 0, 0));

            var entity1 = new DomainEntity
            {
                Timestamp  = time,
                SeriesId   = Guid.Parse("0f8fad5b-d9cb-469f-a165-70867728950e"),
                Value      = 15,
                Properties = new List <DomainEntityAttribute>
                {
                    new DomainEntityAttribute
                    {
                        Name = "height", Value = 4
                    },
                    new DomainEntityAttribute
                    {
                        Name = "width", Value = 110
                    }
                }
            };
            var entity2 = new DomainEntity
            {
                Timestamp  = time.AddHours(1),
                SeriesId   = Guid.Parse("0f8fad5b-d9cb-469f-a165-70867728950e"),
                Value      = 15,
                Properties = new List <DomainEntityAttribute>
                {
                    new DomainEntityAttribute
                    {
                        Name = "height", Value = 5
                    },
                    new DomainEntityAttribute
                    {
                        Name = "width", Value = 160
                    }
                }
            };
            var entity3 = new DomainEntity
            {
                Timestamp  = time.AddHours(2),
                SeriesId   = Guid.Parse("7c9e6679-7425-40de-944b-e07fc1f90ae7"),
                Value      = 15,
                Properties = new List <DomainEntityAttribute>
                {
                    new DomainEntityAttribute
                    {
                        Name = "height", Value = 5
                    },
                    new DomainEntityAttribute
                    {
                        Name = "width", Value = 110
                    }
                }
            };
            var entity4 = new DomainEntity
            {
                Timestamp  = time.AddHours(3),
                SeriesId   = Guid.Parse("7c9e6679-7425-40de-944b-e07fc1f90ae7"),
                Value      = 15,
                Properties = new List <DomainEntityAttribute>
                {
                    new DomainEntityAttribute
                    {
                        Name = "height", Value = 6
                    },
                    new DomainEntityAttribute
                    {
                        Name = "width", Value = 160
                    }
                }
            };

            //
            // Write data
            //
            await client.GetWriteApiAsync(converter)
            .WriteMeasurementsAsync(WritePrecision.S, entity1, entity2, entity3, entity4);

            //
            // Query Data to Domain object
            //
            var queryApi = client.GetQueryApiSync(converter);

            //
            // Select ALL
            //
            var query = from s in InfluxDBQueryable <DomainEntity> .Queryable("my-bucket", "my-org", queryApi, converter)
                        select s;

            Console.WriteLine("==== Select ALL ====");
            query.ToList().ForEach(it => Console.WriteLine(it.ToString()));

            //
            // Filter By Tag
            //
            query = from s in InfluxDBQueryable <DomainEntity> .Queryable("my-bucket", "my-org", queryApi, converter)
                        where s.SeriesId == Guid.Parse("7c9e6679-7425-40de-944b-e07fc1f90ae7")
                    select s;

            Console.WriteLine("==== Filter by Tag ====");
            query.ToList().ForEach(it => Console.WriteLine(it.ToString()));

            //
            // Use Take + Skip
            //
            query = (from s in InfluxDBQueryable <DomainEntity> .Queryable("my-bucket", "my-org", queryApi, converter)
                     select s)
                    .Take(1)
                    .Skip(1);
            Console.WriteLine("==== Use Take + Skip ====");
            query.ToList().ForEach(it => Console.WriteLine(it.ToString()));

            //
            // Use Time Range
            //
            query = from s in InfluxDBQueryable <DomainEntity> .Queryable("my-bucket", "my-org", queryApi, converter)
                        where s.Timestamp > time.AddMinutes(30) && s.Timestamp < time.AddHours(3)
                    select s;

            Console.WriteLine("==== Use Time Range ====");
            query.ToList().ForEach(it => Console.WriteLine(it.ToString()));

            //
            // Use Any
            //
            query = from s in InfluxDBQueryable <DomainEntity> .Queryable("my-bucket", "my-org", queryApi, converter)
                        where s.Properties.Any(a => a.Name == "width" && a.Value == 160)
                    select s;

            Console.WriteLine("==== Use Any ====");
            query.ToList().ForEach(it => Console.WriteLine(it.ToString()));

            //
            // Debug Query
            //
            Console.WriteLine("==== Debug LINQ Queryable Flux output ====");
            var influxQuery = ((InfluxDBQueryable <DomainEntity>)query).ToDebugQuery();

            foreach (var statement in influxQuery.Extern.Body)
            {
                var os    = statement as OptionStatement;
                var va    = os?.Assignment as VariableAssignment;
                var name  = va?.Id.Name;
                var value = va?.Init.GetType().GetProperty("Value")?.GetValue(va.Init, null);

                Console.WriteLine($"{name}={value}");
            }
            Console.WriteLine();
            Console.WriteLine(influxQuery._Query);

            client.Dispose();
        }