Power service updates

- Upgrade to .NET 8
- Remove ApplicationInsights
- Add OpenTelemetry
This commit is contained in:
2024-01-22 18:54:18 -05:00
parent 911e7fbdb9
commit 2a58b26eb3
16 changed files with 361 additions and 366 deletions

View File

@@ -6,95 +6,89 @@ using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace ChrisKaczor.HomeMonitor.Power.Service.Data
namespace ChrisKaczor.HomeMonitor.Power.Service.Data;
public class Database(IConfiguration configuration)
{
public class Database
public void EnsureDatabase()
{
private readonly IConfiguration _configuration;
public Database(IConfiguration configuration)
var connectionStringBuilder = new SqlConnectionStringBuilder
{
_configuration = configuration;
}
DataSource = $"{configuration["Power:Database:Host"]},{configuration["Power:Database:Port"]}",
UserID = configuration["Power:Database:User"],
Password = configuration["Power:Database:Password"],
InitialCatalog = "master",
TrustServerCertificate = bool.Parse(configuration["Power:Database:TrustServerCertificate"] ?? "false")
};
public void EnsureDatabase()
using var connection = new SqlConnection(connectionStringBuilder.ConnectionString);
var command = new SqlCommand { Connection = connection };
connection.Open();
// Check to see if the database exists
command.CommandText = $"SELECT CAST(1 as bit) from sys.databases WHERE name='{configuration["Power:Database:Name"]}'";
var databaseExists = (bool?)command.ExecuteScalar();
// Create database if needed
if (!(databaseExists ?? false))
{
var connectionStringBuilder = new SqlConnectionStringBuilder
{
DataSource = $"{_configuration["Power:Database:Host"]},{_configuration["Power:Database:Port"]}",
UserID = _configuration["Power:Database:User"],
Password = _configuration["Power:Database:Password"],
InitialCatalog = "master"
};
using var connection = new SqlConnection(connectionStringBuilder.ConnectionString);
var command = new SqlCommand { Connection = connection };
connection.Open();
// Check to see if the database exists
command.CommandText = $"SELECT CAST(1 as bit) from sys.databases WHERE name='{_configuration["Power:Database:Name"]}'";
var databaseExists = (bool?)command.ExecuteScalar();
// Create database if needed
if (!(databaseExists ?? false))
{
command.CommandText = $"CREATE DATABASE {_configuration["Power:Database:Name"]}";
command.ExecuteNonQuery();
}
// Switch to the database now that we're sure it exists
connection.ChangeDatabase(_configuration["Power:Database:Name"]);
var schema = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Power.Service.Data.Resources.Schema.sql");
// Make sure the database is up to date
command.CommandText = schema;
command.CommandText = $"CREATE DATABASE {configuration["Power:Database:Name"]}";
command.ExecuteNonQuery();
}
private SqlConnection CreateConnection()
// Switch to the database now that we're sure it exists
connection.ChangeDatabase(configuration["Power:Database:Name"]!);
var schema = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Power.Service.Data.Resources.Schema.sql");
// Make sure the database is up-to-date
command.CommandText = schema;
command.ExecuteNonQuery();
}
private SqlConnection CreateConnection()
{
var connectionStringBuilder = new SqlConnectionStringBuilder
{
var connectionStringBuilder = new SqlConnectionStringBuilder
{
DataSource = $"{_configuration["Power:Database:Host"]},{_configuration["Power:Database:Port"]}",
UserID = _configuration["Power:Database:User"],
Password = _configuration["Power:Database:Password"],
InitialCatalog = _configuration["Power:Database:Name"]
};
DataSource = $"{configuration["Power:Database:Host"]},{configuration["Power:Database:Port"]}",
UserID = configuration["Power:Database:User"],
Password = configuration["Power:Database:Password"],
InitialCatalog = configuration["Power:Database:Name"],
TrustServerCertificate = bool.Parse(configuration["Power:Database:TrustServerCertificate"] ?? "false")
};
var connection = new SqlConnection(connectionStringBuilder.ConnectionString);
connection.Open();
var connection = new SqlConnection(connectionStringBuilder.ConnectionString);
connection.Open();
return connection;
}
return connection;
}
public void StorePowerData(PowerStatus powerStatus)
{
using var connection = CreateConnection();
public void StorePowerData(PowerStatus powerStatus)
{
using var connection = CreateConnection();
var query = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Power.Service.Data.Resources.CreateStatus.sql");
var query = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Power.Service.Data.Resources.CreateStatus.sql");
connection.Query(query, powerStatus);
}
connection.Query(query, powerStatus);
}
public async Task<PowerStatus> GetRecentStatus()
{
await using var connection = CreateConnection();
public async Task<PowerStatus> GetRecentStatus()
{
await using var connection = CreateConnection();
var query = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Power.Service.Data.Resources.GetRecentStatus.sql");
var query = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Power.Service.Data.Resources.GetRecentStatus.sql");
return await connection.QueryFirstOrDefaultAsync<PowerStatus>(query);
}
return await connection.QueryFirstOrDefaultAsync<PowerStatus>(query);
}
public async Task<IEnumerable<PowerStatusGrouped>> GetStatusHistoryGrouped(DateTimeOffset start, DateTimeOffset end, int bucketMinutes)
{
await using var connection = CreateConnection();
public async Task<IEnumerable<PowerStatusGrouped>> GetStatusHistoryGrouped(DateTimeOffset start, DateTimeOffset end, int bucketMinutes)
{
await using var connection = CreateConnection();
var query = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Power.Service.Data.Resources.GetStatusHistoryGrouped.sql");
var query = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Power.Service.Data.Resources.GetStatusHistoryGrouped.sql");
return await connection.QueryAsync<PowerStatusGrouped>(query, new { Start = start, End = end, BucketMinutes = bucketMinutes });
}
return await connection.QueryAsync<PowerStatusGrouped>(query, new { Start = start, End = end, BucketMinutes = bucketMinutes });
}
}