AdysTech.InfluxDB.Client.Net.InfluxDBClient.PostPointsAsync C# (CSharp) Метод

PostPointsAsync() публичный Метод

Posts series of InfluxDataPoints to given measurement, in batches of 255
When Influx needs authentication, and no user name password is supplied or auth fails all other HTTP exceptions
public PostPointsAsync ( string dbName, IEnumerable Points ) : Task
dbName string InfluxDB database name
Points IEnumerable Collection of Influx data points to be written
Результат Task
        public async Task<bool> PostPointsAsync (string dbName, IEnumerable<IInfluxDatapoint> Points)
        {
            int maxBatchSize = 255;
            bool finalResult = true, result;
            foreach (var group in Points.GroupBy (p => new { p.Precision, p.Retention?.Name }))
            {

                var pointsGroup = group.AsEnumerable ().Select ((point, index) => new { Index = index, Point = point })//get the index of each point
                          .GroupBy (x => x.Index / maxBatchSize) //chunk into smaller batches
                          .Select (x => x.Select (v => v.Point)); //get the points
                foreach (var points in pointsGroup)
                {
                    try
                    {
                        result = await PostPointsAsync (dbName, group.Key.Precision, group.Key.Name, points);
                    }
#pragma warning disable CS0168 // The variable 'ex' is declared but never used
                    catch (Exception ex)
#pragma warning restore CS0168 // The variable 'ex' is declared but never used
                    {
                        throw;
                    }
                    finalResult = result && finalResult;
                    if (result)
                    {
                        points.ToList ().ForEach (p => p.Saved = true);
                    }
                }



            }

            return finalResult;
        }

Same methods

InfluxDBClient::PostPointsAsync ( string dbName, TimePrecision precision, string retention, IEnumerable points ) : Task

Usage Example

        public async Task TestBachingPostPointsAsync()
        {
            try
            {
                var client = new InfluxDBClient (influxUrl, dbUName, dbpwd);

                var points = new List<IInfluxDatapoint> ();

                var today = DateTime.Now.ToShortDateString ();
                var now = DateTime.Now.ToShortTimeString ();
                var start = DateTime.Now.AddDays (-5);
                var end = DateTime.Now;

                for ( int i = 0; i < 5000; i++ )
                {
                    var valDouble = new InfluxDatapoint<double> ();
                    valDouble.UtcTimestamp = DataGen.RandomDate (start, end);
                    valDouble.Tags.Add ("TestDate", today);
                    valDouble.Tags.Add ("TestTime", now);
                    valDouble.Fields.Add ("Doublefield", DataGen.RandomDouble ());
                    valDouble.Fields.Add ("Doublefield2", DataGen.RandomDouble ());
                    valDouble.MeasurementName = measurementName;
                    valDouble.Precision = (TimePrecision) ( DataGen.RandomInt () % 6 ) + 1;

                    var valInt = new InfluxDatapoint<int> ();
                    valInt.UtcTimestamp = DataGen.RandomDate (start, end);
                    valInt.Tags.Add ("TestDate", today);
                    valInt.Tags.Add ("TestTime", now);
                    valInt.Fields.Add ("Intfield", DataGen.RandomInt ());
                    valInt.Fields.Add ("Intfield2", DataGen.RandomInt ());
                    valInt.MeasurementName = measurementName;
                    valInt.Precision = (TimePrecision) ( DataGen.RandomInt () % 6 ) + 1;

                    var valBool = new InfluxDatapoint<bool> ();
                    valBool.UtcTimestamp = DataGen.RandomDate (start, end);
                    valBool.Tags.Add ("TestDate", today);
                    valBool.Tags.Add ("TestTime", now);
                    valBool.Fields.Add ("Booleanfield", DateTime.Now.Ticks % 2 == 0);
                    valBool.MeasurementName = measurementName;
                    valBool.Precision = (TimePrecision) ( DataGen.RandomInt () % 6 ) + 1;

                    var valString = new InfluxDatapoint<string> ();
                    valString.UtcTimestamp = DataGen.RandomDate (start, end);
                    valString.Tags.Add ("TestDate", today);
                    valString.Tags.Add ("TestTime", now);
                    valString.Fields.Add ("Stringfield", DataGen.RandomString ());
                    valString.MeasurementName = measurementName;
                    valString.Precision = (TimePrecision) ( DataGen.RandomInt () % 6 ) + 1;


                    points.Add (valString);
                    points.Add (valInt);
                    points.Add (valDouble);
                    points.Add (valBool);
                }

                var r = await client.PostPointsAsync (dbName, points);
                Assert.IsTrue (points.TrueForAll (p => p.Saved == true), "PostPointsAsync did not save all points");

            }
            catch ( Exception e )
            {

                Assert.Fail ("Unexpected exception of type {0} caught: {1}",
                            e.GetType (), e.Message);
                return;
            }
        }
All Usage Examples Of AdysTech.InfluxDB.Client.Net.InfluxDBClient::PostPointsAsync