Skip to content

GSF v2.1.346 Release Notes

J. Ritchie Carroll edited this page Oct 16, 2016 · 5 revisions

Changes since GSF v2.1.264

GSF Time-Series Library Updates

  • GSF.TimeSeries: Modified metadata synchronization in DataSubscriber to delete existing phasors even if none are defined in the source data set.
  • GSF.TimeSeries: Modified DataPublisher to remove measurements with no associated phasor from metadata refresh.
  • GSF.TimeSeries: Modified DataSubscriber metadata synchronization to properly remove phasors that are no longer defined in the source data set.
  • GSF.TimeSeries: Removed extraneous line of code in ServiceHostBase that was causing two TLS servers to be initialized as the remoting server.
  • GSF.TimeSeries: Updated acronyms for SDG&E to SDGE to match normal acronym validation.
  • GSF.TimeSeries: In ServiceClientBase, modified command line argument parser to skip the first argument.
  • GSF.TimeSeries: Updated manual reset event of data gap recoverer to operate in a non-null state.
  • GSF.TimeSeries: Fixed the Initialize() method of the client subscription classes so that the base class does not overwrite the explicitly parsed input measurement keys setting.
  • GSF.TimeSeries: Removed potential SQL injection vulnerability from GEP.
  • GSF.TimeSeries: Improved performance in DataPublisher ACL lookups and Manager pages to configure ACLs.
  • GSF.TimeSeries: Replaced references to openPDC in the PostgreSQL GSFSchema.sql script with references to GSFSchema.
  • GSF.TimeSeries: Added a RuntimeID to MeasurementKey.cs
  • GSF.TimeSeries: Modified RouteMappingDoubleBufferQueue to use Interlocked.Exchange() when updating the global cache.
  • GSF.TimeSeries: Simplified RouteMappingHighLagencyLowCpu.cs
  • GSF.Timeseries: Incorporated the new extensible RoutingTables.cs
  • GSF.TimeSeries: Slight modification to IRouteMappingTables.cs and finished RouteMappingHishLatencyLowCpu.cs
  • GSF.TimeSeries: Added a proposed new method of implementing the RoutingTables.cs
  • GSF.TimeSeries: Updated default value of InputAdapterBase EnableConnectionErrors property to be true for adapters besides PhasorMeasurementMapper
  • GSF.TimeSeries: Modified the MapAcronym field of the Company table in the SQL Server schema to match the other database types.

GSF Time-Series Library Adapter Updates

  • PhasorMeasurementMapper: Added new property to allow connection errors to not be logged in phasor measurement mapper.
  • PhasorProtocolAdapters: Updated the phasor data concentrator to re-index output stream measurements at runtime.
  • PowerCalculations: In PowerMultiCalculatorAdapter, replaced ApplySqrt3Adjustment and RemoveSqrt3Adjustment connection string parameters with the more descriptive and functional AdjustmentStrategy parameter.
  • DynamicCalculator: Added option to select the source of the timestamp used when generating calculated measurements.
  • GrafanaAdapters: Cleaned up target cache operations and removed unused code.
  • GrafanaAdapters: Added caching to alarm annotations and improved format of alarm response messages.
  • GrafanaAdapters: Updated display tags to be based on PointTag meta-data instead of MeasurementKey ID for better tag comprehension and added timed sliding memory caches for expression and target lookups to increase per-query performance for the same information (like a dashboard in auto-refresh mode).
  • GrafanaAdapters: Improved filter syntax parsing for annotation queries.
  • GrafanaAdapters: Improved and simplified filter expression operation.
  • GrafanaAdapters: Added event based automated meta-data refresh.
  • GrafanaAdapters: Implemented annotations for Alarms with filtering syntax and a data source base class.

GSF Phasor Protocol Updates

  • GSF.PhasorProtocols: Added code to also copy the PhasorAngleFormat from the source frame to the derived IEEE C37.118 ConfigurationFrame2.
  • GSF.PhasorProtocols: Modified the IEEE C37.118 frame parser to properly transfer the coordinate format and data formats from the source configuration frame to the derived configuration frame when decoding a data stream using a configuration frame that is not a ConfigurationFrame2.
  • GSF.PhasorProtocols.UI: Since phasors could be reordered in the source device, existing tests that were validating phasor source index could inadvertently throw an exception when it should not during augmentation of configuration, since the test case is normally negative and can produce false positives, the validation has been removed.
  • GSF.PhasorProtocols.UI.WPF: Added a frequency definition to cells generated by the ConfigurationCreator class.
  • GSF.PhasorProtocols.UI.WPF: Added error handling to output stream wizard when adding devices to an output stream.

