Add aggregate API and fix (hack) time bucket

This commit is contained in:
2024-03-12 21:58:29 -04:00
parent ec85be2096
commit e4ee81ca3e
7 changed files with 77 additions and 4 deletions

View File

@@ -1,9 +1,9 @@
using ChrisKaczor.HomeMonitor.Environment.Service.Models;
using ChrisKaczor.HomeMonitor.Environment.Service.Models.Indoor;
using Dapper;
using DbUp;
using Npgsql;
using System.Reflection;
using ChrisKaczor.HomeMonitor.Environment.Service.Models.Indoor;
namespace ChrisKaczor.HomeMonitor.Environment.Service.Data;
@@ -67,6 +67,17 @@ public class Database(IConfiguration configuration)
var query = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Environment.Service.Data.Queries.GetReadingsHistoryGrouped.psql");
query = query.Replace("@BucketMinutes", bucketMinutes.ToString());
return await connection.QueryAsync<ReadingsGrouped>(query, new { Start = start, End = end, BucketMinutes = bucketMinutes }).ConfigureAwait(false);
}
public async Task<IEnumerable<ReadingsAggregate>> GetReadingsAggregate(DateTimeOffset start, DateTimeOffset end)
{
await using var connection = CreateConnection();
var query = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Environment.Service.Data.Queries.GetReadingsAggregate.psql");
return await connection.QueryAsync<ReadingsAggregate>(query, new { Start = start, End = end }).ConfigureAwait(false);
}
}

View File

@@ -0,0 +1,13 @@
SELECT name,
ROUND(min(temperature), 2) AS minimumTemperature,
ROUND(avg(temperature), 2) AS averageTemperature,
ROUND(max(temperature), 2) AS maximumTemperature,
ROUND(min(pressure), 2) AS minimumPressure,
ROUND(avg(pressure), 2) AS averagePressure,
ROUND(max(pressure), 2) AS maximumPressure,
ROUND(min(humidity), 2) AS minimumHumidity,
ROUND(avg(humidity), 2) AS averageHumidity,
ROUND(max(humidity), 2) AS maximumHumidity
FROM reading
WHERE time BETWEEN @Start AND @End
GROUP BY name;

View File

@@ -1,5 +1,5 @@
SELECT
time_bucket('15 minute', time) AS bucket,
time_bucket('@BucketMinutes minute', time) AS bucket,
name,
ROUND(avg(temperature), 2) AS averageTemperature,
ROUND(avg(pressure), 2) AS averagePressure,