Beispiel #1
0
        public async Task WriteRecords()
        {
            Console.WriteLine("Writing records");

            DateTimeOffset now = DateTimeOffset.UtcNow;
            string         currentTimeString = (now.ToUnixTimeMilliseconds()).ToString();

            List <Dimension> dimensions = new List <Dimension> {
                new Dimension {
                    Name = "region", Value = "us-east-1"
                },
                new Dimension {
                    Name = "az", Value = "az1"
                },
                new Dimension {
                    Name = "hostname", Value = "host1"
                }
            };

            var cpuUtilization = new Record
            {
                Dimensions       = dimensions,
                MeasureName      = "cpu_utilization",
                MeasureValue     = "13.6",
                MeasureValueType = MeasureValueType.DOUBLE,
                Time             = currentTimeString
            };

            var memoryUtilization = new Record
            {
                Dimensions       = dimensions,
                MeasureName      = "memory_utilization",
                MeasureValue     = "40",
                MeasureValueType = MeasureValueType.DOUBLE,
                Time             = currentTimeString
            };


            List <Record> records = new List <Record> {
                cpuUtilization,
                memoryUtilization
            };

            try
            {
                var writeRecordsRequest = new WriteRecordsRequest
                {
                    DatabaseName = Constants.DATABASE_NAME,
                    TableName    = Constants.TABLE_NAME,
                    Records      = records
                };
                WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);

                Console.WriteLine($"Write records status code: {response.HttpStatusCode.ToString()}");
            }
            catch (Exception e)
            {
                Console.WriteLine("Write records failure:" + e.ToString());
            }
        }
        private async Task write100(List <Record> records)
        {
            var writeRecordsRequest = new WriteRecordsRequest
            {
                DatabaseName = Constants.DATABASE_NAME,
                TableName    = Constants.TABLE_NAME,
                Records      = records
            };
            WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);

            Console.WriteLine($"Write records status code: {response.HttpStatusCode.ToString()}");
        }