GSF Historian Updates

  • GSF.Historian: Corrected IArchive additions.
  • GSF.Historian: Added initial implementation of Grafana data service.
  • GSF.Historian: Added loop to handle race conditions between rollovers and reading of the active archive file to prevent null references when accessing the archive file allocation table.
  • GSF.Historian: Extracted Grafana interfaces into their own assembly - GrafanaAdapters

GSF Core Updates

  • GSF.Core: Added string extensions for IsSingular, ToSingular, IsPlural and ToPlural based on the PluralizationService of the Data Entity Design framework. GSF.Web: Updated paged view model to apply better singular form of table names for record view / add new and edit screens.
  • GSF.Core: Updated Outage, OutageLog and OutageLogProcessor to be based on DateTimeOffset to assist with issues related to writing stop times in the local time zone instead of UTC.
  • GSF.Core: Modified SQL script execution methods in DataExtensions.cs so that the regex to strip single-line comments does not also remove the line feed.
  • GSF.Core: Fixed logic in the DelayCancellationToken.Cancel() method.
  • GSF.Core: Updated the non-disposable GSF.Threading.CancellationToken class to be compatible with, and implicitly castable to, a System.Threading.CancellationToken struct as well as System.Threading.CancellationTokenSource class for simpler interop when using Task/Async .NET infrastructure methods that require the .NET system cancellation token.
  • GSF.Core: Fixed BitmapExtensions.ToPixelData() which had source and destination array backwards.
  • GSF.Core: Added method to BitmapExtensions to convert a bitmap to an array of pixel data.
  • GSF.Core: Added public readonly properties to the classes in the GSF.NumericalAnalysis.Interpolation namespace.
  • GSF.Core: Added the Point class to the GSF.Drawing namespace.
  • GSF.Core: Updated SearchableAttribute to accept a SearchType enumeration instead of a boolean for clarity in definition.
  • GSF.Core: Added "SearchableAttribute" for modeled table fields to allow which fields in the model should be searched. Added two overloads for QueryRecordCount and QueryRecords that now accept a multi-keyword search string that will be applied to all search fields.
  • GSF.Core: Added the GSF.NumericalAnalysis.Interpolation namespace and created the LinearPiecewiseFunction and InverseDistanceWeightingFunction classes.
  • GSF.Core: Modified the FixParameters function of AdoDataConnection to better align the behavior of parameterized queries with that of string.Format().
  • GSF.Core: Corrected code comments for new functions.
  • GSF.Core: Added ToPascalCase and ToCamelCase string extensions GSF.Web (gsf.web.client.js): Mapped Array.prototype.any to Array.prototype.some if it exists.
  • GSF.Core: Fixed a potential race condition in the DelayAndExecute() extension method that returns a cancellation token.
  • GSF.Core: Added methods to XmlExtensions for applying transformations to an XML document.
  • GSF.Core: Added string extension for "ToStream"
  • GSF.Core: Added AssemblyInfo.FindType method to search through all loaded assemblies to find a given type.
  • GSF.Core: Added Trackable class to track changes to a property's value.
  • GSF.Core: Added overloads for GetNamedMutex() and GetNamedSemaphore() in InterprocessLock to assist in detecting when other instances of an application are already running.
  • GSF.Core: Updated IO.GetAbsolutePath to fall back on ExecutingAssembly when EntryAssembly is unavailable, e.g., when the hosting environment is not a .NET application.

