7500106c2f
Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
62 lines
2.7 KiB
C#
62 lines
2.7 KiB
C#
using Microsoft.Extensions.Logging;
|
|
using Microsoft.Extensions.Logging.Abstractions;
|
|
using ZB.MOM.WW.OtOpcUa.Core.Abstractions;
|
|
using ZB.MOM.WW.OtOpcUa.Core.AlarmHistorian;
|
|
using ZB.MOM.WW.OtOpcUa.Runtime.Historian;
|
|
|
|
namespace ZB.MOM.WW.OtOpcUa.Driver.Historian.SqlServer;
|
|
|
|
/// <summary>
|
|
/// <see cref="IHistorianBackendProvider"/> for the SQL Server historian. Supports every
|
|
/// <see cref="HistorianValueKind"/> and HistoryUpdate. All seams share ONE connection helper, ONE schema
|
|
/// bootstrapper and ONE tag catalog, so the schema is ensured once and tag ids are cached once.
|
|
/// </summary>
|
|
public sealed class SqlServerHistorianProvider : IHistorianBackendProvider
|
|
{
|
|
private static readonly IReadOnlySet<HistorianValueKind> Kinds =
|
|
new HashSet<HistorianValueKind>(Enum.GetValues<HistorianValueKind>());
|
|
|
|
private readonly SqlHistorianConnection _conn;
|
|
private readonly SqlServerSchemaBootstrapper _bootstrap;
|
|
private readonly SqlServerTagCatalog _catalog;
|
|
|
|
/// <summary>Creates the provider over validated options.</summary>
|
|
/// <param name="options">The <c>ServerHistorian:SqlServer</c> options.</param>
|
|
public SqlServerHistorianProvider(SqlServerHistorianOptions options)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(options);
|
|
_conn = new SqlHistorianConnection(options);
|
|
_bootstrap = new SqlServerSchemaBootstrapper(_conn, options);
|
|
_catalog = new SqlServerTagCatalog(_conn, _bootstrap);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public string Name => "SqlServer";
|
|
|
|
/// <inheritdoc />
|
|
public IReadOnlySet<HistorianValueKind> SupportedKinds => Kinds;
|
|
|
|
private static ILogger Log<T>(IServiceProvider sp) =>
|
|
((sp.GetService(typeof(ILoggerFactory)) as ILoggerFactory) ?? NullLoggerFactory.Instance).CreateLogger<T>();
|
|
|
|
/// <inheritdoc />
|
|
public IHistorianDataSource CreateDataSource(IServiceProvider sp) =>
|
|
new SqlServerHistorianDataSource(_conn, _bootstrap, _catalog, Log<SqlServerHistorianDataSource>(sp));
|
|
|
|
/// <inheritdoc />
|
|
public IHistorianValueWriter CreateValueWriter(IServiceProvider sp) =>
|
|
new SqlServerHistorianValueWriter(_conn, _bootstrap, _catalog, Log<SqlServerHistorianValueWriter>(sp));
|
|
|
|
/// <inheritdoc />
|
|
public IAlarmHistorianWriter CreateAlarmWriter(IServiceProvider sp) =>
|
|
new SqlServerAlarmHistorianWriter(_conn, _bootstrap, Log<SqlServerAlarmHistorianWriter>(sp));
|
|
|
|
/// <inheritdoc />
|
|
public IHistorianProvisioning CreateProvisioning(IServiceProvider sp) =>
|
|
new SqlServerTagProvisioner(_conn, _bootstrap, Log<SqlServerTagProvisioner>(sp));
|
|
|
|
/// <inheritdoc />
|
|
public IHistorianDataUpdater? CreateUpdater(IServiceProvider sp) =>
|
|
new SqlServerHistorianDataUpdater(_conn, _catalog);
|
|
}
|