From f7b932eceaf0191dce1ff21c24bb6bf4144e90d2 Mon Sep 17 00:00:00 2001 From: prestoncraw Date: Fri, 7 Aug 2026 14:51:07 -0400 Subject: [PATCH] Add support for sqlcommand setting --- .../Controllers/Widgets/SOEController.cs | 45 ++++++++++++++----- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/Source/Applications/openXDA/openXDA/Controllers/Widgets/SOEController.cs b/Source/Applications/openXDA/openXDA/Controllers/Widgets/SOEController.cs index 71e8662b68..634c9668d9 100644 --- a/Source/Applications/openXDA/openXDA/Controllers/Widgets/SOEController.cs +++ b/Source/Applications/openXDA/openXDA/Controllers/Widgets/SOEController.cs @@ -21,10 +21,11 @@ // //****************************************************************************************************** +using GSF.Data; using System; +using System.Configuration; using System.Data; using System.Web.Http; -using GSF.Data; namespace openXDA.Controllers.Widgets { @@ -34,6 +35,17 @@ namespace openXDA.Controllers.Widgets [RoutePrefix("api/Widgets/SOE")] public class SOEController : ApiController { + public class Settings + { + public Settings(Action configure) + { + configure(this); + } + + [Setting] + public string SQLCommand { get; set; } + } + private const string SOECategory = "dbSOE"; private readonly Func m_connectionFactory; @@ -45,29 +57,40 @@ public SOEController(Func connectionFactory) m_connectionFactory = connectionFactory; } - [Route("{eventID:int}/{timeWindow:int}"), HttpGet] - public IHttpActionResult Get(int eventID, int timeWindow) + [Route("{eventID:int}/{timeWindow:int}/{widgetID:int}"), HttpGet] + public IHttpActionResult Get(int eventID, int timeWindow, int widgetID) { DateTime eventTime; using (AdoDataConnection connection = m_connectionFactory()) eventTime = connection.ExecuteScalar("SELECT StartTime FROM Event WHERE ID = {0}", eventID); + Settings settings = new Settings(new WidgetConfigurationLoader(CreateDbConnection, widgetID).Configure); + using (AdoDataConnection connection = CreateConnection(SOECategory)) { - DataTable table = connection.RetrieveData(@" - SELECT - alarmdatetime as Time, - stationname + ' ' + alarmpoint as Alarm, - alarmstatus as Status - FROM soealarmdetails - WHERE alarmdatetime between {0} and {1} - ", eventTime.AddSeconds(-1 * timeWindow), eventTime.AddSeconds(timeWindow)); + string sql = settings.SQLCommand; + if (string.IsNullOrEmpty(sql)) + sql = @" + SELECT + alarmdatetime as Time, + stationname + ' ' + alarmpoint as Alarm, + alarmstatus as Status + FROM soealarmdetails + WHERE alarmdatetime between {0} and {1} + "; + + DataTable table = connection.RetrieveData(sql, eventTime.AddSeconds(-1 * timeWindow), eventTime.AddSeconds(timeWindow)); return Ok(table); } } + private AdoDataConnection CreateDbConnection() + { + return m_connectionFactory(); + } + private static AdoDataConnection CreateConnection(string settingsCategory) { return new AdoDataConnection(settingsCategory);