GSF Web Updates

  • GSF.Web: Updated paged view model template to directly call ToSingular string extension in GSF since deployed Razor implementations do not always properly resolve extension function.
  • GSF.Web: Updated record operations hub to support an assignable connection ID such that hub functions that are dependent on session level data can continue to work even when the record operations hub is created outside of a SignalR context, such as when being used by a hosted HTTP handler, like CsvDownloadHandler.
  • GSF.Web: Added "/" to GSF to pageviewmodel.cshtml to ensure it hits the proper subfolder.
  • GSF.Web: Added endWidth prototype definition to gsf.web.client.js if function does not exist - this should fix issues with missing function on IE11.
  • GSF.Web: Updated PagedViewModel such that export CSV button label is customizable
  • GSF.Web: Fixed record calculation sub-title in paged view model.
  • GSF.Web: Fixed issues with CSV export.
  • GSF.Web: Added data context to IRecordOperationsHub interface.
  • GSF.Web: Updated CSV export to handle buffering better and added a log exception handler.
  • GSF.Web: Updated QueryParameters to be case-insensitive.
  • GSF.Web: Updated paged view model to support customizable record title via ViewBag.RecordsTitle, defaults to "Records".
  • GSF.Web: In SecurityHub, added an edge case to support systems without a Node table.
  • GSF.Web: Added flag to specify whether to wrap a puiautocomplete dropdown in a div with class input-group.
  • GSF.Web: Added binding to hide the dropdown arrow for puiautocomplete input fields when the user is viewing a record in read-only mode.
  • GSF.Web: Modified Users.cshtml to always display the e-mail field regardless of whether the user is a database user.
  • GSF.Web: Initialized the thread principal to the user principal before validating the security provider in AuthorizeHubRoleAttribute.
  • GSF.Web: Fixed download CSV buffer size limits.
  • GSF.Web: Increased buffer size on CSV exporter to increase download speeds.
  • GSF.Web: Updated add select field logic so that valueAllowUnset is true when select is required so that field required validation logic will apply.
  • GSF.Web: Added options for template based select drop-down boxes.
  • GSF.Web: Updated default configured RazorEngine template path to eval to self-hosted web root.
  • GSF.Web: Added up and down arrow keys as allows values for numeric and integer keyboard restrictions in gsf.web.knockout.js
  • GSF.Web: Added ability to customize new records in pagedViewModel.js with "newRecord" event based on any provided existing source record.
  • GSF.Web: Renamed DOM access properties of HubClientBase and RecordOperationsHub to be "ClientScript" for consistency.
  • GSF.Web: Added autoSizeSelect jQuery function to gsf.web.client.js to automatically resize select drop-down based on selected option.
  • GSF.Web: Added connection ID to IHubClient repertoire.
  • GSF.Web: Updated HubClientOperationsBase to properly assign parent IHub to IHubClient instances.
  • GSF.Web: Changed name of HubClientBase HubClient property to HubScript for clarity in functionality.
  • GSF.Web: Added RecordOperationsHub base class and moved IRecordOperationsHub interface and associated cache into GSF.Web.Hubs
  • GSF.Web: Added extra null reference safety checks around new HubClient base classes.
  • GSF.Web: Added base class for IHubClient implementations.
  • GSF.Web: Added base class and interface for managing session based clients associated with SignalR hubs.
  • GSF.Web: Added RenderLookupFunction function to DataContext that will render a client-side Javascript function for looking up single values from sparse array based on a primary key where keys and values are derived from a modeled table.
  • GSF.Web: Updated DataContent to use ToCamelCase extension.
  • GSF.Web: Updated master paged view model to allow custom knockout for-each bindings for page records, e.g., "afterRender: postRecordRendering"
  • GSF.Web: Fixed an issue where paged view models were not properly initializing the user's roles before checking their rights.
  • GSF.Web: Modified model based CSV export to respect current filters and column sort parameters.
  • GSF.Web: Fixed issues with paths and virtual provider registration within a pre-compiled web application.
  • GSF.Web: Added user access security validation for model to shared CSV downloader.
  • GSF.Web: Updated CSV downloader to handle client cancellation from both ASP.NET and self-hosted handler methods.
  • GSF.Web: Added handling for embedded "ASHX Handlers"
  • GSF.Web: Added embedded CsvDownloadHandler.ashx and added it master paged view model.
  • GSF.Web: Added ability to handle cancellation token throughout self-hosted infrastructure.
  • GSF.Web: Added first-name and last-name columns to Users.cshtml security view.
  • GSF.Web: Updated MVC HtmlHelper RenderResource extension to handle bi-directional RazorView DynamicViewBag updates with MVC ViewDataDictionary to create a compatibility layer between MVC and RazorView ViewBag types
  • GSF.Web: Updated Groups and Users embedded resource pages to work across both self-hosted and ASP.NET web pages.
  • GSF.Web: Added needed hub operations for the DirectoryBrowser view that can be implemented as an interface within an existing SignalR hub.
  • GSF.Web: Added DirectoryBrowser as an embedded resource.
  • GSF.Web: Make minification processing an awaitable operation.
  • GSF.Web: Refactored self-hosted WebServer to only open resource stream when needed as an optimization.
  • GSF.Web: Added ability to render a self-hosted HTTP handler from an embedded resource.
  • GSF.Web: Updated HTTP handler processing to not cache content cache since web server will not know when content has changed. Handler can cache value as an optimization.
  • GSF.Web: Added content caching options to hosted HTTP handlers when rendering semi-static content, e.g., an image.
  • GSF.Web: Added handler type cache for self-hosted handlers so that header file parsing only needs to occur once and start-up or on file change.
  • GSF.Web: Updated DataContext to differentiate between integer and floating-point fields and apply knockout key-stroke filters to restrict input.
  • GSF.Web: Code clean-up / removed unused using statements.
  • GSF.Web: Added extended template base for self-hosted Razor views that has Url and Html helpers that match normal MVC views for more consistent implementation of views across APS.NET and self-hosted implementations.
  • GSF.Web: Added ToAbsoluteUrl, IncludeUrl, IncludeResource and RenderResource to both ASP.NET and self-hosted Html helper implementations to allow more dynamic rendering of both HTTP accessible and embedded resources.
  • GSF.Web: Added EmbeddedResourceProvider to allow access to embedded resources from standard ASP.NET applications.
  • GSF.Web: Added javascript and CSS minification options for the self-hosted web server.
  • GSF.Web: Update UrlValidation Regex String in Model.DataContext.
  • GSF.Web: Corrected slash for embedded resource URLs.
  • GSF.Web: Updated to allow slash as well as dot for embedded resource paths.
  • GSF.Web: Updated master page view model source to reference embedded resources.
  • GSF.Web: Added ability to serve embedded resources from hosted web server.
  • GSF.Web: Updated master files for paged view model script and view.
  • GSF.Web: Add UrlValidation String to Model.DataContent.
  • GSF.Web: Changed RenderViewModelConfiguration to properly set viewModel.modelName.
  • GSF.Web: Changed pagedViewModel new "model" field to "sourceModelName"
  • GSF.Web: Added code to RenderViewModelConfiguration so the name of the model gets stored in the viewModel object.
  • GSF.Web: Added sub-folder support for up to 10 levels in self hosted web page controller.
  • GSF.Web: Updated self-hosted web server components to properly handle posted data with multipart form data that may include uploaded files.
  • GSF.Web: Updated ASHX parsing in hosted web server to be more resilient to extraneous spaces.
  • GSF.Web: Removed non-async functions from web extensions.
  • GSF.Web: Changed hosted HTTP handler interface to return a task object.
  • GSF.Web: Fixed calling assembly reference to load ASHX type from.
  • GSF.Web: Added ability for the self-hosted WebAPI based web server to process HttpHandlers, i.e., ASHX files, where the handler class will implement the newly added IHostedHttpHandler interface that accepts an HttpRequestMessage and HttpResponseMessage as parameters
  • GSF.Web: Added HttpRequestMessage extensions, GetFiles and GetFilesAsync, to simplify access to multi-part uploaded files.

