From bdc1523d989ddea01e79eae1f37ada6cb1f114b5 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Tue, 23 Jun 2026 15:32:36 -0500 Subject: [PATCH 1/3] Removed unused using directives --- src/Gemstone.Timeseries/Adapters/AdapterCollectionBase.cs | 2 -- src/Gemstone.Timeseries/Adapters/FilterAdapterCollection.cs | 1 - src/Gemstone.Timeseries/Adapters/OutputAdapterBase.cs | 1 - src/Gemstone.Timeseries/Model/DeviceExpressionParser.cs | 2 -- src/Gemstone.Timeseries/ServiceHostBase.cs | 1 - src/Gemstone.Timeseries/Statistics/StatisticsEngine.cs | 1 - src/Gemstone.Timeseries/TimeseriesStartupOperations.cs | 3 --- 7 files changed, 11 deletions(-) diff --git a/src/Gemstone.Timeseries/Adapters/AdapterCollectionBase.cs b/src/Gemstone.Timeseries/Adapters/AdapterCollectionBase.cs index d3415d713..eda93a3e2 100644 --- a/src/Gemstone.Timeseries/Adapters/AdapterCollectionBase.cs +++ b/src/Gemstone.Timeseries/Adapters/AdapterCollectionBase.cs @@ -39,11 +39,9 @@ using Gemstone.Collections; using Gemstone.Collections.CollectionExtensions; using Gemstone.ComponentModel.DataAnnotations; -using Gemstone.Data.Model; using Gemstone.Diagnostics; using Gemstone.EventHandlerExtensions; using Gemstone.IO; -using Gemstone.Security.AccessControl; using Gemstone.StringExtensions; using Gemstone.Threading; using Gemstone.Threading.LogicalThreads; diff --git a/src/Gemstone.Timeseries/Adapters/FilterAdapterCollection.cs b/src/Gemstone.Timeseries/Adapters/FilterAdapterCollection.cs index 7199e2405..ba80865ce 100644 --- a/src/Gemstone.Timeseries/Adapters/FilterAdapterCollection.cs +++ b/src/Gemstone.Timeseries/Adapters/FilterAdapterCollection.cs @@ -29,7 +29,6 @@ using System.Data; using System.Linq; using Gemstone.Data.DataExtensions; -using Gemstone.Diagnostics; using Gemstone.EventHandlerExtensions; namespace Gemstone.Timeseries.Adapters; diff --git a/src/Gemstone.Timeseries/Adapters/OutputAdapterBase.cs b/src/Gemstone.Timeseries/Adapters/OutputAdapterBase.cs index 05799958f..1463ebc09 100644 --- a/src/Gemstone.Timeseries/Adapters/OutputAdapterBase.cs +++ b/src/Gemstone.Timeseries/Adapters/OutputAdapterBase.cs @@ -35,7 +35,6 @@ using Gemstone.ComponentModel.DataAnnotations; using Gemstone.Diagnostics; using Gemstone.EventHandlerExtensions; -using Gemstone.Security.AccessControl; using Gemstone.StringExtensions; using Gemstone.Threading; using Gemstone.Threading.Collections; diff --git a/src/Gemstone.Timeseries/Model/DeviceExpressionParser.cs b/src/Gemstone.Timeseries/Model/DeviceExpressionParser.cs index a888d30f7..b6b21c057 100644 --- a/src/Gemstone.Timeseries/Model/DeviceExpressionParser.cs +++ b/src/Gemstone.Timeseries/Model/DeviceExpressionParser.cs @@ -29,9 +29,7 @@ using Gemstone.Data.DataExtensions; using Gemstone.Data.Model; using Gemstone.IO.Parsing; -using Gemstone.Numeric.EE; using Gemstone.StringExtensions; -using Newtonsoft.Json.Linq; using ConfigSettings = Gemstone.Configuration.Settings; namespace Gemstone.Timeseries.Model; diff --git a/src/Gemstone.Timeseries/ServiceHostBase.cs b/src/Gemstone.Timeseries/ServiceHostBase.cs index 3499f2649..4896574a2 100644 --- a/src/Gemstone.Timeseries/ServiceHostBase.cs +++ b/src/Gemstone.Timeseries/ServiceHostBase.cs @@ -40,7 +40,6 @@ using Gemstone.Caching; using Gemstone.Configuration; using Gemstone.Data; -using Gemstone.Data.Model; using Gemstone.Data.DataSetExtensions; using Gemstone.Diagnostics; using Gemstone.EventHandlerExtensions; diff --git a/src/Gemstone.Timeseries/Statistics/StatisticsEngine.cs b/src/Gemstone.Timeseries/Statistics/StatisticsEngine.cs index 4b55369ce..6dab0a57d 100644 --- a/src/Gemstone.Timeseries/Statistics/StatisticsEngine.cs +++ b/src/Gemstone.Timeseries/Statistics/StatisticsEngine.cs @@ -44,7 +44,6 @@ using Gemstone.EventHandlerExtensions; using Gemstone.IO; using Gemstone.IO.Parsing; -using Gemstone.Security.AccessControl; using Gemstone.StringExtensions; using Gemstone.Threading.SynchronizedOperations; using Gemstone.Timeseries.Adapters; diff --git a/src/Gemstone.Timeseries/TimeseriesStartupOperations.cs b/src/Gemstone.Timeseries/TimeseriesStartupOperations.cs index 6077a53d6..1b79cc075 100644 --- a/src/Gemstone.Timeseries/TimeseriesStartupOperations.cs +++ b/src/Gemstone.Timeseries/TimeseriesStartupOperations.cs @@ -25,11 +25,8 @@ using System; using System.Collections.Generic; -using System.Data; -using System.Data.Common; using Gemstone.Data; using Gemstone.Data.DataExtensions; -using Gemstone.Identity; using Gemstone.StringExtensions; using Gemstone.Timeseries.Statistics; From 6d934801b52203e2e33e5d4ced9681a1736d9b8e Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Tue, 23 Jun 2026 15:37:35 -0500 Subject: [PATCH 2/3] Initial external event-details implementation --- src/Gemstone.Timeseries/AlarmMeasurement.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Gemstone.Timeseries/AlarmMeasurement.cs b/src/Gemstone.Timeseries/AlarmMeasurement.cs index 8ebb3fce9..9a74ce362 100644 --- a/src/Gemstone.Timeseries/AlarmMeasurement.cs +++ b/src/Gemstone.Timeseries/AlarmMeasurement.cs @@ -37,6 +37,16 @@ public class AlarmMeasurement : Measurement /// public Guid AlarmID { get; set; } + /// + /// Gets or sets the identifier of the day-based shard that holds this alarm's event details. + /// + /// + /// This value is derived from the day the alarm was raised and is carried on both the raise and clear + /// measurements so that the event details for a cleared alarm resolve to the shard for the raise day. A value + /// of zero indicates that no event details are associated with the alarm. + /// + public ushort ShardID { get; set; } + /// /// Gets or sets alarm timestamp. /// From cf7e88cac5e7ab1f3a18ef715d3dd173049d2203 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Thu, 25 Jun 2026 16:03:48 -0500 Subject: [PATCH 3/3] Initial refactor of TableOperations that separates value expression attribute application. --- .../Adapters/IndependentActionAdapterManagerBase.cs | 2 +- .../Adapters/IndependentAdapterManagerExtensions.cs | 10 +++++----- .../Model/DeviceExpressionParser.cs | 2 +- .../Model/MeasurementExpressionParser.cs | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Gemstone.Timeseries/Adapters/IndependentActionAdapterManagerBase.cs b/src/Gemstone.Timeseries/Adapters/IndependentActionAdapterManagerBase.cs index edad14313..e17b1bf45 100644 --- a/src/Gemstone.Timeseries/Adapters/IndependentActionAdapterManagerBase.cs +++ b/src/Gemstone.Timeseries/Adapters/IndependentActionAdapterManagerBase.cs @@ -483,7 +483,7 @@ private void InitializeChildAdapters() using AdoDataConnection connection = GetConfiguredConnection(); - TableOperations deviceTable = new(connection); + ExpressionTableOperations deviceTable = new(connection); string deviceAcronym = string.Format(ParentDeviceAcronymTemplate, Name); DeviceRecord device = deviceTable.QueryRecordWhere("Acronym = {0}", deviceAcronym) ?? deviceTable.NewRecord(); diff --git a/src/Gemstone.Timeseries/Adapters/IndependentAdapterManagerExtensions.cs b/src/Gemstone.Timeseries/Adapters/IndependentAdapterManagerExtensions.cs index 3e4988120..c8a4c4c90 100644 --- a/src/Gemstone.Timeseries/Adapters/IndependentAdapterManagerExtensions.cs +++ b/src/Gemstone.Timeseries/Adapters/IndependentAdapterManagerExtensions.cs @@ -174,7 +174,7 @@ public static string LookupPhasorLabel(this IIndependentAdapterManager instance, using AdoDataConnection connection = instance.HandleGetConfiguredConnection(); - TableOperations phasorTable = new(connection); + ExpressionTableOperations phasorTable = new(connection); PhasorRecord phasorRecord = phasorTable.QueryRecordWhere("ID = {0}", phasorID); return phasorRecord is null ? instance.LookupPointTag(signalID, measurementTable) : phasorRecord.Label.Trim().ToUpper(); } @@ -205,10 +205,10 @@ public static MeasurementRecord GetMeasurementRecord(this IIndependentAdapterMan // Open database connection as defined in configuration file "systemSettings" category using AdoDataConnection connection = instance.GetConfiguredConnection(); - TableOperations deviceTable = new(connection); - TableOperations measurementTable = new(connection); - TableOperations historianTable = new(connection); - TableOperations signalTypeTable = new(connection); + ExpressionTableOperations deviceTable = new(connection); + ExpressionTableOperations measurementTable = new(connection); + ExpressionTableOperations historianTable = new(connection); + ExpressionTableOperations signalTypeTable = new(connection); // Lookup target device ID int? deviceID = currentDeviceID > 0 ? currentDeviceID : deviceTable.QueryRecordWhere("Acronym = {0}", instance.Name)?.ID; diff --git a/src/Gemstone.Timeseries/Model/DeviceExpressionParser.cs b/src/Gemstone.Timeseries/Model/DeviceExpressionParser.cs index b6b21c057..1abeeb553 100644 --- a/src/Gemstone.Timeseries/Model/DeviceExpressionParser.cs +++ b/src/Gemstone.Timeseries/Model/DeviceExpressionParser.cs @@ -129,7 +129,7 @@ public string Execute( using AdoDataConnection connection = new(ConfigSettings.Default); { - TableOperations deviceTable = new(connection); + ExpressionTableOperations deviceTable = new(connection); parentDevice = deviceTable.QueryRecordWhere("ID = {0}", parentID); } diff --git a/src/Gemstone.Timeseries/Model/MeasurementExpressionParser.cs b/src/Gemstone.Timeseries/Model/MeasurementExpressionParser.cs index 4d52bf107..5b9f1aac0 100644 --- a/src/Gemstone.Timeseries/Model/MeasurementExpressionParser.cs +++ b/src/Gemstone.Timeseries/Model/MeasurementExpressionParser.cs @@ -160,7 +160,7 @@ private static int GuessBaseKV(string? label, string deviceAcronym, string signa { // Attempt to lookup first phasor magnitude tag associated with this device using AdoDataConnection connection = new(ConfigSettings.Instance); - TableOperations measurementTable = new(connection); + ExpressionTableOperations measurementTable = new(connection); Measurement? record = measurementTable.QueryRecordWhere("SignalReference = {0}", SignalReference.ToString(deviceAcronym, SignalKind.Magnitude, 1)); return record?.PointTag; }