示例#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());
            }
        }
示例#2
0
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            WriteRecordsResponse response = new WriteRecordsResponse();


            return(response);
        }
        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()}");
        }
示例#4
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());
            }
        }
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            WriteRecordsResponse response = new WriteRecordsResponse();

            context.Read();
            int targetDepth = context.CurrentDepth;

            while (context.ReadAtDepth(targetDepth))
            {
                if (context.TestExpression("RecordsIngested", targetDepth))
                {
                    var unmarshaller = RecordsIngestedUnmarshaller.Instance;
                    response.RecordsIngested = unmarshaller.Unmarshall(context);
                    continue;
                }
            }

            return(response);
        }
        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());
            }
        }
示例#8
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());
            }
        }