GSF PQDIF / EMAX / SEL File Parser Updates

  • GSF.PQDIF: Added to the parser the ability to seek to a specific record in the PQDIF file.
  • GSF.PQDIF: Added protection against infinite loops.
  • GSF.PQDIF: Removed explicit DateTimeKind specification when parsing PQDIF timestamps.
  • GSF.PQDIF: Modified the GetOriginalValues() method of SeriesInstance to handle timestamps as a special case to prevent errors when attempting to apply scaling factors to DateTime objects.
  • GSF.PQDIF: Modified error handling to populate basic tag information when an error occurs while parsing an element.
  • GSF.PQDIF: Allowed vector size to be zero
  • GSF.PQDIF: Added error element to increase robustness
  • GSF.SELEventParser: Reorganized event file parsing logic.
  • GSF.EMAX: Modified the EMAX parser to correct for invalid timestamps in the data file.

GSF Installer Actions Updates

  • GSF.InstallerActions: Modified ServiceAccountAction to attempt to grant rights to start and stop the service to the service account and admins group.
  • GSF.InstallerActions: Updated logging and property access in CustomActions.cs, updated XmlFileAction to provide read functionality, and added ConnectionStringAction for parsing connection strings.
  • GSF.InstallerActions: Added XMLFileAction to CustomActions.cs for editing XML files during installation.
  • GSF.InstallerActions: Modified all immediate custom actions to use session[LOGMESSAGE] instead of session.Log() to log messages so that messages still get logged when calling the custom action via the DoAction event.

Other GSF Project Updates

  • GSF.ServiceModel: Extended SelfHostingService to allow for returning custom JSON fault messages.
  • GSF.ServiceModel: Added AutomaticFormatSelectionEnabled property to SelHostingService to allow for non-XML based, e.g., JSON, formatted exception messages when set to false in service implementations.
  • GSF.ServiceProcess: Fixed "Time" command to properly return elapsed time string for total system runtime instead of seconds.
  • GSF.ServiceProcess: Moved the code to open the StatusLog to ensure the log is opened before triggering the ServiceStarting event.
  • GSF.Geo: Added the GSF.Geo project to the solution.
  • GSF.Windows: Added ChartExtensions to the solution.
  • GSF Documentation: Add documentation for Filter Expressions.
  • GSF Tools: Updated form icon and title of No-Internet Access Fix Utility.
  • GSF Tools: Added AlarmLog to list of default excluded tables during migration for DataMigrationUtility
  • GSF BuildScripts: Added code to enable signing of ConfigCrypter, ConfigEditor, and NoInetFixUtil assemblies.
  • GSF BuildScripts: Updated MasterBuild.buildproj to archive scripts for deployment.
  • GSF Solution: Fixed project level build warnings for GSF.Web and GSF.TimeSeries related to dependencies.
  • GSF Solution: Removed recently introduced build warnings.
  • GSF Solution: Removed build warnings from utility projects.