Beispiel #3
0
        private async Task SubmitBatchAsync(List <Record> records, int counter)
        {
            try
            {
                var writeRecordsRequest = new WriteRecordsRequest
                {
                    DatabaseName = Constants.DATABASE_NAME,
                    TableName    = Constants.TABLE_NAME,
                    Records      = records
                };
                WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);

                Console.WriteLine($"Processed {counter} records. Write records status code:{response.HttpStatusCode.ToString()}");
            }
            catch (Exception e)
            {
                Console.WriteLine("Write records failure:" + e.ToString());
            }
        }
        public async Task WriteRecordsWithUpsert()
        {
            Console.WriteLine("Writing records with upsert");

            DateTimeOffset now = DateTimeOffset.UtcNow;
            string         currentTimeString = (now.ToUnixTimeMilliseconds()).ToString();
            // To achieve upsert (last writer wins) semantic, one example is to use current time as the version if you are writing directly from the data source
            long version = now.ToUnixTimeMilliseconds();

            List <Dimension> dimensions = new List <Dimension> {
                new Dimension {
                    Name = "region", Value = "us-east-1"
                },
                new Dimension {
                    Name = "az", Value = "az1"
                },
                new Dimension {
                    Name = "hostname", Value = "host1"
                }
            };

            var commonAttributes = new Record
            {
                Dimensions       = dimensions,
                MeasureValueType = MeasureValueType.MULTI,
                Time             = currentTimeString,
                Version          = version
            };


            var cpuUtilization = new Record
            {
                MeasureName   = "cpu_utilization",
                MeasureValues = new List <MeasureValue> {
                    new MeasureValue {
                        Name  = "cpu1",
                        Value = "13.5",
                        Type  = "DOUBLE",
                    }
                },
            };

            var memoryUtilization = new Record
            {
                MeasureName   = "memory_utilization",
                MeasureValues = new List <MeasureValue> {
                    new MeasureValue {
                        Name  = "memory1",
                        Value = "40",
                        Type  = "DOUBLE",
                    }
                }
            };


            List <Record> records = new List <Record>();

            records.Add(cpuUtilization);
            records.Add(memoryUtilization);

            // write records for first time
            try
            {
                var writeRecordsRequest = new WriteRecordsRequest
                {
                    DatabaseName     = Constants.DATABASE_NAME,
                    TableName        = Constants.TABLE_NAME,
                    Records          = records,
                    CommonAttributes = commonAttributes
                };
                WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);

                Console.WriteLine($"WriteRecords Status for first time: {response.HttpStatusCode.ToString()}");
            }
            catch (RejectedRecordsException e) {
                PrintRejectedRecordsException(e);
            }
            catch (Exception e)
            {
                Console.WriteLine("Write records failure:" + e.ToString());
            }

            // Successfully retry same writeRecordsRequest with same records and versions, because writeRecords API is idempotent.
            try
            {
                var writeRecordsRequest = new WriteRecordsRequest
                {
                    DatabaseName     = Constants.DATABASE_NAME,
                    TableName        = Constants.TABLE_NAME,
                    Records          = records,
                    CommonAttributes = commonAttributes
                };
                WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);

                Console.WriteLine($"WriteRecords Status for retry: {response.HttpStatusCode.ToString()}");
            }
            catch (RejectedRecordsException e) {
                PrintRejectedRecordsException(e);
            }
            catch (Exception e)
            {
                Console.WriteLine("Write records failure:" + e.ToString());
            }

            // upsert with lower version, this would fail because a higher version is required to update the measure value.
            version--;
            var cpuUtilizationUpsert = new Record
            {
                MeasureName   = "cpu_utilization",
                MeasureValues = new List <MeasureValue> {
                    new MeasureValue {
                        Name  = "cpu1",
                        Value = "13.5",
                        Type  = "DOUBLE",
                    }
                },
            };
            var memoryUtilizationUpsert = new Record
            {
                MeasureName   = "memory_utilization",
                MeasureValues = new List <MeasureValue> {
                    new MeasureValue {
                        Name  = "memory1",
                        Value = "40",
                        Type  = "DOUBLE",
                    }
                },
            };
            Type recordType = typeof(Record);

            recordType.GetProperty("Version").SetValue(commonAttributes, version);

            List <Record> upsertedRecords = new List <Record> {
                cpuUtilizationUpsert,
                memoryUtilizationUpsert
            };

            try
            {
                var writeRecordsUpsertRequest = new WriteRecordsRequest
                {
                    DatabaseName     = Constants.DATABASE_NAME,
                    TableName        = Constants.TABLE_NAME,
                    Records          = upsertedRecords,
                    CommonAttributes = commonAttributes
                };
                WriteRecordsResponse upsertResponse = await writeClient.WriteRecordsAsync(writeRecordsUpsertRequest);

                Console.WriteLine($"WriteRecords Status for upsert with lower version: {upsertResponse.HttpStatusCode.ToString()}");
            }
            catch (RejectedRecordsException e) {
                PrintRejectedRecordsException(e);
            }
            catch (Exception e)
            {
                Console.WriteLine("Write records failure:" + e.ToString());
            }

            // upsert with higher version as new data in generated
            now     = DateTimeOffset.UtcNow;
            version = now.ToUnixTimeMilliseconds();
            recordType.GetProperty("Version").SetValue(commonAttributes, version);

            try
            {
                var writeRecordsUpsertRequest = new WriteRecordsRequest
                {
                    DatabaseName     = Constants.DATABASE_NAME,
                    TableName        = Constants.TABLE_NAME,
                    Records          = upsertedRecords,
                    CommonAttributes = commonAttributes
                };
                WriteRecordsResponse upsertResponse = await writeClient.WriteRecordsAsync(writeRecordsUpsertRequest);

                Console.WriteLine($"WriteRecords Status for upsert with higher version:  {upsertResponse.HttpStatusCode.ToString()}");
            }
            catch (RejectedRecordsException e) {
                PrintRejectedRecordsException(e);
            }
            catch (Exception e)
            {
                Console.WriteLine("Write records failure:" + e.ToString());
            }
        }
        public async Task WriteRecordsWithCommonAttributes()
        {
            Console.WriteLine("Writing records with common attributes");

            DateTimeOffset now = DateTimeOffset.UtcNow;
            string         currentTimeString = (now.ToUnixTimeMilliseconds()).ToString();

            List <Dimension> dimensions = new List <Dimension> {
                new Dimension {
                    Name = "region", Value = "us-east-1"
                },
                new Dimension {
                    Name = "az", Value = "az1"
                },
                new Dimension {
                    Name = "hostname", Value = "host1"
                }
            };

            var commonAttributes = new Record
            {
                Dimensions       = dimensions,
                MeasureValueType = MeasureValueType.MULTI,
                Time             = currentTimeString
            };

            var cpuUtilization = new Record
            {
                MeasureName   = "cpu_utilization",
                MeasureValues = new List <MeasureValue> {
                    new MeasureValue {
                        Name  = "cpu1",
                        Value = "13.5",
                        Type  = "DOUBLE",
                    }
                },
            };

            var memoryUtilization = new Record
            {
                MeasureName   = "memory_utilization",
                MeasureValues = new List <MeasureValue> {
                    new MeasureValue {
                        Name  = "memory1",
                        Value = "40",
                        Type  = "DOUBLE",
                    }
                }
            };


            List <Record> records = new List <Record>();

            records.Add(cpuUtilization);
            records.Add(memoryUtilization);

            try
            {
                var writeRecordsRequest = new WriteRecordsRequest
                {
                    DatabaseName     = Constants.DATABASE_NAME,
                    TableName        = Constants.TABLE_NAME,
                    Records          = records,
                    CommonAttributes = commonAttributes
                };
                WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);

                Console.WriteLine($"Write records status code: {response.HttpStatusCode.ToString()}");
            }
            catch (RejectedRecordsException e) {
                PrintRejectedRecordsException(e);
            }
            catch (Exception e)
            {
                Console.WriteLine("Write records failure:" + e.ToString());
            }
        }
