Exemple #1
0
 public TPHTableStorageRepo(IConfiguration configuration)
 {
     connString     = configuration["StorageConnectionString"];
     deviceTable    = new GenericTableStorage(connString, "Devices");
     readingTable   = new GenericTableStorage(connString, "Readings");
     aggregateTable = new GenericTableStorage(connString, "Aggregates");
 }
Exemple #2
0
        private async Task Aggregate(TPHEntity reading)
        {
            var aggregateTable  = new GenericTableStorage(connString, "Aggregates");
            var dayEntityTask   = aggregateTable.GetSingle <AggregateEntity>(reading.PartitionKey + "D", reading.ReadAt.ToString("yyMMdd"));
            var hourEntityTask  = aggregateTable.GetSingle <AggregateEntity>(reading.PartitionKey + "H", reading.ReadAt.ToString("yyMMddHH"));
            var monthEntityTask = aggregateTable.GetSingle <AggregateEntity>(reading.PartitionKey + "M", reading.ReadAt.ToString("yyMM"));

            var dayEntity = await dayEntityTask;

            if (dayEntity == null)
            {
                dayEntity = new AggregateEntity()
                {
                    PartitionKey = reading.PartitionKey + "D", RowKey = reading.ReadAt.ToString("yyMMdd")
                };
            }
            var dayRecord = Mapper.Map <AggregateEntity, IAggregateRecord>(dayEntity);

            UpdateAggregateValues(reading.Temperature, dayRecord.Temperature);
            UpdateAggregateValues(reading.Pressure, dayRecord.Pressure);
            UpdateAggregateValues(reading.Humidity, dayRecord.Humidity);
            await aggregateTable.InsertOrReplaceAsync(Mapper.Map <IAggregateRecord, AggregateEntity>(dayRecord));

            var hourEntity = await hourEntityTask;

            if (hourEntity == null)
            {
                hourEntity = new AggregateEntity()
                {
                    PartitionKey = reading.PartitionKey + "H", RowKey = reading.ReadAt.ToString("yyMMddHH")
                };
            }
            var hourRecord = Mapper.Map <AggregateEntity, IAggregateRecord>(hourEntity);

            UpdateAggregateValues(reading.Temperature, hourRecord.Temperature);
            UpdateAggregateValues(reading.Pressure, hourRecord.Pressure);
            UpdateAggregateValues(reading.Humidity, hourRecord.Humidity);
            await aggregateTable.InsertOrReplaceAsync(Mapper.Map <IAggregateRecord, AggregateEntity>(hourRecord));

            var monthEntity = await monthEntityTask;

            if (monthEntity == null)
            {
                monthEntity = new AggregateEntity()
                {
                    PartitionKey = reading.PartitionKey + "M", RowKey = reading.ReadAt.ToString("yyMM")
                };
            }
            var monthRecord = Mapper.Map <AggregateEntity, IAggregateRecord>(monthEntity);

            UpdateAggregateValues(reading.Temperature, monthRecord.Temperature);
            UpdateAggregateValues(reading.Pressure, monthRecord.Pressure);
            UpdateAggregateValues(reading.Humidity, monthRecord.Humidity);
            await aggregateTable.InsertOrReplaceAsync(Mapper.Map <IAggregateRecord, AggregateEntity>(monthRecord));
        }