From c08f6e6ac91ba4a3c1d5bdb71b1f4084ddb97f04 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 13 Aug 2025 09:24:49 -0500 Subject: [PATCH 01/15] Added openHistorian point translation and export tool --- .../Properties/AssemblyInfo.cs | 3 +- Source/Tools/OHTransfer/App.config | 6 + .../Tools/OHTransfer/OHTransfer.Designer.cs | 416 ++++++ Source/Tools/OHTransfer/OHTransfer.cs | 599 +++++++++ Source/Tools/OHTransfer/OHTransfer.csproj | 110 ++ Source/Tools/OHTransfer/OHTransfer.ico | Bin 0 -> 61835 bytes Source/Tools/OHTransfer/OHTransfer.resx | 1165 +++++++++++++++++ Source/Tools/OHTransfer/OHTransfer.sln | 25 + .../OHTransfer/OHTransfer.sln.DotSettings | 2 + Source/Tools/OHTransfer/Program.cs | 22 + .../OHTransfer/Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 71 + .../OHTransfer/Properties/Resources.resx | 117 ++ .../Properties/Settings.Designer.cs | 30 + .../OHTransfer/Properties/Settings.settings | 7 + Source/Tools/OHTransfer/openHistorian.ico | Bin 0 -> 370070 bytes Source/openHistorian.sln | 21 + 17 files changed, 2626 insertions(+), 1 deletion(-) create mode 100644 Source/Tools/OHTransfer/App.config create mode 100644 Source/Tools/OHTransfer/OHTransfer.Designer.cs create mode 100644 Source/Tools/OHTransfer/OHTransfer.cs create mode 100644 Source/Tools/OHTransfer/OHTransfer.csproj create mode 100644 Source/Tools/OHTransfer/OHTransfer.ico create mode 100644 Source/Tools/OHTransfer/OHTransfer.resx create mode 100644 Source/Tools/OHTransfer/OHTransfer.sln create mode 100644 Source/Tools/OHTransfer/OHTransfer.sln.DotSettings create mode 100644 Source/Tools/OHTransfer/Program.cs create mode 100644 Source/Tools/OHTransfer/Properties/AssemblyInfo.cs create mode 100644 Source/Tools/OHTransfer/Properties/Resources.Designer.cs create mode 100644 Source/Tools/OHTransfer/Properties/Resources.resx create mode 100644 Source/Tools/OHTransfer/Properties/Settings.Designer.cs create mode 100644 Source/Tools/OHTransfer/Properties/Settings.settings create mode 100644 Source/Tools/OHTransfer/openHistorian.ico diff --git a/Source/Libraries/GSF.SortedTreeStore/Properties/AssemblyInfo.cs b/Source/Libraries/GSF.SortedTreeStore/Properties/AssemblyInfo.cs index b4763a1537..1ceaf4faca 100755 --- a/Source/Libraries/GSF.SortedTreeStore/Properties/AssemblyInfo.cs +++ b/Source/Libraries/GSF.SortedTreeStore/Properties/AssemblyInfo.cs @@ -44,4 +44,5 @@ [assembly: InternalsVisibleTo("GSF.SortedTreeStore.Test")] [assembly: InternalsVisibleTo("openHistorian.Adapters")] [assembly: InternalsVisibleTo("openHistorian.PerformanceTests")] -[assembly: InternalsVisibleTo("ArchiveIntegrityChecker")] \ No newline at end of file +[assembly: InternalsVisibleTo("ArchiveIntegrityChecker")] +[assembly: InternalsVisibleTo("OHTransfer")] \ No newline at end of file diff --git a/Source/Tools/OHTransfer/App.config b/Source/Tools/OHTransfer/App.config new file mode 100644 index 0000000000..193aecc675 --- /dev/null +++ b/Source/Tools/OHTransfer/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Source/Tools/OHTransfer/OHTransfer.Designer.cs b/Source/Tools/OHTransfer/OHTransfer.Designer.cs new file mode 100644 index 0000000000..070b22929d --- /dev/null +++ b/Source/Tools/OHTransfer/OHTransfer.Designer.cs @@ -0,0 +1,416 @@ +namespace OHTransfer +{ + partial class OHTransfer + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OHTransfer)); + this.groupBoxMessages = new System.Windows.Forms.GroupBox(); + this.textBoxMessageOutput = new System.Windows.Forms.TextBox(); + this.groupBoxTransferConfiguration = new System.Windows.Forms.GroupBox(); + this.labelToUTC = new System.Windows.Forms.Label(); + this.labelFromUTC = new System.Windows.Forms.Label(); + this.labelToDate = new System.Windows.Forms.Label(); + this.dateTimePickerTo = new System.Windows.Forms.DateTimePicker(); + this.labelFromDate = new System.Windows.Forms.Label(); + this.dateTimePickerFrom = new System.Windows.Forms.DateTimePicker(); + this.textBoxDestinationCSVMeasurements = new System.Windows.Forms.TextBox(); + this.labelDestinationCSVMeasurements = new System.Windows.Forms.Label(); + this.buttonOpenDestinationCSVMeasurementsFile = new System.Windows.Forms.Button(); + this.textBoxSourceCSVMeasurements = new System.Windows.Forms.TextBox(); + this.labelSourceCSVMeasurements = new System.Windows.Forms.Label(); + this.buttonOpenSourceCSVMeasurementsFile = new System.Windows.Forms.Button(); + this.textBoxDestinationFiles = new System.Windows.Forms.TextBox(); + this.labelDestinationFilesLocation = new System.Windows.Forms.Label(); + this.buttonOpenDestinationFilesLocation = new System.Windows.Forms.Button(); + this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); + this.toolTip = new System.Windows.Forms.ToolTip(this.components); + this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.progressBar = new System.Windows.Forms.ProgressBar(); + this.buttonGo = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.textBoxSourceFiles = new System.Windows.Forms.TextBox(); + this.labelSourceFilesLocation = new System.Windows.Forms.Label(); + this.buttonOpenSourceFilesLocation = new System.Windows.Forms.Button(); + this.groupBoxMessages.SuspendLayout(); + this.groupBoxTransferConfiguration.SuspendLayout(); + this.SuspendLayout(); + // + // groupBoxMessages + // + this.groupBoxMessages.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxMessages.Controls.Add(this.textBoxMessageOutput); + this.groupBoxMessages.Location = new System.Drawing.Point(15, 196); + this.groupBoxMessages.Name = "groupBoxMessages"; + this.groupBoxMessages.Size = new System.Drawing.Size(777, 304); + this.groupBoxMessages.TabIndex = 3; + this.groupBoxMessages.TabStop = false; + this.groupBoxMessages.Text = "Messages"; + // + // textBoxMessageOutput + // + this.textBoxMessageOutput.BackColor = System.Drawing.SystemColors.WindowText; + this.textBoxMessageOutput.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBoxMessageOutput.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBoxMessageOutput.ForeColor = System.Drawing.SystemColors.Window; + this.textBoxMessageOutput.Location = new System.Drawing.Point(3, 16); + this.textBoxMessageOutput.Multiline = true; + this.textBoxMessageOutput.Name = "textBoxMessageOutput"; + this.textBoxMessageOutput.ReadOnly = true; + this.textBoxMessageOutput.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBoxMessageOutput.Size = new System.Drawing.Size(771, 285); + this.textBoxMessageOutput.TabIndex = 0; + this.textBoxMessageOutput.TabStop = false; + // + // groupBoxTransferConfiguration + // + this.groupBoxTransferConfiguration.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxTransferConfiguration.Controls.Add(this.textBoxSourceFiles); + this.groupBoxTransferConfiguration.Controls.Add(this.labelSourceFilesLocation); + this.groupBoxTransferConfiguration.Controls.Add(this.buttonOpenSourceFilesLocation); + this.groupBoxTransferConfiguration.Controls.Add(this.labelToUTC); + this.groupBoxTransferConfiguration.Controls.Add(this.labelFromUTC); + this.groupBoxTransferConfiguration.Controls.Add(this.labelToDate); + this.groupBoxTransferConfiguration.Controls.Add(this.dateTimePickerTo); + this.groupBoxTransferConfiguration.Controls.Add(this.labelFromDate); + this.groupBoxTransferConfiguration.Controls.Add(this.dateTimePickerFrom); + this.groupBoxTransferConfiguration.Controls.Add(this.textBoxDestinationCSVMeasurements); + this.groupBoxTransferConfiguration.Controls.Add(this.labelDestinationCSVMeasurements); + this.groupBoxTransferConfiguration.Controls.Add(this.buttonOpenDestinationCSVMeasurementsFile); + this.groupBoxTransferConfiguration.Controls.Add(this.textBoxSourceCSVMeasurements); + this.groupBoxTransferConfiguration.Controls.Add(this.labelSourceCSVMeasurements); + this.groupBoxTransferConfiguration.Controls.Add(this.buttonOpenSourceCSVMeasurementsFile); + this.groupBoxTransferConfiguration.Controls.Add(this.textBoxDestinationFiles); + this.groupBoxTransferConfiguration.Controls.Add(this.labelDestinationFilesLocation); + this.groupBoxTransferConfiguration.Controls.Add(this.buttonOpenDestinationFilesLocation); + this.groupBoxTransferConfiguration.Location = new System.Drawing.Point(18, 12); + this.groupBoxTransferConfiguration.Name = "groupBoxTransferConfiguration"; + this.groupBoxTransferConfiguration.Size = new System.Drawing.Size(775, 178); + this.groupBoxTransferConfiguration.TabIndex = 1; + this.groupBoxTransferConfiguration.TabStop = false; + this.groupBoxTransferConfiguration.Text = "Transfer Configuration"; + // + // labelToUTC + // + this.labelToUTC.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labelToUTC.AutoSize = true; + this.labelToUTC.Location = new System.Drawing.Point(727, 144); + this.labelToUTC.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.labelToUTC.Name = "labelToUTC"; + this.labelToUTC.Size = new System.Drawing.Size(29, 13); + this.labelToUTC.TabIndex = 17; + this.labelToUTC.Text = "UTC"; + this.labelToUTC.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelFromUTC + // + this.labelFromUTC.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labelFromUTC.AutoSize = true; + this.labelFromUTC.Location = new System.Drawing.Point(517, 144); + this.labelFromUTC.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.labelFromUTC.Name = "labelFromUTC"; + this.labelFromUTC.Size = new System.Drawing.Size(29, 13); + this.labelFromUTC.TabIndex = 16; + this.labelFromUTC.Text = "UTC"; + this.labelFromUTC.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelToDate + // + this.labelToDate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labelToDate.AutoSize = true; + this.labelToDate.Location = new System.Drawing.Point(559, 144); + this.labelToDate.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.labelToDate.Name = "labelToDate"; + this.labelToDate.Size = new System.Drawing.Size(23, 13); + this.labelToDate.TabIndex = 14; + this.labelToDate.Text = "&To:"; + this.labelToDate.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // dateTimePickerTo + // + this.dateTimePickerTo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.dateTimePickerTo.CustomFormat = "yyyy-MM-dd HH:mm:ss"; + this.dateTimePickerTo.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dateTimePickerTo.Location = new System.Drawing.Point(584, 141); + this.dateTimePickerTo.Name = "dateTimePickerTo"; + this.dateTimePickerTo.Size = new System.Drawing.Size(142, 20); + this.dateTimePickerTo.TabIndex = 15; + // + // labelFromDate + // + this.labelFromDate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labelFromDate.AutoSize = true; + this.labelFromDate.Location = new System.Drawing.Point(339, 144); + this.labelFromDate.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.labelFromDate.Name = "labelFromDate"; + this.labelFromDate.Size = new System.Drawing.Size(33, 13); + this.labelFromDate.TabIndex = 12; + this.labelFromDate.Text = "&From:"; + this.labelFromDate.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // dateTimePickerFrom + // + this.dateTimePickerFrom.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.dateTimePickerFrom.CustomFormat = "yyyy-MM-dd HH:mm:ss"; + this.dateTimePickerFrom.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dateTimePickerFrom.Location = new System.Drawing.Point(375, 141); + this.dateTimePickerFrom.Name = "dateTimePickerFrom"; + this.dateTimePickerFrom.Size = new System.Drawing.Size(142, 20); + this.dateTimePickerFrom.TabIndex = 13; + // + // textBoxDestinationCSVMeasurements + // + this.textBoxDestinationCSVMeasurements.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxDestinationCSVMeasurements.Location = new System.Drawing.Point(179, 109); + this.textBoxDestinationCSVMeasurements.Name = "textBoxDestinationCSVMeasurements"; + this.textBoxDestinationCSVMeasurements.Size = new System.Drawing.Size(547, 20); + this.textBoxDestinationCSVMeasurements.TabIndex = 10; + // + // labelDestinationCSVMeasurements + // + this.labelDestinationCSVMeasurements.AutoSize = true; + this.labelDestinationCSVMeasurements.Location = new System.Drawing.Point(19, 112); + this.labelDestinationCSVMeasurements.Name = "labelDestinationCSVMeasurements"; + this.labelDestinationCSVMeasurements.Size = new System.Drawing.Size(159, 13); + this.labelDestinationCSVMeasurements.TabIndex = 9; + this.labelDestinationCSVMeasurements.Text = "&Destination CSV Measurements:"; + this.labelDestinationCSVMeasurements.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // buttonOpenDestinationCSVMeasurementsFile + // + this.buttonOpenDestinationCSVMeasurementsFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOpenDestinationCSVMeasurementsFile.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.buttonOpenDestinationCSVMeasurementsFile.Location = new System.Drawing.Point(726, 108); + this.buttonOpenDestinationCSVMeasurementsFile.Name = "buttonOpenDestinationCSVMeasurementsFile"; + this.buttonOpenDestinationCSVMeasurementsFile.Size = new System.Drawing.Size(28, 23); + this.buttonOpenDestinationCSVMeasurementsFile.TabIndex = 11; + this.buttonOpenDestinationCSVMeasurementsFile.Text = "..."; + this.buttonOpenDestinationCSVMeasurementsFile.TextAlign = System.Drawing.ContentAlignment.TopCenter; + this.buttonOpenDestinationCSVMeasurementsFile.UseVisualStyleBackColor = true; + this.buttonOpenDestinationCSVMeasurementsFile.Click += new System.EventHandler(this.buttonOpenDestinationCSVMeasurementsFile_Click); + // + // textBoxSourceCSVMeasurements + // + this.textBoxSourceCSVMeasurements.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxSourceCSVMeasurements.Location = new System.Drawing.Point(179, 80); + this.textBoxSourceCSVMeasurements.Name = "textBoxSourceCSVMeasurements"; + this.textBoxSourceCSVMeasurements.Size = new System.Drawing.Size(547, 20); + this.textBoxSourceCSVMeasurements.TabIndex = 7; + // + // labelSourceCSVMeasurements + // + this.labelSourceCSVMeasurements.AutoSize = true; + this.labelSourceCSVMeasurements.Location = new System.Drawing.Point(38, 83); + this.labelSourceCSVMeasurements.Name = "labelSourceCSVMeasurements"; + this.labelSourceCSVMeasurements.Size = new System.Drawing.Size(140, 13); + this.labelSourceCSVMeasurements.TabIndex = 6; + this.labelSourceCSVMeasurements.Text = "&Source CSV Measurements:"; + this.labelSourceCSVMeasurements.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // buttonOpenSourceCSVMeasurementsFile + // + this.buttonOpenSourceCSVMeasurementsFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOpenSourceCSVMeasurementsFile.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.buttonOpenSourceCSVMeasurementsFile.Location = new System.Drawing.Point(726, 79); + this.buttonOpenSourceCSVMeasurementsFile.Name = "buttonOpenSourceCSVMeasurementsFile"; + this.buttonOpenSourceCSVMeasurementsFile.Size = new System.Drawing.Size(28, 23); + this.buttonOpenSourceCSVMeasurementsFile.TabIndex = 8; + this.buttonOpenSourceCSVMeasurementsFile.Text = "..."; + this.buttonOpenSourceCSVMeasurementsFile.TextAlign = System.Drawing.ContentAlignment.TopCenter; + this.buttonOpenSourceCSVMeasurementsFile.UseVisualStyleBackColor = true; + this.buttonOpenSourceCSVMeasurementsFile.Click += new System.EventHandler(this.buttonOpenSourceCSVMeasurementsFile_Click); + // + // textBoxDestinationFiles + // + this.textBoxDestinationFiles.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxDestinationFiles.Location = new System.Drawing.Point(178, 53); + this.textBoxDestinationFiles.Name = "textBoxDestinationFiles"; + this.textBoxDestinationFiles.Size = new System.Drawing.Size(547, 20); + this.textBoxDestinationFiles.TabIndex = 4; + // + // labelDestinationFilesLocation + // + this.labelDestinationFilesLocation.AutoSize = true; + this.labelDestinationFilesLocation.Location = new System.Drawing.Point(54, 56); + this.labelDestinationFilesLocation.Name = "labelDestinationFilesLocation"; + this.labelDestinationFilesLocation.Size = new System.Drawing.Size(124, 13); + this.labelDestinationFilesLocation.TabIndex = 3; + this.labelDestinationFilesLocation.Text = "&Destination files location:"; + this.labelDestinationFilesLocation.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // buttonOpenDestinationFilesLocation + // + this.buttonOpenDestinationFilesLocation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOpenDestinationFilesLocation.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.buttonOpenDestinationFilesLocation.Location = new System.Drawing.Point(726, 50); + this.buttonOpenDestinationFilesLocation.Name = "buttonOpenDestinationFilesLocation"; + this.buttonOpenDestinationFilesLocation.Size = new System.Drawing.Size(28, 23); + this.buttonOpenDestinationFilesLocation.TabIndex = 5; + this.buttonOpenDestinationFilesLocation.Text = "..."; + this.buttonOpenDestinationFilesLocation.TextAlign = System.Drawing.ContentAlignment.TopCenter; + this.buttonOpenDestinationFilesLocation.UseVisualStyleBackColor = true; + this.buttonOpenDestinationFilesLocation.Click += new System.EventHandler(this.buttonOpenDestinationFilesLocation_Click); + // + // toolTip + // + this.toolTip.AutomaticDelay = 200; + this.toolTip.AutoPopDelay = 20000; + this.toolTip.InitialDelay = 200; + this.toolTip.ReshowDelay = 40; + // + // openFileDialog + // + this.openFileDialog.DefaultExt = "csv"; + this.openFileDialog.Filter = "\"CSV files|*.csv|All files|*.*"; + // + // progressBar + // + this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.progressBar.Location = new System.Drawing.Point(15, 506); + this.progressBar.Name = "progressBar"; + this.progressBar.Size = new System.Drawing.Size(697, 23); + this.progressBar.TabIndex = 4; + // + // buttonGo + // + this.buttonGo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonGo.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.buttonGo.Location = new System.Drawing.Point(718, 506); + this.buttonGo.Name = "buttonGo"; + this.buttonGo.Size = new System.Drawing.Size(75, 23); + this.buttonGo.TabIndex = 2; + this.buttonGo.Text = "&Go!"; + this.buttonGo.UseVisualStyleBackColor = true; + this.buttonGo.Click += new System.EventHandler(this.buttonGo_Click); + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.buttonCancel.Location = new System.Drawing.Point(718, 506); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 5; + this.buttonCancel.Text = "&Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // textBoxSourceFiles + // + this.textBoxSourceFiles.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxSourceFiles.Location = new System.Drawing.Point(178, 25); + this.textBoxSourceFiles.Name = "textBoxSourceFiles"; + this.textBoxSourceFiles.Size = new System.Drawing.Size(547, 20); + this.textBoxSourceFiles.TabIndex = 1; + // + // labelSourceFilesLocation + // + this.labelSourceFilesLocation.AutoSize = true; + this.labelSourceFilesLocation.Location = new System.Drawing.Point(73, 28); + this.labelSourceFilesLocation.Name = "labelSourceFilesLocation"; + this.labelSourceFilesLocation.Size = new System.Drawing.Size(105, 13); + this.labelSourceFilesLocation.TabIndex = 0; + this.labelSourceFilesLocation.Text = "&Source files location:"; + this.labelSourceFilesLocation.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // buttonOpenSourceFilesLocation + // + this.buttonOpenSourceFilesLocation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOpenSourceFilesLocation.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.buttonOpenSourceFilesLocation.Location = new System.Drawing.Point(726, 22); + this.buttonOpenSourceFilesLocation.Name = "buttonOpenSourceFilesLocation"; + this.buttonOpenSourceFilesLocation.Size = new System.Drawing.Size(28, 23); + this.buttonOpenSourceFilesLocation.TabIndex = 2; + this.buttonOpenSourceFilesLocation.Text = "..."; + this.buttonOpenSourceFilesLocation.TextAlign = System.Drawing.ContentAlignment.TopCenter; + this.buttonOpenSourceFilesLocation.UseVisualStyleBackColor = true; + this.buttonOpenSourceFilesLocation.Click += new System.EventHandler(this.buttonOpenSourceFilesLocation_Click); + // + // OHTransfer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(804, 541); + this.Controls.Add(this.progressBar); + this.Controls.Add(this.buttonGo); + this.Controls.Add(this.groupBoxTransferConfiguration); + this.Controls.Add(this.groupBoxMessages); + this.Controls.Add(this.buttonCancel); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MinimumSize = new System.Drawing.Size(720, 480); + this.Name = "OHTransfer"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "openHistorian Data Transfer"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.OHTransfer_FormClosing); + this.groupBoxMessages.ResumeLayout(false); + this.groupBoxMessages.PerformLayout(); + this.groupBoxTransferConfiguration.ResumeLayout(false); + this.groupBoxTransferConfiguration.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.GroupBox groupBoxMessages; + private System.Windows.Forms.TextBox textBoxMessageOutput; + private System.Windows.Forms.GroupBox groupBoxTransferConfiguration; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog; + private System.Windows.Forms.ToolTip toolTip; + private System.Windows.Forms.TextBox textBoxDestinationCSVMeasurements; + private System.Windows.Forms.Label labelDestinationCSVMeasurements; + private System.Windows.Forms.Button buttonOpenDestinationCSVMeasurementsFile; + private System.Windows.Forms.TextBox textBoxSourceCSVMeasurements; + private System.Windows.Forms.Label labelSourceCSVMeasurements; + private System.Windows.Forms.OpenFileDialog openFileDialog; + private System.Windows.Forms.ProgressBar progressBar; + private System.Windows.Forms.Button buttonGo; + private System.Windows.Forms.Button buttonOpenSourceCSVMeasurementsFile; + private System.Windows.Forms.TextBox textBoxDestinationFiles; + private System.Windows.Forms.Label labelDestinationFilesLocation; + private System.Windows.Forms.Button buttonOpenDestinationFilesLocation; + private System.Windows.Forms.DateTimePicker dateTimePickerFrom; + private System.Windows.Forms.Label labelToDate; + private System.Windows.Forms.DateTimePicker dateTimePickerTo; + private System.Windows.Forms.Label labelFromDate; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Label labelToUTC; + private System.Windows.Forms.Label labelFromUTC; + private System.Windows.Forms.TextBox textBoxSourceFiles; + private System.Windows.Forms.Label labelSourceFilesLocation; + private System.Windows.Forms.Button buttonOpenSourceFilesLocation; + } +} + diff --git a/Source/Tools/OHTransfer/OHTransfer.cs b/Source/Tools/OHTransfer/OHTransfer.cs new file mode 100644 index 0000000000..9043ab4338 --- /dev/null +++ b/Source/Tools/OHTransfer/OHTransfer.cs @@ -0,0 +1,599 @@ +//****************************************************************************************************** +// OHTransfer.cs - Gbtc +// +// Copyright © 2025, Grid Protection Alliance. All Rights Reserved. +// +// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See +// the NOTICE file distributed with this work for additional information regarding copyright ownership. +// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this +// file except in compliance with the License. You may obtain a copy of the License at: +// +// http://opensource.org/licenses/MIT +// +// Unless agreed to in writing, the subject software distributed under the License is distributed on an +// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the +// License for the specific language governing permissions and limitations. +// +// Code Modification History: +// ---------------------------------------------------------------------------------------------------- +// 08/12/2025 - J. Ritchie Carroll +// Generated original version of source code. +// +//****************************************************************************************************** + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using GSF; +using GSF.IO; +using GSF.Snap; +using GSF.Snap.Filters; +using GSF.Snap.Services; +using GSF.Snap.Services.Reader; +using GSF.Snap.Storage; +using GSF.Threading; +using GSF.Units; +using GSF.Units.EE; +using openHistorian.Net; +using openHistorian.Snap; +using openHistorian.Snap.Definitions; +using CancellationToken = System.Threading.CancellationToken; + +namespace OHTransfer +{ + public partial class OHTransfer : Form + { + private CancellationTokenSource m_cancellationTokenSource; + private bool m_formClosing; + + public OHTransfer() + { + InitializeComponent(); + + DateTime nowFromTopOfHour = DateTime.UtcNow.BaselinedTimestamp(BaselineTimeInterval.Hour); + dateTimePickerFrom.Value = nowFromTopOfHour.AddDays(-30); + dateTimePickerTo.Value = nowFromTopOfHour; + } + + private void OHTransfer_FormClosing(object sender, FormClosingEventArgs e) + { + m_formClosing = true; + } + + private void buttonOpenSourceFilesLocation_Click(object sender, EventArgs e) + { + folderBrowserDialog.Description = "Find source location for existing openHistorian 2.0 archive files"; + + if (Directory.Exists(textBoxSourceFiles.Text)) + folderBrowserDialog.SelectedPath = textBoxSourceFiles.Text; + + if (folderBrowserDialog.ShowDialog(this) == DialogResult.OK) + textBoxSourceFiles.Text = folderBrowserDialog.SelectedPath; + + if (!textBoxSourceFiles.Text.EndsWith(Path.DirectorySeparatorChar.ToString())) + textBoxSourceFiles.Text += Path.DirectorySeparatorChar; + } + + private void buttonOpenDestinationFilesLocation_Click(object sender, EventArgs e) + { + folderBrowserDialog.Description = "Find destination location for new openHistorian 2.0 archive files"; + + if (Directory.Exists(textBoxDestinationFiles.Text)) + folderBrowserDialog.SelectedPath = textBoxDestinationFiles.Text; + + if (folderBrowserDialog.ShowDialog(this) == DialogResult.OK) + textBoxDestinationFiles.Text = folderBrowserDialog.SelectedPath; + + if (!textBoxDestinationFiles.Text.EndsWith(Path.DirectorySeparatorChar.ToString())) + textBoxDestinationFiles.Text += Path.DirectorySeparatorChar; + + if (!Directory.Exists(textBoxDestinationFiles.Text)) + Directory.CreateDirectory(textBoxDestinationFiles.Text); + } + + private void buttonOpenSourceCSVMeasurementsFile_Click(object sender, EventArgs e) + { + openFileDialog.Title = "Find source openHistorian 2.0 CSV measurements export file"; + openFileDialog.FileName = File.Exists(textBoxSourceCSVMeasurements.Text) ? textBoxSourceCSVMeasurements.Text : string.Empty; + + if (openFileDialog.ShowDialog(this) == DialogResult.OK) + textBoxSourceCSVMeasurements.Text = openFileDialog.FileName; + } + + private void buttonOpenDestinationCSVMeasurementsFile_Click(object sender, EventArgs e) + { + openFileDialog.Title = "Find destination openHistorian 2.0 CSV measurements export file"; + openFileDialog.FileName = File.Exists(textBoxDestinationCSVMeasurements.Text) ? textBoxDestinationCSVMeasurements.Text : string.Empty; + + if (openFileDialog.ShowDialog(this) == DialogResult.OK) + textBoxDestinationCSVMeasurements.Text = openFileDialog.FileName; + } + + private void buttonGo_Click(object sender, EventArgs e) + { + ClearUpdateMessages(); + UpdateProgressBar(0); + + if (string.IsNullOrWhiteSpace(textBoxSourceFiles.Text)) + { + MessageBox.Show("Please select a source location for existing openHistorian 2.0 archive files.", "Missing Source Location", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + if (string.IsNullOrWhiteSpace(textBoxDestinationFiles.Text)) + { + MessageBox.Show("Please select a destination location for new openHistorian 2.0 archive files.", "Missing Destination Location", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + if (string.IsNullOrWhiteSpace(textBoxSourceCSVMeasurements.Text)) + { + MessageBox.Show("Please select a source openHistorian 2.0 CSV measurements export file.", "Missing Source File", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + if (string.IsNullOrWhiteSpace(textBoxDestinationCSVMeasurements.Text)) + { + MessageBox.Show("Please select a destination openHistorian 2.0 CSV measurements export file.", "Missing Destination File", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + if (!Directory.Exists(textBoxDestinationFiles.Text)) + { + MessageBox.Show("The specified destination location does not exist.", "Invalid Destination Location", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + if (!File.Exists(textBoxSourceCSVMeasurements.Text)) + { + MessageBox.Show("The specified source openHistorian 2.0 CSV measurements export file does not exist.", "Invalid Source File", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + if (!File.Exists(textBoxDestinationCSVMeasurements.Text)) + { + MessageBox.Show("The specified destination openHistorian 2.0 CSV measurements export file does not exist.", "Invalid Destination File", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + DateTime startTime = dateTimePickerFrom.Value; + DateTime endTime = dateTimePickerTo.Value; + + if (endTime <= startTime) + { + MessageBox.Show("The end time must be greater than the start time.", "Invalid Time Range", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + long processStartTime = DateTime.UtcNow.Ticks; + string[] csvLines; + + // Read CSV measurements from source file + ShowUpdateMessage("Reading source CSV measurements file: {0}...", textBoxSourceCSVMeasurements.Text); + + try + { + csvLines = File.ReadAllLines(textBoxSourceCSVMeasurements.Text); + } + catch (Exception ex) + { + ShowUpdateMessage("Error reading source CSV measurements file: {0}", ex.Message); + return; + } + + // Parse ID and SignalReference columns from CSV lines into a dictionary using header row + (Dictionary sourceCSVData, string deviceName) = ParseCSVMeasurements(csvLines); + + if (sourceCSVData.Count == 0) + { + ShowUpdateMessage("No valid measurements found in source CSV file -- operation cancelled."); + return; + } + + // Read CSV measurements from destination file + ShowUpdateMessage("Reading destination CSV measurements file: {0}...", textBoxDestinationCSVMeasurements.Text); + + try + { + csvLines = File.ReadAllLines(textBoxDestinationCSVMeasurements.Text); + } + catch (Exception ex) + { + ShowUpdateMessage("Error reading destination CSV measurements file: {0}", ex.Message); + return; + } + + // Parse ID and SignalReference columns from CSV lines ulong a dictionary using header row + (Dictionary destinationCSVData, _) = ParseCSVMeasurements(csvLines); + + if (destinationCSVData.Count == 0) + { + ShowUpdateMessage("No valid measurements found in destination CSV file -- operation cancelled."); + return; + } + + // Find measurements by SignalReference.Kind + SignalReference.Index in source CSV that also exist in destination CSV + // where the result is source CSV historian ID to destination CSV historian ID mapping + Dictionary historianIDMapping = new(); + + foreach (KeyValuePair sourceEntry in sourceCSVData) + { + SignalReference sourceSignal = sourceEntry.Value; + + // Find matching SignalReference in destination CSV + foreach (KeyValuePair destinationEntry in destinationCSVData) + { + SignalReference destinationSignal = destinationEntry.Value; + + if (sourceSignal.Kind != destinationSignal.Kind || sourceSignal.Index != destinationSignal.Index) + continue; + + // Also match on Acronym for Calculation signals + if (sourceSignal.Kind == SignalKind.Calculation && sourceSignal.Acronym != destinationSignal.Acronym) + continue; + + historianIDMapping[sourceEntry.Key] = destinationEntry.Key; + break; // Found a match, no need to check further + } + } + + if (historianIDMapping.Count == 0) + { + ShowUpdateMessage("No matching measurements found between source and destination CSV files -- operation cancelled."); + return; + } + + ShowUpdateMessage("Found {0:N0} matching measurements between source and destination CSV files.", historianIDMapping.Count); + + string sourcePath = textBoxSourceFiles.Text.Trim(); + string destinationPath = textBoxDestinationFiles.Text.Trim(); + + m_cancellationTokenSource = new CancellationTokenSource(); + + new Thread(() => + { + try + { + EnableGoButton(false); + + CancellationToken cancellationToken = m_cancellationTokenSource.Token; + + int totalDays = (int)(endTime - startTime).TotalDays; + SetProgressMaximum(totalDays); + + const string InstanceName = "PPA"; + + // Establish archive information for this historian instance + HistorianServerDatabaseConfig archiveInfo = new(InstanceName, sourcePath, false) + { + TargetFileSize = (long)(1.5D * SI.Giga), + DirectoryMethod = ArchiveDirectoryMethod.YearThenMonth + }; + + HistorianServer server = new(archiveInfo); + SnapClient client = SnapClient.Connect(server.Host); + ClientDatabaseBase database = client.GetDatabase(InstanceName); + Dictionary attachedFiles = database.GetAllAttachedFiles().ToDictionary(file => file.Id, file => file); + + using ArchiveList archiveList = new(); + archiveList.LoadFiles(attachedFiles.Values.Select(file => file.FileName)); + + WorkerThreadSynchronization workerThreadSynchronization = new(); + long lastStatusMessage = DateTime.UtcNow.Ticks; + + workerThreadSynchronization.RequestCallback(() => + { + cancellationToken.ThrowIfCancellationRequested(); + + if (DateTime.UtcNow.Ticks - lastStatusMessage <= Ticks.PerSecond * 5) + return; + + lastStatusMessage = DateTime.UtcNow.Ticks; + ShowUpdateMessage("Processed {0:N0} points so far, scanning at {1:N3} points per second...", Stats.PointsReturned, Stats.PointsReturned / ((DateTime.UtcNow.Ticks - processStartTime) * Ticks.PerSecond)); + }); + + SeekFilterBase timeFilter = TimestampSeekFilter.CreateFromRange(startTime, endTime); + MatchFilterBase pointFilter = PointIdMatchFilter.CreateFromList(historianIDMapping.Keys); + + using SequentialReaderStream reader = new(archiveList, SortedTreeEngineReaderOptions.Default, timeFilter, pointFilter, workerThreadSynchronization); + + string completeFileName = Path.Combine(destinationPath, $"{deviceName}-Exported.d2"); + string pendingFileName = Path.Combine(destinationPath, $"{FilePath.GetFileNameWithoutExtension(completeFileName)}.~d2i"); + Guid stage3FileFlags = FileFlags.GetStage(3); + + void processNewArchive(Guid archiveID) + { + if (!attachedFiles.TryGetValue(archiveID, out ArchiveDetails archiveDetails)) + return; + + double processedDays = (archiveDetails.EndTime - archiveDetails.StartTime).TotalDays; + + UpdateProgressBar((int)processedDays); + ShowUpdateMessage("Processing archive \"{0}\" from {1} to {2}, {3:0.00%) complete...", archiveDetails.FileName, archiveDetails.StartTime.ToString("yyyy-MM-dd HH:mm:ss"), archiveDetails.EndTime.ToString("yyyy-MM-dd HH:mm:ss"), processedDays / totalDays); + } + + SortedTreeFileSimpleWriter.Create(pendingFileName, completeFileName, 4096, processNewArchive, HistorianFileEncodingDefinition.TypeGuid, reader, stage3FileFlags); + + Ticks processDuration = DateTime.UtcNow.Ticks - processStartTime; + ShowUpdateMessage("Data transfer completed in {0}", processDuration.ToElapsedTimeString(2)); + } + catch (Exception ex) + { + ShowUpdateMessage("Error during transfer: {0}", ex.Message); + } + finally + { + EnableGoButton(true); + } + }) + { + IsBackground = true + } + .Start(); + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + m_cancellationTokenSource.Cancel(); + ShowUpdateMessage("Transfer operation cancelled by user."); + } + + private (Dictionary csvData, string deviceName) ParseCSVMeasurements(string[] csvLines) + { + Dictionary csvData = new(); + + if (csvLines is null || csvLines.Length <= 1) + return (csvData, ""); + + // Parse header to find column indices using robust CSV parser + string[] headers = ParseCSVLine(csvLines[0]); + + int deviceIndex = Array.FindIndex(headers, h => h.Trim().Equals("Device", StringComparison.OrdinalIgnoreCase)); + + if (deviceIndex < 0) + { + ShowUpdateMessage("CSV header must contain 'Device' column."); + return (csvData, ""); + } + + // Validate that device names in all rows are the same + string firstDeviceName = null; + + for (int i = 1; i < csvLines.Length; i++) + { + if (string.IsNullOrWhiteSpace(csvLines[i])) + continue; + + string[] columns = ParseCSVLine(csvLines[i]); + + if (columns.Length <= deviceIndex) + continue; + + string deviceName = columns[deviceIndex].Trim(); + + if (string.IsNullOrEmpty(firstDeviceName)) + { + firstDeviceName = deviceName; + } + else if (!string.Equals(firstDeviceName, deviceName, StringComparison.OrdinalIgnoreCase)) + { + ShowUpdateMessage("All rows in CSV file must have the same 'Device' name. Export is designed to transfer one device at a time."); + return (csvData, ""); + } + } + + int idIndex = Array.FindIndex(headers, h => h.Trim().Equals("ID", StringComparison.OrdinalIgnoreCase)); + int signalRefIndex = Array.FindIndex(headers, h => h.Trim().Equals("SignalReference", StringComparison.OrdinalIgnoreCase)); + + if (idIndex < 0 || signalRefIndex < 0) + { + ShowUpdateMessage("CSV header must contain 'ID' and 'SignalReference' columns."); + return (csvData, ""); + } + + int maxColumnIndex = Math.Max(Math.Max(deviceIndex, idIndex), signalRefIndex); + int calcIndex = 1; + + // Parse data rows using robust CSV parser + for (int i = 1; i < csvLines.Length; i++) + { + if (string.IsNullOrWhiteSpace(csvLines[i])) + continue; + + string[] columns = ParseCSVLine(csvLines[i]); + + if (columns.Length <= maxColumnIndex) + continue; + + string idValue = columns[idIndex].Trim(); + + if (string.IsNullOrEmpty(idValue)) + continue; + + string[] parts = idValue.Split(':'); + + if (parts.Length != 2 || !ulong.TryParse(parts[1], out ulong id)) + { + ShowUpdateMessage("Invalid ID format in row {0}: {1}. Expected format is 'Source:ID'.", i + 1, idValue); + continue; + } + + string signalReferenceValue = columns[signalRefIndex].Trim(); + + if (string.IsNullOrEmpty(signalReferenceValue)) + continue; + + SignalReference signalReference = new(signalReferenceValue); + + if (signalReference.Kind == SignalKind.Unknown) + { + parts = signalReferenceValue.Split('-'); + + if (parts.Length > 1) + { + // Track matching acronyms for Calculation signals + signalReference.Acronym = parts[parts.Length - 1].Trim(); + signalReference.Kind = SignalKind.Calculation; + signalReference.Index = calcIndex++; + } + else + { + continue; // Skip invalid SignalReference + } + } + + csvData[id] = signalReference; + } + + return (csvData, firstDeviceName ?? ""); + } + + private static string[] ParseCSVLine(string line) + { + if (string.IsNullOrEmpty(line)) + return []; + + List fields = []; + StringBuilder current = new(); + bool inQuotes = false; + + for (int i = 0; i < line.Length; i++) + { + char c = line[i]; + + if (inQuotes) + { + if (c == '"') + { + // Check for escaped quote ("") + if (i + 1 < line.Length && line[i + 1] == '"') + { + current.Append('"'); + i++; // Skip the next quote + } + else + { + inQuotes = false; + } + } + else + { + current.Append(c); + } + } + else + { + switch (c) + { + case ',': + fields.Add(current.ToString()); + current.Clear(); + break; + case '"': + inQuotes = true; + break; + default: + current.Append(c); + break; + } + } + } + + fields.Add(current.ToString()); + + return fields.ToArray(); + } + + private void EnableGoButton(bool enabled) + { + if (m_formClosing) + return; + + if (InvokeRequired) + { + BeginInvoke(new Action(EnableGoButton), enabled); + } + else + { + buttonGo.Enabled = enabled; + } + } + + private void UpdateProgressBar(int value) + { + if (m_formClosing) + return; + + if (InvokeRequired) + { + BeginInvoke(new Action(UpdateProgressBar), value); + } + else + { + if (value < progressBar.Minimum) + value = progressBar.Minimum; + + if (value > progressBar.Maximum) + progressBar.Maximum = value; + + progressBar.Value = value; + } + } + + private void SetProgressMaximum(int maximum) + { + if (m_formClosing) + return; + + if (InvokeRequired) + { + BeginInvoke(new Action(SetProgressMaximum), maximum); + } + else + { + progressBar.Maximum = maximum; + } + } + + private void ClearUpdateMessages() + { + if (m_formClosing) + return; + + if (InvokeRequired) + { + BeginInvoke(new Action(ClearUpdateMessages)); + } + else + { + lock (textBoxMessageOutput) + textBoxMessageOutput.Text = ""; + } + } + + private void ShowUpdateMessage(string message, params object[] args) + { + if (m_formClosing) + return; + + if (InvokeRequired) + { + BeginInvoke(new Action(ShowUpdateMessage), message, args); + } + else + { + StringBuilder outputText = new(); + + outputText.AppendFormat(message, args); + outputText.AppendLine(); + + lock (textBoxMessageOutput) + textBoxMessageOutput.AppendText(outputText.ToString()); + } + } + } +} diff --git a/Source/Tools/OHTransfer/OHTransfer.csproj b/Source/Tools/OHTransfer/OHTransfer.csproj new file mode 100644 index 0000000000..8a0819fe37 --- /dev/null +++ b/Source/Tools/OHTransfer/OHTransfer.csproj @@ -0,0 +1,110 @@ + + + + + Debug + AnyCPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC} + WinExe + OHTransfer + OHTransfer + v4.8 + 512 + true + true + latest + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + OHTransfer.ico + + + + ..\..\Dependencies\GSF\GSF.Core.dll + + + + + + + + + + + + + + + + Form + + + OHTransfer.cs + + + + + OHTransfer.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + {040e2ae7-021b-435a-adbf-06d07ee0a67d} + GSF.SortedTreeStore + + + {7b53c942-e891-461c-b09c-49faba82f19d} + openHistorian.Core + + + + + + + + \ No newline at end of file diff --git a/Source/Tools/OHTransfer/OHTransfer.ico b/Source/Tools/OHTransfer/OHTransfer.ico new file mode 100644 index 0000000000000000000000000000000000000000..e074a5092a6022ab29260502ae65e157b304269f GIT binary patch literal 61835 zcmdSB2Urx@(m&iY3^Pn7=bUpA5Xl%wqF~lF5X_1Z5fp&|1E?q{3aA7Fh!GH!AZf^; zBoQS@P9h*Vr}IBO=148o3Zaw4#lL=NB( zWHW*wf`W_J0Yn7JhW8{T7q6ed=PYOlqN(}gS`I-5#Ni9@K;IvKfgqtP5kwJQ!$;wr z#rv>85LnOOA3Ha_U9(IlBi3eR-jS0BYt)UG)<>^0t+{mLQYkeg;2lCWAs`fOq9V;6 z|AuPBVM<$rhum`gTFr8!j6HJFIlyXpQRMcGt-6w;-D65}twlkX-c!vT)+01kk_6{& z{2ML?8{pc5Pp3(e`RN*@U*C5-n(KIYPvLxUz&qy2L$&8*C3~io(C%!%e%icIkOS}QUY|MWA zG^%{vey8`72b@a^uX@*zIkj;-vhMU7GA@c66wU9_l`o0kGOiK;hQ(ZiDh&D_1R>(q zuTI^nq4K)G+$hCo@6LQ}Ew#K%V|`{+(8U~@b7&o+>XptbbGJ2I_;zyvkAL|GsmObC zRz1qVvWa_0^D38bL~tHH^lBdY_7x__gIfi-(7-}+NI*U@GB_Kv@4;sTxzvFuKkhyu z8rd<=eX|+R13nJvJu@n_?%#Q0ecc1_|}ylVOwVvseitDQPhsr0fR zh(&b({*b1xa_4TDsGcJqmD)^~L0=Frr3Tiy=3NTC^T5pg$ zS!I|%4Rq5-CN!RZi<7w1QmA^jSxGatpVcCfOogQ~hQ5kp6XywBFZ~F%MR@1t4KfeA z8`KiNk1x%h0LJ-KlPj6yjO{r?B=zW41+A!7igt7>>wOAB!|`t>?G*AO^a$Nx2f{aT zK*UqNM&wq_cj?$3p#EwAm}ib&J61JK*j7Bjdgu3lc$QF9WCBTziqA=Y?o<~m1% z$}1@#cg!9W^&5zRq0DurFi|gg@tH1<7{Xl?s*&tySe?}ar2lx>+56KVm5dY>~sAh4 zmn^XjYclH(?aqh%zn@4?sC@q_uDbc^`A-Yy&(#1Q_lo3_j5=69!Y;gp9HR1q4Aj%f zK_Ju7Acd@I1|qoqlSF$H*ol{yHSOc9hlMa@uPkW09g*fd0~2?&=AyShp+ z>9cVy1(-C@z>=r*UQt^by47NESQ6rKG(%cNA*qR<=M_*%MgD^<1|lD!xa5W-4x}*#|7O!5>ZR|o+$U^8xX(W3HZZW0R4Ic5W7|zCbNm+Xq?Xd9qPF}sP9k}@~4MxY$sy+ zv3PtQn5c}sHe^W1dL4@m?%M(E;3M32KF7{5^4)!*Z5LVkb zaY97qen*Se^KVspsl!?NITH&e#k0V;a0VD;k58@281{3_9^g`rYV%gU*W!V=eni&4 z{M-G80QHjaJ-G7ZN#^uj_%ED(Y=F~;4ba!Jr^q`8XiG+QG)l*Q1!{25)Xf+J%OLM2 zxs#Kt^Cx^=O2#-gW(*=LpLODw#k3RQK8)t*%19<&K;a>u-mmrZau6_5W~*B_tABYdXhZK9sU zF3I}@AoYj6=osg4grs1j5^Z_=7GW8}|)p$M`Kd&18!lO=sYn~!2&!Cp8MpB1`*HB#GNML!jC}yhR z)GmW+UZ7K81(Y9dnGrd0IYjc_*Gz~$-K`4mQX&S<>OEnNQ zqOOP6I1c=xeigH$?bc7@9JT1BgH@e0pc_M}5jJKw4F?K8x9opf_dolQNJ85nvdcKp z&zhHWPp*YJWz8rrFnq(^A+?463;Yp7f&1Bi!UEsxR_4AVROS9=lPy*Z`x`@px{e=9 zl_Bk?su7=3NEBfT^DOvV2n~^dLqQQFTS1?=mF|rNbU!ShZD${%2$MH)ZpK5q@}Kb#gxIXi3>V08Gb^J?Q2;pC)Eqv{|?*l`O$tjZ2$9*`nWOBcHP9ggQHy#?hk??>_F(&4}vzR zpg$gPFDE5J|D5~J)|~fqfZV%T81Cnp4}3gIK*X)G`3GU|b39!uBHWIA%9N4lo)_f( z2Kafpfc1)6D1S6|?V6Qvu2Jz^YUG1LF2r7m2m+9N0O=tChy`*0@gNS?ej*h^0OA20 z^E^w*fmnn}AhP|@d>lkBdgX^R&J=>6fKm_~PzGFGD!{|LRUp8(1~_bO0Bfxpfz^rz zu*JR_wx5UKL4#D}C7B0w_4ETA|z+Q*EnY@&e{b2qBUqx=k)$pLo`G{K;;MTQD z;Ig+Ew*Q$m{xlv690Q7^?5h#+Jf-K#R6ELFqX+5RQ8P(B&Q7xp8 zbf9vX*2yhTwK)a^5iDF4i-#F(Kjn_FKq6dYuYs&&>hy_&nQOM#ofW{5ZR$gW58U(>&FpviT%Gg(#y?HJolmLVUUcvU0=Z_yqcU+>Lj_li+ zzg<=;cV3W>3Fm(fod21x0H`E%)>oiSzypsgF9L|(!!}-($hJVmyUh<3?le7+4{dxP zd%G!G+&e2>E;x8rFVh#;^vMI;F>YWpzyoxnxq1ZksQcg^NO+f)M|0Ve>9cNidK9FH zjceaV`FUh)K#(_xuY3NwO?G+keqMzA>b$5!PT7pItUPK-dj4Yb@UO-5F2pvz8?_S? z1fk8&6Ve2@g1-P-U>zU@)B^VNb%5vUdtlve1nlRzf&CmGu$$%shRNJxBBr#nt?%-X zhN2>*sW>00DE@$C#%CiXNpCP6#py_MX%XgA(FdftwiC&FmW<>)O+$*~Uqed%wf&G! z6No9a@7E^vh^WVOB|$riW!H1xYy`Ax^?>MK3%D*+Ole*<>9G0Ay@2`<=zecj$TK5s zOgr~$MgN79B}oH_e##J0<3;an8EEf{MRx+hJFTp~pa#|h-oW|+*_}Q+mEEX$)}6e- zwx1V3yWkb<|G#wv{sSHi(uWa~j1jWVo1rVv&Yo6;xSDKS56iz12yX?Pa4h(P>IV%U zbZFxdL{`a_^R3o(u0C!lsu{ofpXua(WCXQGtzLE`p7{f8H_L}H;Z-Auan=}Onl(l? z$Qru>?fYq#U-Ehgpx7R2_lrbA|L0Z{5W4wg(CB{4k|h^jArNm6<`kita3Ewn2j=&B z;I}r>{S-mm5DGt8mm)wmCL`RKrMJtFrH?!4&@Z}f^Xi)=64Z(qza1ePW{+PnU`|e> zzR@z~B+z*~#_|PJU-V5V$96XghPNyT-)bB*e%QJM(r=CY$r;)Z{8^W%Y;=3G*3+-8cIg9lOVdXJ^s^_XjSFUgX~`@wDwqa(S>s@7>hP3h z+TextDSe7c_uJoyhc*qGJZxKH@~G`kT3x)&0ev-^64YvRiYC>PP(}BId$|W2fH-#w z96N4{R|6t4QSD8V54(YOLjRC<%J3B09@;MIyP>$Kan8ilTIQ(V@!}EU%J?3{{8^Wz zdQ_{cNld%I^2hCe+CCo2&8Y(0=A>xREjh|KJt01H0SmY;Vgct-+&op8aKYeeiIj9? zdlTw&$vs{4xzI6(z9aPQCV?sR?ba1c_`1CxC+;u(SN_*;tl*#>Az%qnA|8q!_Zp6J zz67Bi4%E!~?N=kRl+3Lb{6w;*pTc^^VS?ju$=Gj#{e?3wCFsYAQ_MvVle%PMIDp(UNY5dz6-@*J z>q%`A4AMBd$IHhPfYK8wh)3rDt{cq&UE3(WfX)R}=jgon)?oLhZ#iN}$xhMp#a_~p9YM9^g$vH<$=s0Y)QQ#v7O4K3sKaC^{LQKp&+t*XmF3GtX2)8e=~391k2lK zV0k+g=%-Pq#qBw+!51k+0&B}htNM=*v>)JHq(b81fxgU7(3+iPE3sjqAAUgZ3Fnyg zAP+#vW|#+<6mZW<{X&n1c$E;R0IJJTIP<^%z_WZxB3{^>cGf7BdkV$*)=u*RyIEea z>J!g`(h1JDoWfKEJ~b-x-{Cv|kpu)Bx>t~hVpcR?(;S{j`*}W=ErIUkCK)_)a4&NZ zg@MTbsrFHx7I`3Yh*{GZCYjums4ao+<%-8S-{KH5FO3_WNB^_OPaZ^8(9Rj9aE~pG zIa?WgZhYqWPnCBoX_c$&Mwo0W6^v5)=3l7(RY@ z#FT+UBp}gQgy$gm5qL3J0s}#51~8$`j1oj3MiH(BX+&a95|NlfFcL!u8)!ucfPv6| z5CQnY>wJa}_{uPauSo#V3TX(^6uh1@1!!Cvg*zM}{fbjS^x^Lh06LNBk!mbh=p+Ep z4XFcCE2L(^!u%J)%xEocV&FY8)KGxT&y+%pyAuBPld9l(HDO`q6MlBM4l^?ZD9i55_(%@@xS06 zDn*ocgi42)NEF0G7N{!-!*FeGqezkvhzb15_y7KZ;ETD)gOFTflV$0{f_!g)5X4J_ z__LwUmJbYc@_P~<7HGwW<-vJz0CW5R#PcPZpw9$tPZl)-QK34pdwUtgPYT%ko6G*b z`oFnGV|rv5FN6Jlm9`!~OZSC#m>aai)QO)cSgHcVmJpQwog?j8E|QgyFJ@t$*(d=0 zTmil;NO=%fCjqBLm6nh*#Sk297jgS<=>n~ISEXp=uIBK$AM(x951&J+7xLc*JdS;U z{D1gE{>f1Pp?M%wUdlO$drhMF7tdu#0Y6H3&U*#Y1svcsA@;)lx1z%R;;+h(laPxP zyw2mdUXfL!shSCt<(V)BTLhjxDg%$giavMMl!|_}fo+>cd2{)>L)ACFKtxD+Vyl71v0{}TErKS%+V3i0szDG><$LLP*+JX73_G>c-C zEUXgZl}fMRc{~Y-IFKhGmU$cpGb_k&&-=3j>aamD)GsOSs(Y>giaf5S2ibtDLtaKmxM_G$Lk_PmXG_uJ+Etw2N zHc-C9vD_qo4(7T1A;t?^{h@y>%+hP5#NU8bW?2wVW1nC?kk|IPJh1yq zReDuH z2{~~8%7y%=!u{(N+`E$D+Drvf;u&Da#>|TD+ETvukEQShfZV=Z?ryTI930wR0S-Es zf%w=DDE188TnZrnF~9QvQwDB1mfy2kawm0IdOvL#^6n1(0RrUZR|Zg7;d-HQ%Ti)A z?$LpHD^Plzor5-{%i3KQV+zqzi|W0 zK5k%?&jrM6X%*0?HZ(lW4QpAHAwD__NqmqkVY2LX3qMah#QLEOysrQsPcmE!uRphZ zEEW6wt{72QDMe1Z6djY5LT#g5_*^cWYfK;}oCW#MzKHU&F#pFmmUc`xq8Zao*1g~6 zX!x+r6Vh3O2d!t9-ETRoAJuYpX=L-+rO|EfN+%!3sGK`FW1Qy-R#rLzoA2V#pN7~t z^r=^m@c{EmZXmUl-UP7+h=Ze2lM!#XEF?TI+tSn^WlTXf2`I{;lnfMP-+&b+Z-$Z{ zGgsWXng;F99NZ!2ya%dEIq>)2NJ%~u9CFTl4ZsIVe{1>AF8!Nw)w52-@_Cn{!o8Lb zfm@A00OpSH-~0mjf*SzO^?JYsF?G%>wSacH7EmsJ21LKlK;mXOuO?OTcMk`TOoXIk$G%4>lokdX25%^8K77^ibJD#Jo!o;#NVXWeR=WxvEN8Abr@hjrLo|b>mF(w4@Efi}*WkKaY^Mxo^p$q}2 z44(ks#mag0Gb_g}o48nUg`fPh;v6%40OmW6!gaOde~0_URvfavBi`?a@ka6A!lfQ| zv2a3E4m95hjnANYRj3Rca2x~z>&E2lk6)Djh1_8Ih4)t(P+Z06H8+gto+&4r!vENwbdGBXgh_OmN>INw0EPQVWT*STev|RRD8TYvA0M|10+0e}`ZuDFcX7(hwR8GSN&Ls8vq*4isPXL9F~6 z3$I3V&R8;pwm=NG5umXl;o$o5m5*9Y*XGY5Fg|Q9v4&Q&yo?7dxy>~P?IIU}CD6wG zH+{|jL>5yRN7Bw1Lk!=JnCPXA)M}*+0}U90|HuD4w)C^F{;Z^MuxuCv@~lEtBxO-mh?UT{TZ-n;pf;Kf z%+It<=oW_YtOl5)HnlFL@0@$dFu^)^oHb{bWi9fK#-faiW)|}ZVN4E{K|5^}+R1}J z_tp1lo0RWY&EtFgWTVOxk`N zVCCS*kka6o@Swk~N$f`K6TgZo-f#aR0^=q+&%aG<&KU4COB-4V^9F0tIGO?E*97uz zRyqevVLT0$ML%bfm2YX7HaxW(+B9wz*KTSV_s2HL zPagkS`2#ECr$~_EX^!kHtcHcxY{bt&EQA4Ll58t(=l{k(jI~I^wWycaKd%2~uosPg z{p26b-!v`x!9R=#E`_lCt>`e2`Fl(NpeT~L2(SAn>T>~p}CnkR>96#?-Hb!(Q{Vle(F}VlX^tuOU^rVxb z7uSWcPVD)&*#8~x0+9DO&K>v#u8T0{`FpwquifEXQX^Fp5jMpQZ^wmU{^S>-du>4C zM^32Hj~FDH_lxQr7!PK}q0yKq%KP@B315%0apIA8e?1=huLOZO)6aevhWSrVxSa?K zd{=RRFYq4;jid6q-~m;P_)PEU9TmCAwgv&1n}EhIQGJf)&Z7I2dh!q}j*7-}(HOdU z_SnSsqH&)y<>SPo|E;{k6$y0;#B5~fa^yGshu}92Jr-KY*n$AA@sMP-Qp4)cr$fjZo?jMIn5w&jm{o+}^YIP$wW^RN2# zU;U28==jyi@QWIX4$S>35_X5VUTAFicO(%FbG||e0L=+Q&slUImJojub&#Ht@Xw#& zhBh&(zeOS!Wk6%usEvTy3NSw%*k=xyP)NLZ*H78Gq`w$o8Ui^qhvtrT&pcpF&Bto*G{n*Ib|5-A?aX{@F z)J8+c0?m_Nn$S10DgC>vTfrcHU(Rni-G7VdPOejoBLS5ZNH7OZC4~so-$()Ruq#y^t`#TW%wv1HgR_6ucj2@~Q-?;(DaN(B&G z>ZQ^s&M;<196)dfUxK25YnV0i|C8-DDw-MKXTTX+v^xc+d*@)I?sGnFQ3rm&gwh)__-Lh6My8n!&fBQbl8{`oOaXoJZ25nXsVoqY4 zshw!QLyQTFVm7F~jbcu4y-Nu!qZaGDrUT;!NHCYsq#h+s7OCH&FYqeR?!j*?SRbH% z?VH4O_D*2Bdd4xGkm|a}S@tTk`M+-+qXMH?66{|(k0Lcjz<~M@&MjMrQ(z#5^J{;g z{8QmKR}jlH7GFD>`8gV#g2qajqFkpW{)W-oYUx9^zlk9sjkJ|Lg?i4f2n0 zU?|+MkHw&m20!`xjrX6mlHhzZ%Hu+D^3AdbXag%-xLMyZS@pvbCHPH~RX-2ViRPS# zxaAXAj|3Xa_&sj+v#$TIN{Fe#rpY*%uXB#Bdm;-?wNHMw?Tk>}szH7Mo*b4viPA~g!;(qK`Y{eS5|?GNam z61haFzAPEWePBiBe%D@5n^VRU@npiu!CBn&cn9G9Zld%17VK)DX+;EMuWPmuopPCQn7>ZL`cklu+3tAb(ip5d=_J93=*bFKI z0mkNBl-)S{RJ}Q8;ktF^h8Pa&@BjbdSd8(Ia1bZk2z8SW2@k#H|3($Tb)zF0EhXHe)h<3|azk>E9Af}o#DF%Tm(v;<4|VU^GCOCt~TuVFd#YYCrY-9OJNnMgjXWFTK* z`4uiJ*gnYjTP%GUizVbp6W(8dr3WnMSarhh>0vq)gxlaZUr-EKw!-u`v}FFch9&EF zCg)<=`m@wW{8{gvLwwM3Y5_4tOR#`Quu1@vv(Re*yNOjYe_X?EWL?8#(p(6$KYYrlLshcD;5 z>O&u!vQC_I-;(9C(Z4q;{rS#=TQXF-&z+u_IJKqtTgy{d@2@pVf~8g#Bd#hZUuZbW z7Oxe)hOcus!<SyDiT5Osj^kDekU}-0?wy!L1HVs{x@COt43_WRN^{fDO;d@&dDqGN+ZuhOnO;5$x?W*ynTL2tr;+W~^px zSH4X`>%9#h7r6SdFPb{XH)P?ch9ANW3iWX`yW^WfK06NdI3FE|`CiP}+xnhqg=xIH zHwGCfyg4>EiCGZ#P;GtWYc>>>8r9kq_psuQncfyIhX*;S$V>gbm*g25m{A$_9}QgD zJrRA89mrH4Ns?#!e6a9qY4UY>?xZ6r`TTkK;d|lHZ>k?Z_ibXXl3Ci?tO8%t;3@7m z6IS-Dfd9GOfSRct9sJUu~wzv)PAl#UVN@zOuQUWwA~&n-U9XJgv7buJ0VN$(~plf2qQb(W|&8V_x9^p3#|cxl5H zvDVBS+LTx88^$=>YxA|wcrs@>b%}u>3Nd>$V;eEOUZebOj5Fu80M z1;1cC;Y@3mfqm&`gY}m1U>iCu$wb^PP8R4+2}E3&4Bs>%ptoXfUaHu(*1B-T=PjCH z>W&j*AE_Ui*r9TpSZ52H)@CXAIu^c8_n;1$+`r)qo*o`;bD!sOJ|w4#;5&D zr08G_SHB~_zuzhT@Z(M=w)act=rYTPcClKt#x9IA2eH7PcP^^c*h_5Ti{0|3W7>Vw z{-qDLA)EJ9TRuKFw)d*0z+=OBy!sv;`ySSNegSL?L5?fD-n{tgGk0jtJ;EhdW0gl7 zqwTaLWfm?6hE_AHp?qm@8WgANUufxLIIt<})qHKs zIVF>u5E9U+vahv;jCR;Zv}GRl zZNW9O+d46x<@rp@`?*K>xjf^a*#6Yrf!Nu#^8R_{OJ>1px@B%^W!Ju+8pkE_O_8dE zp^$cPM(Fd#U8wbcwdq{1;Qfa~yE1)SQ@MxkwR`(lf0Q_hb1X@+ozmpFud(gIv}PCE zS}gp4#zGfoXM{Fw%bo0_#y_Wl$-Ff*>HxEJBIE8~@^hfw>{hvWz%0Ef_p^|~AxYAn z-PBw66L$E;6#3mrhc|RA|SAy56=~6?BVvS*jPR+{$DfVXC_k zD26EtrGejl?u<_#na^%JowKYnS!@S>lrY#i6?I=cM|iOGaHEA`VkpyUE$491ID6oQ z@vV7-g)u_jx)&$?s8fUbLiP4Lx#qM_l{P7T-E80#tz=BrT1!Aij^JYNyI6#m5n81Fm=^@9&4Oeow3=5~M)=Hup+1_T! zST^sIeJ0>zZ3EHpbfA-FeTY_^H%;t@lm;jO5>^}>R#uB^v({m363u)+(mhmB~I}T*}G`bzm(U0v@ubT+J9|( zqI_F+O+qnc7_Yr5c=;EK%cJ`uCz(rO1DAE(fs%45l^md^@JeW{zq zdi%$GmGA`xA#f8U6kuS;;lzR(a^SpyCw6dr`;FPHeN4gB+I_)w?q%K~Ny95X^U1mi zh+e50kiKr|w8?s6C$nt)16Z