Beispiel #6
0
        public async Task WriteRecordsMultiMeasureValueMultipleRecords()
        {
            Console.WriteLine("Writing records with multi value attributes mixture type");

            DateTimeOffset now = DateTimeOffset.UtcNow;
            string         currentTimeString = (now.ToUnixTimeMilliseconds()).ToString();

            List <Dimension> dimensions = new List <Dimension> {
                new Dimension {
                    Name = "region", Value = "us-east-1"
                },
                new Dimension {
                    Name = "az", Value = "az1"
                },
                new Dimension {
                    Name = "hostname", Value = "host1"
                }
            };

            var commonAttributes = new Record
            {
                Dimensions = dimensions,
                Time       = currentTimeString
            };

            var cpuUtilization = new MeasureValue
            {
                Name  = "cpu_utilization",
                Value = "13.6",
                Type  = "DOUBLE"
            };

            var memoryUtilization = new MeasureValue
            {
                Name  = "memory_utilization",
                Value = "40",
                Type  = "DOUBLE"
            };

            var activeCores = new MeasureValue
            {
                Name  = "active_cores",
                Value = "4",
                Type  = "BIGINT"
            };

            var computationalRecord = new Record
            {
                MeasureName   = "computational_utilization",
                MeasureValues = new List <MeasureValue> {
                    cpuUtilization, memoryUtilization, activeCores
                },
                MeasureValueType = "MULTI"
            };

            var aliveRecord = new Record
            {
                MeasureName      = "is_healthy",
                MeasureValue     = "true",
                MeasureValueType = "BOOLEAN"
            };

            List <Record> records = new List <Record>();

            records.Add(computationalRecord);
            records.Add(aliveRecord);

            try
            {
                var writeRecordsRequest = new WriteRecordsRequest
                {
                    DatabaseName     = MultiMeasureValueConstants.MultiMeasureValueSampleDb,
                    TableName        = MultiMeasureValueConstants.MultiMeasureValueSampleTable,
                    Records          = records,
                    CommonAttributes = commonAttributes
                };
                WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);

                Console.WriteLine($"Write records status code: {response.HttpStatusCode.ToString()}");
            }
            catch (Exception e)
            {
                Console.WriteLine("Write records failure:" + e.ToString());
            }
        }
        public async Task WriteRecords()
        {
            Console.WriteLine("Writing records");

            DateTimeOffset now = DateTimeOffset.UtcNow;
            string         currentTimeString = (now.ToUnixTimeMilliseconds()).ToString();

            List <Dimension> dimensions = new List <Dimension> {
                new Dimension {
                    Name = "device_id", Value = "d089b7e6-395b-4552-8354-0f4284c8a81f"
                }
                //  new Dimension { Name = "hostname", Value = "host1" }
            };

            List <Record> records = new List <Record>
            {
            };

            for (int i = 0; i < 250; i++)
            {
                var pressureState = new Record
                {
                    Dimensions       = dimensions,
                    MeasureName      = "pstate" + i,
                    MeasureValue     = "normal" + i,
                    MeasureValueType = MeasureValueType.VARCHAR,
                    Time             = currentTimeString
                };

                var batteryState = new Record
                {
                    Dimensions       = dimensions,
                    MeasureName      = "bat2" + i,
                    MeasureValue     = "98" + i,
                    MeasureValueType = MeasureValueType.DOUBLE,
                    Time             = currentTimeString
                };

                records.Add(pressureState);
                records.Add(batteryState);
            }

            try
            {
                var writeRecordsRequest = new WriteRecordsRequest
                {
                    DatabaseName = Constants.DATABASE_NAME,
                    TableName    = Constants.TABLE_NAME,
                    Records      = records
                };
                var taskList = new List <Task>();
                for (int i = 0; i < 5; i++)
                {
                    var tsk = write100(records.Skip(i * 100).Take(100).ToList());
                    taskList.Add(tsk);
                }
                Stopwatch sw = new Stopwatch();
                sw.Start();
                // WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);
                await Task.WhenAll(taskList);

                sw.Stop();
                // Get the elapsed time as a TimeSpan value.
                TimeSpan ts = sw.Elapsed;

                // Format and display the TimeSpan value.
                string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                                                   ts.Hours, ts.Minutes, ts.Seconds,
                                                   ts.Milliseconds);
                Console.WriteLine("Writing records RunTime " + elapsedTime);
                //  Console.WriteLine($"Write records status code: {response.HttpStatusCode.ToString()}");
            }
            catch (RejectedRecordsException e)
            {
                PrintRejectedRecordsException(e);
            }
            catch (Exception e)
            {
                Console.WriteLine("Write records failure:" + e.ToString());
            }
        }