cMswHAL>4)Z4m)MW(jPXRa}QoY7^z_e9ykeng@` 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 24, 17 + + + 185, 17 + + + 277, 17 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgADAABAAsJERwNgTCMEfdO9RX/UP0V/1D8Ff9Q/RX/TvQV/ylx + EO4MCwxMEBsNAAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAQsAAQALCBAbDYEvhxH2TvMV/1D9 + Ff9R/hX/OKcS/xAcDYcAAAoDCwcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAALAAEA + CwgPGAyCLX8Q9E3xFP9J4xT/HUYOzAUACx4LCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAcACwABAAsHDhUMbCp1EOssfhD7DREMYhIiDQAMCwwAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAsAAAAKBA0QDFQPFgx/CgYMEwsJDAAAAAAAAAAAAAAA + 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 + + + \ No newline at end of file diff --git a/Source/Tools/OHTransfer/OHTransfer.sln b/Source/Tools/OHTransfer/OHTransfer.sln new file mode 100644 index 0000000000..ff8aa0a553 --- /dev/null +++ b/Source/Tools/OHTransfer/OHTransfer.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36401.2 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OHTransfer", "OHTransfer.csproj", "{FE351919-B4A6-4D81-91CC-64BC1D588ECC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {365C2FB8-B1C5-4D4E-A5EA-2F8F759AC740} + EndGlobalSection +EndGlobal diff --git a/Source/Tools/OHTransfer/OHTransfer.sln.DotSettings b/Source/Tools/OHTransfer/OHTransfer.sln.DotSettings new file mode 100644 index 0000000000..7dbc342733 --- /dev/null +++ b/Source/Tools/OHTransfer/OHTransfer.sln.DotSettings @@ -0,0 +1,2 @@ + + CSV \ No newline at end of file diff --git a/Source/Tools/OHTransfer/Program.cs b/Source/Tools/OHTransfer/Program.cs new file mode 100644 index 0000000000..c290b1316b --- /dev/null +++ b/Source/Tools/OHTransfer/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace OHTransfer +{ + internal static class Program + { + ///

+ /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new OHTransfer()); + } + } +} diff --git a/Source/Tools/OHTransfer/Properties/AssemblyInfo.cs b/Source/Tools/OHTransfer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..5cfa672c5a --- /dev/null +++ b/Source/Tools/OHTransfer/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("OHTransfer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("OHTransfer")] +[assembly: AssemblyCopyright("Copyright © 2025")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("fe351919-b4a6-4d81-91cc-64bc1d588ecc")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Source/Tools/OHTransfer/Properties/Resources.Designer.cs b/Source/Tools/OHTransfer/Properties/Resources.Designer.cs new file mode 100644 index 0000000000..db3b947816 --- /dev/null +++ b/Source/Tools/OHTransfer/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace OHTransfer.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OHTransfer.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Source/Tools/OHTransfer/Properties/Resources.resx b/Source/Tools/OHTransfer/Properties/Resources.resx new file mode 100644 index 0000000000..af7dbebbac --- /dev/null +++ b/Source/Tools/OHTransfer/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Tools/OHTransfer/Properties/Settings.Designer.cs b/Source/Tools/OHTransfer/Properties/Settings.Designer.cs new file mode 100644 index 0000000000..e8cafbbd4b --- /dev/null +++ b/Source/Tools/OHTransfer/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace OHTransfer.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Source/Tools/OHTransfer/Properties/Settings.settings b/Source/Tools/OHTransfer/Properties/Settings.settings new file mode 100644 index 0000000000..39645652af --- /dev/null +++ b/Source/Tools/OHTransfer/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Source/Tools/OHTransfer/openHistorian.ico b/Source/Tools/OHTransfer/openHistorian.ico new file mode 100644 index 0000000000000000000000000000000000000000..9efe34e9371a8d857230da5cd5e9739f2a0810f4 GIT binary patch literal 370070 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�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 literal 0 HcmV?d00001 diff --git a/Source/openHistorian.sln b/Source/openHistorian.sln index 80a7c3120c..03cb2fd8ea 100755 --- a/Source/openHistorian.sln +++ b/Source/openHistorian.sln @@ -537,6 +537,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docker", "Docker", "{7F01BE DockerReadMe.md = DockerReadMe.md EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OHTransfer", "Tools\OHTransfer\OHTransfer.csproj", "{FE351919-B4A6-4D81-91CC-64BC1D588ECC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1200,6 +1202,24 @@ Global {7F5BBF4C-A27D-4367-9D1E-95AEA45EC58B}.Release|x64.Build.0 = Release|Any CPU {7F5BBF4C-A27D-4367-9D1E-95AEA45EC58B}.Release|x86.ActiveCfg = Release|Any CPU {7F5BBF4C-A27D-4367-9D1E-95AEA45EC58B}.Release|x86.Build.0 = Release|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Debug|x64.ActiveCfg = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Debug|x64.Build.0 = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Debug|x86.ActiveCfg = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Debug|x86.Build.0 = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Mono|Any CPU.ActiveCfg = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Mono|Any CPU.Build.0 = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Mono|x64.ActiveCfg = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Mono|x64.Build.0 = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Mono|x86.ActiveCfg = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Mono|x86.Build.0 = Debug|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Release|Any CPU.Build.0 = Release|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Release|x64.ActiveCfg = Release|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Release|x64.Build.0 = Release|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Release|x86.ActiveCfg = Release|Any CPU + {FE351919-B4A6-4D81-91CC-64BC1D588ECC}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1260,6 +1280,7 @@ Global {D61BBB31-74A7-498D-8C36-FB18C72609F8} = {880E5A69-EE1E-46EC-838F-783F188D8B49} {9DE89239-FEDC-4218-8770-1167A22EC999} = {550621C3-C903-4405-971A-DC4BAA286BA0} {7F5BBF4C-A27D-4367-9D1E-95AEA45EC58B} = {3A952272-B64C-48E0-9CB2-0130AC28D72E} + {FE351919-B4A6-4D81-91CC-64BC1D588ECC} = {3A952272-B64C-48E0-9CB2-0130AC28D72E} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {CA73B94E-45F7-4272-BCA2-4B4386CC92B2} From 9997a69e4a8c374aafb86633e71f9ded44e60695 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 13 Aug 2025 12:43:14 -0500 Subject: [PATCH 02/15] Improved O(n^2) mapping, fixed percent complete calcs, added load/save for UI elements --- .../Tools/OHTransfer/OHTransfer.Designer.cs | 71 ++++++++------- Source/Tools/OHTransfer/OHTransfer.cs | 91 +++++++++++++++---- Source/Tools/OHTransfer/OHTransfer.csproj | 4 + 3 files changed, 113 insertions(+), 53 deletions(-) diff --git a/Source/Tools/OHTransfer/OHTransfer.Designer.cs b/Source/Tools/OHTransfer/OHTransfer.Designer.cs index 070b22929d..f0cccb4dfc 100644 --- a/Source/Tools/OHTransfer/OHTransfer.Designer.cs +++ b/Source/Tools/OHTransfer/OHTransfer.Designer.cs @@ -33,6 +33,9 @@ private void InitializeComponent() this.groupBoxMessages = new System.Windows.Forms.GroupBox(); this.textBoxMessageOutput = new System.Windows.Forms.TextBox(); this.groupBoxTransferConfiguration = new System.Windows.Forms.GroupBox(); + this.textBoxSourceFiles = new System.Windows.Forms.TextBox(); + this.labelSourceFilesLocation = new System.Windows.Forms.Label(); + this.buttonOpenSourceFilesLocation = new System.Windows.Forms.Button(); this.labelToUTC = new System.Windows.Forms.Label(); this.labelFromUTC = new System.Windows.Forms.Label(); this.labelToDate = new System.Windows.Forms.Label(); @@ -54,9 +57,6 @@ private void InitializeComponent() this.progressBar = new System.Windows.Forms.ProgressBar(); this.buttonGo = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button(); - this.textBoxSourceFiles = new System.Windows.Forms.TextBox(); - this.labelSourceFilesLocation = new System.Windows.Forms.Label(); - this.buttonOpenSourceFilesLocation = new System.Windows.Forms.Button(); this.groupBoxMessages.SuspendLayout(); this.groupBoxTransferConfiguration.SuspendLayout(); this.SuspendLayout(); @@ -118,6 +118,38 @@ private void InitializeComponent() this.groupBoxTransferConfiguration.TabStop = false; this.groupBoxTransferConfiguration.Text = "Transfer Configuration"; // + // textBoxSourceFiles + // + this.textBoxSourceFiles.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxSourceFiles.Location = new System.Drawing.Point(178, 25); + this.textBoxSourceFiles.Name = "textBoxSourceFiles"; + this.textBoxSourceFiles.Size = new System.Drawing.Size(547, 20); + this.textBoxSourceFiles.TabIndex = 1; + // + // labelSourceFilesLocation + // + this.labelSourceFilesLocation.AutoSize = true; + this.labelSourceFilesLocation.Location = new System.Drawing.Point(73, 28); + this.labelSourceFilesLocation.Name = "labelSourceFilesLocation"; + this.labelSourceFilesLocation.Size = new System.Drawing.Size(105, 13); + this.labelSourceFilesLocation.TabIndex = 0; + this.labelSourceFilesLocation.Text = "&Source files location:"; + this.labelSourceFilesLocation.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // buttonOpenSourceFilesLocation + // + this.buttonOpenSourceFilesLocation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOpenSourceFilesLocation.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.buttonOpenSourceFilesLocation.Location = new System.Drawing.Point(726, 22); + this.buttonOpenSourceFilesLocation.Name = "buttonOpenSourceFilesLocation"; + this.buttonOpenSourceFilesLocation.Size = new System.Drawing.Size(28, 23); + this.buttonOpenSourceFilesLocation.TabIndex = 2; + this.buttonOpenSourceFilesLocation.Text = "..."; + this.buttonOpenSourceFilesLocation.TextAlign = System.Drawing.ContentAlignment.TopCenter; + this.buttonOpenSourceFilesLocation.UseVisualStyleBackColor = true; + this.buttonOpenSourceFilesLocation.Click += new System.EventHandler(this.buttonOpenSourceFilesLocation_Click); + // // labelToUTC // this.labelToUTC.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); @@ -327,38 +359,6 @@ private void InitializeComponent() this.buttonCancel.UseVisualStyleBackColor = true; this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); // - // textBoxSourceFiles - // - this.textBoxSourceFiles.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxSourceFiles.Location = new System.Drawing.Point(178, 25); - this.textBoxSourceFiles.Name = "textBoxSourceFiles"; - this.textBoxSourceFiles.Size = new System.Drawing.Size(547, 20); - this.textBoxSourceFiles.TabIndex = 1; - // - // labelSourceFilesLocation - // - this.labelSourceFilesLocation.AutoSize = true; - this.labelSourceFilesLocation.Location = new System.Drawing.Point(73, 28); - this.labelSourceFilesLocation.Name = "labelSourceFilesLocation"; - this.labelSourceFilesLocation.Size = new System.Drawing.Size(105, 13); - this.labelSourceFilesLocation.TabIndex = 0; - this.labelSourceFilesLocation.Text = "&Source files location:"; - this.labelSourceFilesLocation.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - // - // buttonOpenSourceFilesLocation - // - this.buttonOpenSourceFilesLocation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonOpenSourceFilesLocation.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.buttonOpenSourceFilesLocation.Location = new System.Drawing.Point(726, 22); - this.buttonOpenSourceFilesLocation.Name = "buttonOpenSourceFilesLocation"; - this.buttonOpenSourceFilesLocation.Size = new System.Drawing.Size(28, 23); - this.buttonOpenSourceFilesLocation.TabIndex = 2; - this.buttonOpenSourceFilesLocation.Text = "..."; - this.buttonOpenSourceFilesLocation.TextAlign = System.Drawing.ContentAlignment.TopCenter; - this.buttonOpenSourceFilesLocation.UseVisualStyleBackColor = true; - this.buttonOpenSourceFilesLocation.Click += new System.EventHandler(this.buttonOpenSourceFilesLocation_Click); - // // OHTransfer // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -375,6 +375,7 @@ private void InitializeComponent() this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "openHistorian Data Transfer"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.OHTransfer_FormClosing); + this.Load += new System.EventHandler(this.OHTransfer_Load); this.groupBoxMessages.ResumeLayout(false); this.groupBoxMessages.PerformLayout(); this.groupBoxTransferConfiguration.ResumeLayout(false); diff --git a/Source/Tools/OHTransfer/OHTransfer.cs b/Source/Tools/OHTransfer/OHTransfer.cs index 9043ab4338..ec1f0af051 100644 --- a/Source/Tools/OHTransfer/OHTransfer.cs +++ b/Source/Tools/OHTransfer/OHTransfer.cs @@ -23,12 +23,14 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; using GSF; +using GSF.Configuration; using GSF.IO; using GSF.Snap; using GSF.Snap.Filters; @@ -38,6 +40,7 @@ using GSF.Threading; using GSF.Units; using GSF.Units.EE; +using GSF.Windows.Forms; using openHistorian.Net; using openHistorian.Snap; using openHistorian.Snap.Definitions; @@ -59,9 +62,43 @@ public OHTransfer() dateTimePickerTo.Value = nowFromTopOfHour; } + private void OHTransfer_Load(object sender, EventArgs e) + { + CategorizedSettingsElementCollection settings = ConfigurationFile.Current.Settings["systemSettings"]; + + settings.Add("sourceFiles", textBoxSourceFiles.Text, "openHistorian 2.0 source files location", false, SettingScope.User); + settings.Add("destinationFiles", textBoxDestinationFiles.Text, "openHistorian 2.0 destination files location", false, SettingScope.User); + settings.Add("sourceCSVMeasurements", textBoxSourceCSVMeasurements.Text, "openHistorian 2.0 source CSV measurements export file", false, SettingScope.User); + settings.Add("destinationCSVMeasurements", textBoxDestinationCSVMeasurements.Text, "openHistorian 2.0 destination CSV measurements export file", false, SettingScope.User); + settings.Add("fromDate", dateTimePickerFrom.Value.ToString(dateTimePickerFrom.CustomFormat), "Start date for transfer", false, SettingScope.User); + settings.Add("toDate", dateTimePickerTo.Value.ToString(dateTimePickerFrom.CustomFormat), "End date for transfer", false, SettingScope.User); + + textBoxSourceFiles.Text = settings["sourceFiles"].Value; + textBoxDestinationFiles.Text = settings["destinationFiles"].Value; + textBoxSourceCSVMeasurements.Text = settings["sourceCSVMeasurements"].Value; + textBoxDestinationCSVMeasurements.Text = settings["destinationCSVMeasurements"].Value; + dateTimePickerFrom.Value = DateTime.ParseExact(settings["fromDate"].Value, dateTimePickerFrom.CustomFormat, null, DateTimeStyles.AssumeUniversal); + dateTimePickerTo.Value = DateTime.ParseExact(settings["toDate"].Value, dateTimePickerTo.CustomFormat, null, DateTimeStyles.AssumeUniversal); + + this.RestoreLocation(); + } + private void OHTransfer_FormClosing(object sender, FormClosingEventArgs e) { + CategorizedSettingsElementCollection settings = ConfigurationFile.Current.Settings["systemSettings"]; + m_formClosing = true; + + this.SaveLocation(); + + settings["sourceFiles"].Value = textBoxSourceFiles.Text; + settings["destinationFiles"].Value = textBoxDestinationFiles.Text; + settings["sourceCSVMeasurements"].Value = textBoxSourceCSVMeasurements.Text; + settings["destinationCSVMeasurements"].Value = textBoxDestinationCSVMeasurements.Text; + settings["fromDate"].Value = dateTimePickerFrom.Value.ToString(dateTimePickerFrom.CustomFormat); + settings["toDate"].Value = dateTimePickerTo.Value.ToString(dateTimePickerFrom.CustomFormat); + + ConfigurationFile.Current.Save(); } private void buttonOpenSourceFilesLocation_Click(object sender, EventArgs e) @@ -220,24 +257,33 @@ private void buttonGo_Click(object sender, EventArgs e) // where the result is source CSV historian ID to destination CSV historian ID mapping Dictionary historianIDMapping = new(); + // Pre-index destination signals for O(1) lookup by match key + Dictionary<(SignalKind Kind, int Index), ulong> signalReferenceIDMap = []; + Dictionary<(SignalKind Kind, int Index, string Acronym), ulong> calculatedSignalReferenceIDMap = []; + + foreach (KeyValuePair destinationEntry in destinationCSVData) + { + SignalReference destinationSignal = destinationEntry.Value; + + if (destinationSignal.Kind == SignalKind.Calculation) + calculatedSignalReferenceIDMap[(destinationSignal.Kind, destinationSignal.Index, destinationSignal.Acronym ?? string.Empty)] = destinationEntry.Key; + else + signalReferenceIDMap[(destinationSignal.Kind, destinationSignal.Index)] = destinationEntry.Key; + } + foreach (KeyValuePair sourceEntry in sourceCSVData) { SignalReference sourceSignal = sourceEntry.Value; - // Find matching SignalReference in destination CSV - foreach (KeyValuePair destinationEntry in destinationCSVData) + if (sourceSignal.Kind == SignalKind.Calculation) { - SignalReference destinationSignal = destinationEntry.Value; - - if (sourceSignal.Kind != destinationSignal.Kind || sourceSignal.Index != destinationSignal.Index) - continue; - - // Also match on Acronym for Calculation signals - if (sourceSignal.Kind == SignalKind.Calculation && sourceSignal.Acronym != destinationSignal.Acronym) - continue; - - historianIDMapping[sourceEntry.Key] = destinationEntry.Key; - break; // Found a match, no need to check further + if (calculatedSignalReferenceIDMap.TryGetValue((sourceSignal.Kind, sourceSignal.Index, sourceSignal.Acronym ?? string.Empty), out ulong destID)) + historianIDMapping[sourceEntry.Key] = destID; + } + else + { + if (signalReferenceIDMap.TryGetValue((sourceSignal.Kind, sourceSignal.Index), out ulong destID)) + historianIDMapping[sourceEntry.Key] = destID; } } @@ -277,7 +323,9 @@ private void buttonGo_Click(object sender, EventArgs e) HistorianServer server = new(archiveInfo); SnapClient client = SnapClient.Connect(server.Host); ClientDatabaseBase database = client.GetDatabase(InstanceName); - Dictionary attachedFiles = database.GetAllAttachedFiles().ToDictionary(file => file.Id, file => file); + Dictionary attachedFiles = database.GetAllAttachedFiles() + .OrderBy(file => file.EndTime) + .ToDictionary(file => file.Id, file => file); using ArchiveList archiveList = new(); archiveList.LoadFiles(attachedFiles.Values.Select(file => file.FileName)); @@ -303,6 +351,13 @@ private void buttonGo_Click(object sender, EventArgs e) string completeFileName = Path.Combine(destinationPath, $"{deviceName}-Exported.d2"); string pendingFileName = Path.Combine(destinationPath, $"{FilePath.GetFileNameWithoutExtension(completeFileName)}.~d2i"); + + if (File.Exists(pendingFileName)) + File.Delete(pendingFileName); + + if (File.Exists(completeFileName)) + File.Delete(completeFileName); + Guid stage3FileFlags = FileFlags.GetStage(3); void processNewArchive(Guid archiveID) @@ -310,7 +365,7 @@ void processNewArchive(Guid archiveID) if (!attachedFiles.TryGetValue(archiveID, out ArchiveDetails archiveDetails)) return; - double processedDays = (archiveDetails.EndTime - archiveDetails.StartTime).TotalDays; + double processedDays = (archiveDetails.EndTime - startTime).TotalDays; UpdateProgressBar((int)processedDays); ShowUpdateMessage("Processing archive \"{0}\" from {1} to {2}, {3:0.00%) complete...", archiveDetails.FileName, archiveDetails.StartTime.ToString("yyyy-MM-dd HH:mm:ss"), archiveDetails.EndTime.ToString("yyyy-MM-dd HH:mm:ss"), processedDays / totalDays); @@ -352,7 +407,7 @@ private void buttonCancel_Click(object sender, EventArgs e) // Parse header to find column indices using robust CSV parser string[] headers = ParseCSVLine(csvLines[0]); - int deviceIndex = Array.FindIndex(headers, h => h.Trim().Equals("Device", StringComparison.OrdinalIgnoreCase)); + int deviceIndex = Array.FindIndex(headers, header => header.Trim().Equals("Device", StringComparison.OrdinalIgnoreCase)); if (deviceIndex < 0) { @@ -386,8 +441,8 @@ private void buttonCancel_Click(object sender, EventArgs e) } } - int idIndex = Array.FindIndex(headers, h => h.Trim().Equals("ID", StringComparison.OrdinalIgnoreCase)); - int signalRefIndex = Array.FindIndex(headers, h => h.Trim().Equals("SignalReference", StringComparison.OrdinalIgnoreCase)); + int idIndex = Array.FindIndex(headers, header => header.Trim().Equals("ID", StringComparison.OrdinalIgnoreCase)); + int signalRefIndex = Array.FindIndex(headers, header => header.Trim().Equals("SignalReference", StringComparison.OrdinalIgnoreCase)); if (idIndex < 0 || signalRefIndex < 0) { diff --git a/Source/Tools/OHTransfer/OHTransfer.csproj b/Source/Tools/OHTransfer/OHTransfer.csproj index 8a0819fe37..a9215c3553 100644 --- a/Source/Tools/OHTransfer/OHTransfer.csproj +++ b/Source/Tools/OHTransfer/OHTransfer.csproj @@ -42,7 +42,11 @@ ..\..\Dependencies\GSF\GSF.Core.dll + + ..\..\Dependencies\GSF\GSF.Windows.dll + + From 9b0a521181b060236a0b6064f43faf65e765c44c Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 13 Aug 2025 14:17:30 -0500 Subject: [PATCH 03/15] Added worker sync thread pulse to forward scanning operations --- .../Services/Reader/SequentialReaderStream'2.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Source/Libraries/GSF.SortedTreeStore/Snap/Services/Reader/SequentialReaderStream'2.cs b/Source/Libraries/GSF.SortedTreeStore/Snap/Services/Reader/SequentialReaderStream'2.cs index d63c7ae4ea..e0ec1b71b2 100755 --- a/Source/Libraries/GSF.SortedTreeStore/Snap/Services/Reader/SequentialReaderStream'2.cs +++ b/Source/Libraries/GSF.SortedTreeStore/Snap/Services/Reader/SequentialReaderStream'2.cs @@ -202,9 +202,20 @@ private bool ReadCatchAll(TKey key, TValue value) m_pointCount = 0; } - TryAgain: + long retries = 0; + + TryAgain: if (!m_timedOut) { + retries++; + + if (retries % 10000 == 0) + { + m_workerThreadSynchronization.PulseSafeToCallback(); + Interlocked.Add(ref Stats.PointsScanned, retries); + retries = 0; + } + if (m_keyMatchIsUniverse) { if (m_firstTableScanner is null) From abf69323ed999432f102f941f10a826bf7486ccf Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 13 Aug 2025 14:24:36 -0500 Subject: [PATCH 04/15] Improved UI feedback operations --- Source/Tools/OHTransfer/OHTransfer.cs | 78 ++++++++++++------- Source/Tools/OHTransfer/OHTransfer.csproj | 1 + .../OHTransfer/SequentialStreamReader.cs | 62 +++++++++++++++ 3 files changed, 114 insertions(+), 27 deletions(-) create mode 100644 Source/Tools/OHTransfer/SequentialStreamReader.cs diff --git a/Source/Tools/OHTransfer/OHTransfer.cs b/Source/Tools/OHTransfer/OHTransfer.cs index ec1f0af051..487d9a2c34 100644 --- a/Source/Tools/OHTransfer/OHTransfer.cs +++ b/Source/Tools/OHTransfer/OHTransfer.cs @@ -20,6 +20,8 @@ // Generated original version of source code. // //****************************************************************************************************** +// ReSharper disable AccessToModifiedClosure +// ReSharper disable AccessToDisposedClosure using System; using System.Collections.Generic; @@ -71,7 +73,7 @@ private void OHTransfer_Load(object sender, EventArgs e) settings.Add("sourceCSVMeasurements", textBoxSourceCSVMeasurements.Text, "openHistorian 2.0 source CSV measurements export file", false, SettingScope.User); settings.Add("destinationCSVMeasurements", textBoxDestinationCSVMeasurements.Text, "openHistorian 2.0 destination CSV measurements export file", false, SettingScope.User); settings.Add("fromDate", dateTimePickerFrom.Value.ToString(dateTimePickerFrom.CustomFormat), "Start date for transfer", false, SettingScope.User); - settings.Add("toDate", dateTimePickerTo.Value.ToString(dateTimePickerFrom.CustomFormat), "End date for transfer", false, SettingScope.User); + settings.Add("toDate", dateTimePickerTo.Value.ToString(dateTimePickerTo.CustomFormat), "End date for transfer", false, SettingScope.User); textBoxSourceFiles.Text = settings["sourceFiles"].Value; textBoxDestinationFiles.Text = settings["destinationFiles"].Value; @@ -96,9 +98,12 @@ private void OHTransfer_FormClosing(object sender, FormClosingEventArgs e) settings["sourceCSVMeasurements"].Value = textBoxSourceCSVMeasurements.Text; settings["destinationCSVMeasurements"].Value = textBoxDestinationCSVMeasurements.Text; settings["fromDate"].Value = dateTimePickerFrom.Value.ToString(dateTimePickerFrom.CustomFormat); - settings["toDate"].Value = dateTimePickerTo.Value.ToString(dateTimePickerFrom.CustomFormat); + settings["toDate"].Value = dateTimePickerTo.Value.ToString(dateTimePickerTo.CustomFormat); ConfigurationFile.Current.Save(); + + m_cancellationTokenSource?.Cancel(); + Thread.Sleep(500); } private void buttonOpenSourceFilesLocation_Click(object sender, EventArgs e) @@ -297,8 +302,10 @@ private void buttonGo_Click(object sender, EventArgs e) string sourcePath = textBoxSourceFiles.Text.Trim(); string destinationPath = textBoxDestinationFiles.Text.Trim(); + bool processCompleted = false; m_cancellationTokenSource = new CancellationTokenSource(); + ICancellationToken monitorCancellationToken = null; new Thread(() => { @@ -330,24 +337,49 @@ private void buttonGo_Click(object sender, EventArgs e) using ArchiveList archiveList = new(); archiveList.LoadFiles(attachedFiles.Values.Select(file => file.FileName)); - WorkerThreadSynchronization workerThreadSynchronization = new(); + SeekFilterBase timeFilter = TimestampSeekFilter.CreateFromRange(startTime, endTime); + MatchFilterBase pointFilter = PointIdMatchFilter.CreateFromList(historianIDMapping.Keys); + + using WorkerThreadSynchronization workerThreadSynchronization = new(); + using SequentialStreamReader reader = new(archiveList, SortedTreeEngineReaderOptions.Default, timeFilter, pointFilter, workerThreadSynchronization); + long lastStatusMessage = DateTime.UtcNow.Ticks; - workerThreadSynchronization.RequestCallback(() => + void readingMonitor() { - cancellationToken.ThrowIfCancellationRequested(); - - if (DateTime.UtcNow.Ticks - lastStatusMessage <= Ticks.PerSecond * 5) + if (cancellationToken.IsCancellationRequested || processCompleted) + { + reader.CancelReader(); return; + } + + workerThreadSynchronization.RequestCallback(() => + { + if (DateTime.UtcNow.Ticks - lastStatusMessage < Ticks.PerSecond * 4) + return; - lastStatusMessage = DateTime.UtcNow.Ticks; - ShowUpdateMessage("Processed {0:N0} points so far, scanning at {1:N3} points per second...", Stats.PointsReturned, Stats.PointsReturned / ((DateTime.UtcNow.Ticks - processStartTime) * Ticks.PerSecond)); - }); + lastStatusMessage = DateTime.UtcNow.Ticks; - SeekFilterBase timeFilter = TimestampSeekFilter.CreateFromRange(startTime, endTime); - MatchFilterBase pointFilter = PointIdMatchFilter.CreateFromList(historianIDMapping.Keys); + if (Stats.PointsReturned == 0L) + { + ShowUpdateMessage("\r\nScanned {0:N0} points so far, scanning at {1:N0} points per second...", Stats.PointsScanned, (Stats.PointsReturned + Stats.PointsScanned) / ((DateTime.UtcNow.Ticks - processStartTime) / Ticks.PerSecond)); + } + else + { + ShowUpdateMessage("\r\nProcessed {0:N0} points so far, scanning at {1:N0} points per second:", Stats.PointsReturned, (Stats.PointsReturned + Stats.PointsScanned) / ((DateTime.UtcNow.Ticks - processStartTime) / Ticks.PerSecond)); - using SequentialReaderStream reader = new(archiveList, SortedTreeEngineReaderOptions.Default, timeFilter, pointFilter, workerThreadSynchronization); + double processedDays = (reader.LastKey.TimestampAsDate - startTime).TotalDays; + + UpdateProgressBar((int)processedDays); + ShowUpdateMessage(" {0:0.00%} complete...", processedDays / totalDays); + } + }); + + Application.DoEvents(); + monitorCancellationToken = new Action(readingMonitor).DelayAndExecute(2000); + } + + monitorCancellationToken = new Action(readingMonitor).DelayAndExecute(2000); string completeFileName = Path.Combine(destinationPath, $"{deviceName}-Exported.d2"); string pendingFileName = Path.Combine(destinationPath, $"{FilePath.GetFileNameWithoutExtension(completeFileName)}.~d2i"); @@ -358,23 +390,13 @@ private void buttonGo_Click(object sender, EventArgs e) if (File.Exists(completeFileName)) File.Delete(completeFileName); - Guid stage3FileFlags = FileFlags.GetStage(3); - - void processNewArchive(Guid archiveID) - { - if (!attachedFiles.TryGetValue(archiveID, out ArchiveDetails archiveDetails)) - return; - - double processedDays = (archiveDetails.EndTime - startTime).TotalDays; - - UpdateProgressBar((int)processedDays); - ShowUpdateMessage("Processing archive \"{0}\" from {1} to {2}, {3:0.00%) complete...", archiveDetails.FileName, archiveDetails.StartTime.ToString("yyyy-MM-dd HH:mm:ss"), archiveDetails.EndTime.ToString("yyyy-MM-dd HH:mm:ss"), processedDays / totalDays); - } - - SortedTreeFileSimpleWriter.Create(pendingFileName, completeFileName, 4096, processNewArchive, HistorianFileEncodingDefinition.TypeGuid, reader, stage3FileFlags); + SortedTreeFileSimpleWriter.Create(pendingFileName, completeFileName, 4096, null, HistorianFileEncodingDefinition.TypeGuid, reader, FileFlags.GetStage(3)); Ticks processDuration = DateTime.UtcNow.Ticks - processStartTime; + processCompleted = true; + ShowUpdateMessage("Data transfer completed in {0}", processDuration.ToElapsedTimeString(2)); + UpdateProgressBar(totalDays); } catch (Exception ex) { @@ -382,6 +404,7 @@ void processNewArchive(Guid archiveID) } finally { + monitorCancellationToken?.Cancel(); EnableGoButton(true); } }) @@ -575,6 +598,7 @@ private void EnableGoButton(bool enabled) else { buttonGo.Enabled = enabled; + buttonGo.Visible = enabled; } } diff --git a/Source/Tools/OHTransfer/OHTransfer.csproj b/Source/Tools/OHTransfer/OHTransfer.csproj index a9215c3553..bd18125700 100644 --- a/Source/Tools/OHTransfer/OHTransfer.csproj +++ b/Source/Tools/OHTransfer/OHTransfer.csproj @@ -67,6 +67,7 @@ + OHTransfer.cs diff --git a/Source/Tools/OHTransfer/SequentialStreamReader.cs b/Source/Tools/OHTransfer/SequentialStreamReader.cs new file mode 100644 index 0000000000..f730e4e375 --- /dev/null +++ b/Source/Tools/OHTransfer/SequentialStreamReader.cs @@ -0,0 +1,62 @@ +//****************************************************************************************************** +// SequentialStreamReader.cs - Gbtc +// +// Copyright © 2025, Grid Protection Alliance. All Rights Reserved. +// +// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See +// the NOTICE file distributed with this work for additional information regarding copyright ownership. +// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this +// file except in compliance with the License. You may obtain a copy of the License at: +// +// http://opensource.org/licenses/MIT +// +// Unless agreed to in writing, the subject software distributed under the License is distributed on an +// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the +// License for the specific language governing permissions and limitations. +// +// Code Modification History: +// ---------------------------------------------------------------------------------------------------- +// 08/13/2025 - J. Ritchie Carroll +// Generated original version of source code. +// +//****************************************************************************************************** + +using GSF.Snap.Filters; +using GSF.Snap.Services; +using GSF.Snap.Services.Reader; +using GSF.Threading; +using openHistorian.Snap; + +namespace OHTransfer; + +/// +/// Represents a sequential reader stream for reading historian data from an archive list. +/// +/// +/// We derive a specific implementation of this class so we can track last processed key in the stream. +/// +internal class SequentialStreamReader( + ArchiveList archiveList, + SortedTreeEngineReaderOptions readerOptions = null, + SeekFilterBase keySeekFilter = null, + MatchFilterBase keyMatchFilter = null, + WorkerThreadSynchronization workerThreadSynchronization = null) : + SequentialReaderStream( + archiveList, + readerOptions, + keySeekFilter, + keyMatchFilter, + workerThreadSynchronization) +{ + public HistorianKey LastKey = new(); + + /// + protected override bool ReadNext(HistorianKey key, HistorianValue value) + { + bool result = base.ReadNext(key, value); + + LastKey = key; + + return result; + } +} \ No newline at end of file From 86f41b6c6eb74a34671960c2b46574b77ee797d3 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 13 Aug 2025 14:27:57 -0500 Subject: [PATCH 05/15] Fixed order by operations --- Source/Tools/OHTransfer/OHTransfer.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Source/Tools/OHTransfer/OHTransfer.cs b/Source/Tools/OHTransfer/OHTransfer.cs index 487d9a2c34..e1820ffbcf 100644 --- a/Source/Tools/OHTransfer/OHTransfer.cs +++ b/Source/Tools/OHTransfer/OHTransfer.cs @@ -330,12 +330,10 @@ private void buttonGo_Click(object sender, EventArgs e) HistorianServer server = new(archiveInfo); SnapClient client = SnapClient.Connect(server.Host); ClientDatabaseBase database = client.GetDatabase(InstanceName); - Dictionary attachedFiles = database.GetAllAttachedFiles() - .OrderBy(file => file.EndTime) - .ToDictionary(file => file.Id, file => file); + Dictionary attachedFiles = database.GetAllAttachedFiles().ToDictionary(file => file.Id); using ArchiveList archiveList = new(); - archiveList.LoadFiles(attachedFiles.Values.Select(file => file.FileName)); + archiveList.LoadFiles(attachedFiles.Values.OrderBy(file => file.EndTime).Select(file => file.FileName)); SeekFilterBase timeFilter = TimestampSeekFilter.CreateFromRange(startTime, endTime); MatchFilterBase pointFilter = PointIdMatchFilter.CreateFromList(historianIDMapping.Keys); From e8ad83bd2bfa16a5e254f9d2519ae24daa54da6d Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 13 Aug 2025 14:29:35 -0500 Subject: [PATCH 06/15] Improved shutdown operations --- Source/Tools/OHTransfer/OHTransfer.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Tools/OHTransfer/OHTransfer.cs b/Source/Tools/OHTransfer/OHTransfer.cs index e1820ffbcf..5a418b79e4 100644 --- a/Source/Tools/OHTransfer/OHTransfer.cs +++ b/Source/Tools/OHTransfer/OHTransfer.cs @@ -102,8 +102,9 @@ private void OHTransfer_FormClosing(object sender, FormClosingEventArgs e) ConfigurationFile.Current.Save(); + Hide(); m_cancellationTokenSource?.Cancel(); - Thread.Sleep(500); + Thread.Sleep(2000); } private void buttonOpenSourceFilesLocation_Click(object sender, EventArgs e) From eea50dc094ad342d66c766946493d9bdc142ab54 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 13 Aug 2025 14:43:24 -0500 Subject: [PATCH 07/15] Updated code to use constants for defined intervals --- Source/Tools/OHTransfer/OHTransfer.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Source/Tools/OHTransfer/OHTransfer.cs b/Source/Tools/OHTransfer/OHTransfer.cs index 5a418b79e4..6f8f04b17f 100644 --- a/Source/Tools/OHTransfer/OHTransfer.cs +++ b/Source/Tools/OHTransfer/OHTransfer.cs @@ -55,6 +55,9 @@ public partial class OHTransfer : Form private CancellationTokenSource m_cancellationTokenSource; private bool m_formClosing; + private const int MonitoringInterval = 2000; // 2 seconds + private const int FeedbackInterval = 4000; // 4 seconds + public OHTransfer() { InitializeComponent(); @@ -104,7 +107,7 @@ private void OHTransfer_FormClosing(object sender, FormClosingEventArgs e) Hide(); m_cancellationTokenSource?.Cancel(); - Thread.Sleep(2000); + Thread.Sleep((int)(MonitoringInterval * 1.5D)); } private void buttonOpenSourceFilesLocation_Click(object sender, EventArgs e) @@ -354,7 +357,7 @@ void readingMonitor() workerThreadSynchronization.RequestCallback(() => { - if (DateTime.UtcNow.Ticks - lastStatusMessage < Ticks.PerSecond * 4) + if (DateTime.UtcNow.Ticks - lastStatusMessage < FeedbackInterval * Ticks.PerMillisecond) return; lastStatusMessage = DateTime.UtcNow.Ticks; @@ -375,10 +378,10 @@ void readingMonitor() }); Application.DoEvents(); - monitorCancellationToken = new Action(readingMonitor).DelayAndExecute(2000); + monitorCancellationToken = new Action(readingMonitor).DelayAndExecute(MonitoringInterval); } - monitorCancellationToken = new Action(readingMonitor).DelayAndExecute(2000); + monitorCancellationToken = new Action(readingMonitor).DelayAndExecute(MonitoringInterval); string completeFileName = Path.Combine(destinationPath, $"{deviceName}-Exported.d2"); string pendingFileName = Path.Combine(destinationPath, $"{FilePath.GetFileNameWithoutExtension(completeFileName)}.~d2i"); From 3961624706b82339c08a0159a1cf1437e6842d39 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 13 Aug 2025 14:45:33 -0500 Subject: [PATCH 08/15] Updated shutdown operation to only engage if export was ever started --- Source/Tools/OHTransfer/OHTransfer.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Source/Tools/OHTransfer/OHTransfer.cs b/Source/Tools/OHTransfer/OHTransfer.cs index 6f8f04b17f..b97d675232 100644 --- a/Source/Tools/OHTransfer/OHTransfer.cs +++ b/Source/Tools/OHTransfer/OHTransfer.cs @@ -104,6 +104,9 @@ private void OHTransfer_FormClosing(object sender, FormClosingEventArgs e) settings["toDate"].Value = dateTimePickerTo.Value.ToString(dateTimePickerTo.CustomFormat); ConfigurationFile.Current.Save(); + + if (m_cancellationTokenSource is null) + return; Hide(); m_cancellationTokenSource?.Cancel(); From 5bc92a96211515965e4b8498f19eea9f5cf12a25 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 13 Aug 2025 16:47:05 -0500 Subject: [PATCH 09/15] Fixed point translation operations --- Source/Tools/OHTransfer/OHTransfer.cs | 6 +++--- Source/Tools/OHTransfer/OHTransfer.csproj | 2 +- ...reamReader.cs => TranslatingStreamReader.cs} | 17 ++++++++++++----- 3 files changed, 16 insertions(+), 9 deletions(-) rename Source/Tools/OHTransfer/{SequentialStreamReader.cs => TranslatingStreamReader.cs} (79%) diff --git a/Source/Tools/OHTransfer/OHTransfer.cs b/Source/Tools/OHTransfer/OHTransfer.cs index b97d675232..052b647a7f 100644 --- a/Source/Tools/OHTransfer/OHTransfer.cs +++ b/Source/Tools/OHTransfer/OHTransfer.cs @@ -346,7 +346,7 @@ private void buttonGo_Click(object sender, EventArgs e) MatchFilterBase pointFilter = PointIdMatchFilter.CreateFromList(historianIDMapping.Keys); using WorkerThreadSynchronization workerThreadSynchronization = new(); - using SequentialStreamReader reader = new(archiveList, SortedTreeEngineReaderOptions.Default, timeFilter, pointFilter, workerThreadSynchronization); + using TranslatingStreamReader reader = new(archiveList, historianIDMapping, SortedTreeEngineReaderOptions.Default, timeFilter, pointFilter, workerThreadSynchronization); long lastStatusMessage = DateTime.UtcNow.Ticks; @@ -367,11 +367,11 @@ void readingMonitor() if (Stats.PointsReturned == 0L) { - ShowUpdateMessage("\r\nScanned {0:N0} points so far, scanning at {1:N0} points per second...", Stats.PointsScanned, (Stats.PointsReturned + Stats.PointsScanned) / ((DateTime.UtcNow.Ticks - processStartTime) / Ticks.PerSecond)); + ShowUpdateMessage("\r\nScanning archives for points, processing {0:N0} cache miss retries per second...", Stats.PointsScanned / ((DateTime.UtcNow.Ticks - processStartTime) / Ticks.PerSecond)); } else { - ShowUpdateMessage("\r\nProcessed {0:N0} points so far, scanning at {1:N0} points per second:", Stats.PointsReturned, (Stats.PointsReturned + Stats.PointsScanned) / ((DateTime.UtcNow.Ticks - processStartTime) / Ticks.PerSecond)); + ShowUpdateMessage("\r\nProcessed {0:N0} points so far, scanning at {1:N0} points per second:", Stats.PointsReturned, Stats.PointsReturned / ((DateTime.UtcNow.Ticks - processStartTime) / Ticks.PerSecond)); double processedDays = (reader.LastKey.TimestampAsDate - startTime).TotalDays; diff --git a/Source/Tools/OHTransfer/OHTransfer.csproj b/Source/Tools/OHTransfer/OHTransfer.csproj index bd18125700..0549002286 100644 --- a/Source/Tools/OHTransfer/OHTransfer.csproj +++ b/Source/Tools/OHTransfer/OHTransfer.csproj @@ -67,7 +67,7 @@ - + OHTransfer.cs diff --git a/Source/Tools/OHTransfer/SequentialStreamReader.cs b/Source/Tools/OHTransfer/TranslatingStreamReader.cs similarity index 79% rename from Source/Tools/OHTransfer/SequentialStreamReader.cs rename to Source/Tools/OHTransfer/TranslatingStreamReader.cs index f730e4e375..c1993f6910 100644 --- a/Source/Tools/OHTransfer/SequentialStreamReader.cs +++ b/Source/Tools/OHTransfer/TranslatingStreamReader.cs @@ -1,5 +1,5 @@ //****************************************************************************************************** -// SequentialStreamReader.cs - Gbtc +// TranslatingStreamReader.cs - Gbtc // // Copyright © 2025, Grid Protection Alliance. All Rights Reserved. // @@ -21,6 +21,7 @@ // //****************************************************************************************************** +using System.Collections.Generic; using GSF.Snap.Filters; using GSF.Snap.Services; using GSF.Snap.Services.Reader; @@ -30,13 +31,16 @@ namespace OHTransfer; /// -/// Represents a sequential reader stream for reading historian data from an archive list. +/// Represents a sequential reader stream for reading historian data from an archive list that +/// translates source IDs to destination IDs using the . /// /// -/// We derive a specific implementation of this class so we can track last processed key in the stream. +/// We derive a specific implementation of this class so we can translate source IDs to +/// destination IDs and also track last processed key in the stream for progress reporting. /// -internal class SequentialStreamReader( - ArchiveList archiveList, +internal class TranslatingStreamReader( + ArchiveList archiveList, + Dictionary historianIDMapping, SortedTreeEngineReaderOptions readerOptions = null, SeekFilterBase keySeekFilter = null, MatchFilterBase keyMatchFilter = null, @@ -55,6 +59,9 @@ protected override bool ReadNext(HistorianKey key, HistorianValue value) { bool result = base.ReadNext(key, value); + if (historianIDMapping.TryGetValue(key.PointID, out ulong destinationPointID)) + key.PointID = destinationPointID; + LastKey = key; return result; From 2eb5353cee08cb9d9b5a38dc3fceb8ec7fa4b0d5 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 13 Aug 2025 16:50:27 -0500 Subject: [PATCH 10/15] Updated worker thread sync to only request call backs at feedback interval --- Source/Tools/OHTransfer/OHTransfer.cs | 38 +++++++++++++-------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Source/Tools/OHTransfer/OHTransfer.cs b/Source/Tools/OHTransfer/OHTransfer.cs index 052b647a7f..1bb38cb88a 100644 --- a/Source/Tools/OHTransfer/OHTransfer.cs +++ b/Source/Tools/OHTransfer/OHTransfer.cs @@ -358,27 +358,27 @@ void readingMonitor() return; } - workerThreadSynchronization.RequestCallback(() => + if (DateTime.UtcNow.Ticks - lastStatusMessage < FeedbackInterval * Ticks.PerMillisecond) { - if (DateTime.UtcNow.Ticks - lastStatusMessage < FeedbackInterval * Ticks.PerMillisecond) - return; - - lastStatusMessage = DateTime.UtcNow.Ticks; - - if (Stats.PointsReturned == 0L) - { - ShowUpdateMessage("\r\nScanning archives for points, processing {0:N0} cache miss retries per second...", Stats.PointsScanned / ((DateTime.UtcNow.Ticks - processStartTime) / Ticks.PerSecond)); - } - else + workerThreadSynchronization.RequestCallback(() => { - ShowUpdateMessage("\r\nProcessed {0:N0} points so far, scanning at {1:N0} points per second:", Stats.PointsReturned, Stats.PointsReturned / ((DateTime.UtcNow.Ticks - processStartTime) / Ticks.PerSecond)); - - double processedDays = (reader.LastKey.TimestampAsDate - startTime).TotalDays; - - UpdateProgressBar((int)processedDays); - ShowUpdateMessage(" {0:0.00%} complete...", processedDays / totalDays); - } - }); + lastStatusMessage = DateTime.UtcNow.Ticks; + + if (Stats.PointsReturned == 0L) + { + ShowUpdateMessage("\r\nScanning archives for points, processing {0:N0} cache miss retries per second...", Stats.PointsScanned / ((DateTime.UtcNow.Ticks - processStartTime) / Ticks.PerSecond)); + } + else + { + ShowUpdateMessage("\r\nProcessed {0:N0} points so far, scanning at {1:N0} points per second:", Stats.PointsReturned, Stats.PointsReturned / ((DateTime.UtcNow.Ticks - processStartTime) / Ticks.PerSecond)); + + double processedDays = (reader.LastKey.TimestampAsDate - startTime).TotalDays; + + UpdateProgressBar((int)processedDays); + ShowUpdateMessage(" {0:0.00%} complete...", processedDays / totalDays); + } + }); + } Application.DoEvents(); monitorCancellationToken = new Action(readingMonitor).DelayAndExecute(MonitoringInterval); From b92f172e18d7693c42b2d4069cbf72993b40fd03 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 13 Aug 2025 17:05:06 -0500 Subject: [PATCH 11/15] Updated file processing filters to narrow sources based on end time --- Source/Tools/OHTransfer/OHTransfer.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Source/Tools/OHTransfer/OHTransfer.cs b/Source/Tools/OHTransfer/OHTransfer.cs index 1bb38cb88a..88e304b136 100644 --- a/Source/Tools/OHTransfer/OHTransfer.cs +++ b/Source/Tools/OHTransfer/OHTransfer.cs @@ -337,10 +337,17 @@ private void buttonGo_Click(object sender, EventArgs e) HistorianServer server = new(archiveInfo); SnapClient client = SnapClient.Connect(server.Host); ClientDatabaseBase database = client.GetDatabase(InstanceName); - Dictionary attachedFiles = database.GetAllAttachedFiles().ToDictionary(file => file.Id); + Dictionary attachedFiles = database.GetAllAttachedFiles() + .Where(file => file.EndTime > startTime && file.EndTime <= endTime) + .ToDictionary(file => file.Id); using ArchiveList archiveList = new(); - archiveList.LoadFiles(attachedFiles.Values.OrderBy(file => file.EndTime).Select(file => file.FileName)); + + archiveList.LoadFiles(attachedFiles.Values + .OrderBy(file => file.EndTime) + .Select(file => file.FileName)); + + ShowUpdateMessage("Found {0:N0} archives in source location covering specified time range.", attachedFiles.Count); SeekFilterBase timeFilter = TimestampSeekFilter.CreateFromRange(startTime, endTime); MatchFilterBase pointFilter = PointIdMatchFilter.CreateFromList(historianIDMapping.Keys); @@ -366,7 +373,7 @@ void readingMonitor() if (Stats.PointsReturned == 0L) { - ShowUpdateMessage("\r\nScanning archives for points, processing {0:N0} cache miss retries per second...", Stats.PointsScanned / ((DateTime.UtcNow.Ticks - processStartTime) / Ticks.PerSecond)); + ShowUpdateMessage("\r\nScanning archives for points in specified time range, processing {0:N0} cache miss retries per second...", Stats.PointsScanned / ((DateTime.UtcNow.Ticks - processStartTime) / Ticks.PerSecond)); } else { From 0a95382c98e85f46e01610adb1a39ef5582e201f Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 13 Aug 2025 17:09:36 -0500 Subject: [PATCH 12/15] Cleared stats between runs --- Source/Tools/OHTransfer/OHTransfer.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Tools/OHTransfer/OHTransfer.cs b/Source/Tools/OHTransfer/OHTransfer.cs index 88e304b136..c7d1bb864b 100644 --- a/Source/Tools/OHTransfer/OHTransfer.cs +++ b/Source/Tools/OHTransfer/OHTransfer.cs @@ -324,6 +324,7 @@ private void buttonGo_Click(object sender, EventArgs e) int totalDays = (int)(endTime - startTime).TotalDays; SetProgressMaximum(totalDays); + Stats.Clear(); const string InstanceName = "PPA"; From 4183ed76429cf580937892b74e7a62d424792816 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Wed, 13 Aug 2025 17:14:22 -0500 Subject: [PATCH 13/15] Added line spacing for final export messages --- Source/Tools/OHTransfer/OHTransfer.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Tools/OHTransfer/OHTransfer.cs b/Source/Tools/OHTransfer/OHTransfer.cs index c7d1bb864b..0df38e6a4f 100644 --- a/Source/Tools/OHTransfer/OHTransfer.cs +++ b/Source/Tools/OHTransfer/OHTransfer.cs @@ -408,12 +408,12 @@ void readingMonitor() Ticks processDuration = DateTime.UtcNow.Ticks - processStartTime; processCompleted = true; - ShowUpdateMessage("Data transfer completed in {0}", processDuration.ToElapsedTimeString(2)); + ShowUpdateMessage("\r\nData transfer completed in {0}", processDuration.ToElapsedTimeString(2)); UpdateProgressBar(totalDays); } catch (Exception ex) { - ShowUpdateMessage("Error during transfer: {0}", ex.Message); + ShowUpdateMessage("\r\nError during transfer: {0}", ex.Message); } finally { From 9b207f827f904900d4cd3f2b39073e4687284765 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Thu, 14 Aug 2025 11:15:37 -0500 Subject: [PATCH 14/15] Update Source/Libraries/GSF.SortedTreeStore/Snap/Services/Reader/SequentialReaderStream'2.cs Co-authored-by: Stephen C. Wills --- .../Snap/Services/Reader/SequentialReaderStream'2.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Libraries/GSF.SortedTreeStore/Snap/Services/Reader/SequentialReaderStream'2.cs b/Source/Libraries/GSF.SortedTreeStore/Snap/Services/Reader/SequentialReaderStream'2.cs index e0ec1b71b2..fdbe5ffb08 100755 --- a/Source/Libraries/GSF.SortedTreeStore/Snap/Services/Reader/SequentialReaderStream'2.cs +++ b/Source/Libraries/GSF.SortedTreeStore/Snap/Services/Reader/SequentialReaderStream'2.cs @@ -209,7 +209,7 @@ private bool ReadCatchAll(TKey key, TValue value) { retries++; - if (retries % 10000 == 0) + if (retries >= 10000) { m_workerThreadSynchronization.PulseSafeToCallback(); Interlocked.Add(ref Stats.PointsScanned, retries); From a6f7562e309ec0961e38f21aad487098e094b371 Mon Sep 17 00:00:00 2001 From: "J. Ritchie Carroll" Date: Thu, 14 Aug 2025 11:43:48 -0500 Subject: [PATCH 15/15] Removed DoEvents call --- Source/Tools/OHTransfer/OHTransfer.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Source/Tools/OHTransfer/OHTransfer.cs b/Source/Tools/OHTransfer/OHTransfer.cs index 0df38e6a4f..2b98f3bb9e 100644 --- a/Source/Tools/OHTransfer/OHTransfer.cs +++ b/Source/Tools/OHTransfer/OHTransfer.cs @@ -388,7 +388,6 @@ void readingMonitor() }); } - Application.DoEvents(); monitorCancellationToken = new Action(readingMonitor).DelayAndExecute(MonitoringInterval); }