Compare commits

...

2 Commits

Author SHA1 Message Date
05390839fc FrmServerLog 추가 (개발중...) 2025-03-17 17:42:03 +09:00
4f59f1ab2f HSMS 로그파일 갱신오류 2025-03-17 10:52:33 +09:00
11 changed files with 879 additions and 11 deletions

View File

@@ -16,7 +16,7 @@
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<PublishUrl>ftp://192.168.100.11/eqview/Provider/</PublishUrl>
<PublishUrl>ftp://pms.e1soft.co.kr/eqview/Provider/</PublishUrl>
<Install>true</Install>
<InstallFrom>Web</InstallFrom>
<UpdateEnabled>true</UpdateEnabled>
@@ -35,7 +35,7 @@
<WebPage>index.htm</WebPage>
<TrustUrlParameters>true</TrustUrlParameters>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>2025.01.07.0</ApplicationVersion>
<ApplicationVersion>2025.03.14.0</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<CreateDesktopShortcut>true</CreateDesktopShortcut>
<PublishWizardCompleted>true</PublishWizardCompleted>
@@ -404,6 +404,12 @@
<Compile Include="LOGPARSER\FrmEqSelector.Designer.cs">
<DependentUpon>FrmEqSelector.cs</DependentUpon>
</Compile>
<Compile Include="MESDOWNLOADER\FrmServerLog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MESDOWNLOADER\FrmServerLog.Designer.cs">
<DependentUpon>FrmServerLog.cs</DependentUpon>
</Compile>
<Compile Include="MESDOWNLOADER\ProgressForm.cs">
<SubType>Form</SubType>
</Compile>
@@ -522,6 +528,9 @@
<EmbeddedResource Include="LOGPARSER\FrmWorkFlow.resx">
<DependentUpon>FrmWorkFlow.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MESDOWNLOADER\FrmServerLog.resx">
<DependentUpon>FrmServerLog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MONGO\FrmFDCMongo.resx">
<DependentUpon>FrmFDCMongo.cs</DependentUpon>
</EmbeddedResource>

View File

@@ -106,22 +106,32 @@ namespace DDUtilityApp
}
}
/// <summary>
/// Loading AppSettings
/// </summary>
private void LodConfig()
{
// DefaultPath
string defaultPath = ConfigurationManager.AppSettings["DefaultPath"];
if (string.IsNullOrEmpty(defaultPath)) defaultPath = $@"%MyDocuments%\DDUtility\";
this.DefaultPath = defaultPath.Replace("%MyDocuments%", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
this.DownloadPath = $@"{this.DefaultPath}Download\";
this.WorkflowPath = $@"{this.DefaultPath}Workflow\";
this.MesDownloadPath = $@"{this.DefaultPath}MesDownload\"; //jhlim 20250202
this.DownloadPath = Path.Combine(this.DefaultPath, "Download");
this.WorkflowPath = Path.Combine(this.DefaultPath, "Workflow");
this.MesDownloadPath = Path.Combine(this.DefaultPath, "DownloadMES");
}
/// <summary>
/// Loading Setting.xml
/// </summary>
public void LoadSetting()
{
this.LoadSetting($@"{this.DefaultPath}Setting.xml");
}
/// <summary>
/// Loading Setting File
/// </summary>
/// <param name="filename"></param>
private void LoadSetting(string filename)
{
try

View File

@@ -218,7 +218,7 @@ namespace DDUtilityApp.LOGPARSER
{
if (this.tabControl1.SelectedTab == this.tabHSMS)
{
if (this.gridHsms.DataSource == null) return;
if (this.gridHsms.DataSource != null) return;
string remotePath = $"/{this.Account.DefaultPath}/{this.Equipment.EquipmentID}/THiRA_SECSGEM/HSMS";
switch (this.Account.Access)
@@ -911,7 +911,7 @@ namespace DDUtilityApp.LOGPARSER
}
}
MessageBox.Show($"{grid.SelectedRows.Count}개의 파일을 저장하였습니다.");
//MessageBox.Show($"{grid.SelectedRows.Count}개의 파일을 저장하였습니다.");
foreach (string file in downfiles)
System.Diagnostics.Process.Start(file);
}

View File

@@ -951,6 +951,7 @@ namespace DDUtilityApp.LOGPARSER
private void BtnDeploySite_Click(object sender, EventArgs e)
{
Process.Start("IEXPLORE.EXE", "http://pms.e1soft.co.kr:8090/Deploy/eqview/");
Clipboard.SetText("http://pms.e1soft.co.kr:8090/Deploy/eqview/");
}
private void BtnTest01_Click(object sender, EventArgs e)

View File

@@ -378,7 +378,7 @@ namespace DDUtilityApp.LOGPARSER.PARSER
dlg = new FrmEqSelector();
dlg.Owner = sender;
dlg.Size = new System.Drawing.Size(sender.Width - 60, sender.Height - 60);
dlg.Size = new System.Drawing.Size(sender.Width - 10, sender.Height - 60);
dlg.StartPosition = FormStartPosition.CenterParent;
dlg.ServerName = this.ServerName;
dlg.Equipment = sender.Equipment == null ? new EisEquipment() { EquipmentID = this.EquipmentID, Server = new LogServer(this.ServerName)} : sender.Equipment;

View File

@@ -0,0 +1,272 @@
namespace DDUtilityApp.MESDOWNLOADER
{
partial class FrmServerLog
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
Telerik.WinControls.UI.TableViewDefinition tableViewDefinition4 = new Telerik.WinControls.UI.TableViewDefinition();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.panel1 = new System.Windows.Forms.Panel();
this.pnlAPList = new System.Windows.Forms.FlowLayoutPanel();
this.pnlCommand = new System.Windows.Forms.Panel();
this.btnDownPathOpen = new System.Windows.Forms.Button();
this.btnDownPathChange = new System.Windows.Forms.Button();
this.btnRefresh = new System.Windows.Forms.Button();
this.tboxDownPath = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.cboxServer = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.treeFolder = new System.Windows.Forms.TreeView();
this.gridFiles = new JWH.CONTROL.GridViewEx();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.panel1.SuspendLayout();
this.pnlCommand.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
this.splitContainer2.Panel2.SuspendLayout();
this.splitContainer2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.gridFiles)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gridFiles.MasterTemplate)).BeginInit();
this.SuspendLayout();
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer1.Location = new System.Drawing.Point(3, 3);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.panel1);
this.splitContainer1.Panel1MinSize = 94;
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);
this.splitContainer1.Size = new System.Drawing.Size(794, 569);
this.splitContainer1.SplitterDistance = 94;
this.splitContainer1.TabIndex = 0;
//
// panel1
//
this.panel1.Controls.Add(this.pnlAPList);
this.panel1.Controls.Add(this.pnlCommand);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(794, 94);
this.panel1.TabIndex = 0;
//
// pnlAPList
//
this.pnlAPList.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlAPList.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
this.pnlAPList.Location = new System.Drawing.Point(722, 0);
this.pnlAPList.Name = "pnlAPList";
this.pnlAPList.Padding = new System.Windows.Forms.Padding(0, 10, 0, 0);
this.pnlAPList.Size = new System.Drawing.Size(72, 94);
this.pnlAPList.TabIndex = 1;
//
// pnlCommand
//
this.pnlCommand.Controls.Add(this.btnDownPathOpen);
this.pnlCommand.Controls.Add(this.btnDownPathChange);
this.pnlCommand.Controls.Add(this.btnRefresh);
this.pnlCommand.Controls.Add(this.tboxDownPath);
this.pnlCommand.Controls.Add(this.label2);
this.pnlCommand.Controls.Add(this.cboxServer);
this.pnlCommand.Controls.Add(this.label1);
this.pnlCommand.Dock = System.Windows.Forms.DockStyle.Left;
this.pnlCommand.Location = new System.Drawing.Point(0, 0);
this.pnlCommand.Name = "pnlCommand";
this.pnlCommand.Size = new System.Drawing.Size(722, 94);
this.pnlCommand.TabIndex = 0;
//
// btnDownPathOpen
//
this.btnDownPathOpen.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnDownPathOpen.Location = new System.Drawing.Point(622, 62);
this.btnDownPathOpen.Name = "btnDownPathOpen";
this.btnDownPathOpen.Size = new System.Drawing.Size(90, 23);
this.btnDownPathOpen.TabIndex = 6;
this.btnDownPathOpen.Text = "Open";
this.btnDownPathOpen.UseVisualStyleBackColor = true;
//
// btnDownPathChange
//
this.btnDownPathChange.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnDownPathChange.Location = new System.Drawing.Point(622, 37);
this.btnDownPathChange.Name = "btnDownPathChange";
this.btnDownPathChange.Size = new System.Drawing.Size(90, 23);
this.btnDownPathChange.TabIndex = 5;
this.btnDownPathChange.Text = "Change";
this.btnDownPathChange.UseVisualStyleBackColor = true;
//
// btnRefresh
//
this.btnRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnRefresh.Location = new System.Drawing.Point(622, 10);
this.btnRefresh.Name = "btnRefresh";
this.btnRefresh.Size = new System.Drawing.Size(90, 23);
this.btnRefresh.TabIndex = 4;
this.btnRefresh.Text = "Refresh";
this.btnRefresh.UseVisualStyleBackColor = true;
//
// tboxDownPath
//
this.tboxDownPath.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.tboxDownPath.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tboxDownPath.Location = new System.Drawing.Point(136, 38);
this.tboxDownPath.Multiline = true;
this.tboxDownPath.Name = "tboxDownPath";
this.tboxDownPath.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.tboxDownPath.Size = new System.Drawing.Size(480, 47);
this.tboxDownPath.TabIndex = 3;
//
// label2
//
this.label2.Location = new System.Drawing.Point(10, 38);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(120, 23);
this.label2.TabIndex = 2;
this.label2.Text = "로컬디렉토리 : ";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// cboxServer
//
this.cboxServer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.cboxServer.FormattingEnabled = true;
this.cboxServer.Location = new System.Drawing.Point(136, 12);
this.cboxServer.Name = "cboxServer";
this.cboxServer.Size = new System.Drawing.Size(480, 20);
this.cboxServer.TabIndex = 1;
//
// label1
//
this.label1.Location = new System.Drawing.Point(10, 10);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(120, 23);
this.label1.TabIndex = 0;
this.label1.Text = "Server : ";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// splitContainer2
//
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer2.Location = new System.Drawing.Point(0, 0);
this.splitContainer2.Name = "splitContainer2";
//
// splitContainer2.Panel1
//
this.splitContainer2.Panel1.Controls.Add(this.treeFolder);
//
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.gridFiles);
this.splitContainer2.Size = new System.Drawing.Size(794, 471);
this.splitContainer2.SplitterDistance = 264;
this.splitContainer2.TabIndex = 0;
//
// treeFolder
//
this.treeFolder.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeFolder.Location = new System.Drawing.Point(0, 0);
this.treeFolder.Name = "treeFolder";
this.treeFolder.Size = new System.Drawing.Size(264, 471);
this.treeFolder.TabIndex = 0;
//
// gridFiles
//
this.gridFiles.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.gridFiles.ColumnResizeKey = System.Windows.Forms.Keys.F6;
this.gridFiles.Dock = System.Windows.Forms.DockStyle.Fill;
this.gridFiles.Location = new System.Drawing.Point(0, 0);
//
//
//
this.gridFiles.MasterTemplate.ViewDefinition = tableViewDefinition4;
this.gridFiles.Name = "gridViewEx1";
//
//
//
this.gridFiles.RootElement.ControlBounds = new System.Drawing.Rectangle(0, 0, 240, 150);
this.gridFiles.Size = new System.Drawing.Size(526, 471);
this.gridFiles.TabIndex = 0;
//
// FrmServerLog
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 575);
this.Controls.Add(this.splitContainer1);
this.Name = "FrmServerLog";
this.Padding = new System.Windows.Forms.Padding(3);
this.Text = "FrmServerLog";
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.panel1.ResumeLayout(false);
this.pnlCommand.ResumeLayout(false);
this.pnlCommand.PerformLayout();
this.splitContainer2.Panel1.ResumeLayout(false);
this.splitContainer2.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
this.splitContainer2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.gridFiles.MasterTemplate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gridFiles)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.SplitContainer splitContainer2;
private System.Windows.Forms.FlowLayoutPanel pnlAPList;
private System.Windows.Forms.Panel pnlCommand;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox tboxDownPath;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ComboBox cboxServer;
private System.Windows.Forms.Button btnDownPathOpen;
private System.Windows.Forms.Button btnDownPathChange;
private System.Windows.Forms.Button btnRefresh;
private System.Windows.Forms.TreeView treeFolder;
private JWH.CONTROL.GridViewEx gridFiles;
}
}

View File

@@ -0,0 +1,444 @@
using DDUtilityApp.LOGPARSER.DATA;
using JWH;
using JWH.NETWORK;
using Org.BouncyCastle.Tls.Crypto;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using Telerik.WinControls.Drawing;
using Telerik.WinControls.UI;
namespace DDUtilityApp.MESDOWNLOADER
{
public partial class FrmServerLog: Form
{
private DataSet DSSetting { get; set; } = null;
private DataTable DTFileInfo { get; set; } = null;
public FrmServerLog()
{
InitializeComponent();
this.SetLayout();
this.SetEventHandler();
}
private void SetLayout()
{
try
{
this.CreateDTFileInfo();
this.SetCboxServer();
this.GridFiles_Setting();
this.tboxDownPath.ReadOnly = true;
this.tboxDownPath.Text = GlobalVariable.Instance.MesDownloadPath;
this.treeFolder.Font = new Font("돋움체", 10.0F);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
private void SetEventHandler()
{
try
{
this.cboxServer.SelectedIndexChanged += this.CboxServer_SelectedIndexChanged;
this.btnRefresh.Click += this.BtnRefresh_Click;
this.btnDownPathChange.Click += this.BtnDownPathChange_Click;
this.btnDownPathOpen.Click += this.BtnDownPathOpen_Click;
this.treeFolder.AfterSelect += this.TreeFolder_AfterSelect;
this.gridFiles.CellDoubleClick += this.GridFiles_CellDoubleClick;
this.gridFiles.KeyDown += this.GridFiles_KeyDown;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
#region [ Controls ] --------------------------------------------------
/// <summary>
/// 서버선택
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CboxServer_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
this.GridFiles_Setting();
Color[] backColors = new Color[] { Color.FromArgb(0, 255, 255, 255), Color.FromArgb(255, 255, 255, 220), Color.FromArgb(255, 255, 220, 255), Color.FromArgb(255, 220, 255, 255) };
if (this.DSSetting == null || this.DSSetting.Tables.Contains("Item") == false) return;
int value = (int)this.cboxServer.SelectedValue;
var query = from dtServer in DSSetting.Tables["Server"].AsEnumerable()
join dtItem in DSSetting.Tables["Item"].AsEnumerable()
on dtServer.Field<int>("Server_Id") equals dtItem.Field<int>("Server_Id")
where dtItem.Field<int>("Server_Id") == value
select new
{
name = dtServer.Field<string>("name"),
nameap = dtItem.Field<string>("name"),
url = dtItem.Field<string>("url"),
dir = dtItem.Field<string>("dir"),
conkey = dtItem.Field<string>("conkey"),
Server_Id = dtItem.Field<int>("Server_Id"),
};
foreach (Control control in this.pnlAPList.Controls)
control.Dispose();
this.pnlAPList.Controls.Clear();
int index = 0;
foreach (var item in query)
{
CheckBox chk = new CheckBox()
{
Text = $"{item.nameap} ({item.url})",
AutoSize = true,
Checked = true,
Tag = item.nameap,
BackColor = backColors[index % 4]
};
index++;
this.pnlAPList.Controls.Add(chk);
ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Marking", $"nameap='{item.nameap}'", true);
formatting.RowBackColor = chk.BackColor;
this.gridFiles.Columns["nameap"].ConditionalFormattingObjectList.Add(formatting);
}
this.treeFolder.Nodes.Clear();
TreeNode rootNode = this.treeFolder.Nodes.Add("ROOT");
this.treeFolder.SelectedNode = rootNode;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
/// <summary>
/// 현재 (Treeview.SelectedNode)경로의 파일목록 갱신
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnRefresh_Click(object sender, EventArgs e)
{
try
{
this.Cursor = Cursors.WaitCursor;
this.SuspendLayout();
this.DTFileInfo.Rows.Clear();
this.gridFiles.DataSource = null;
int server_Id = (int)this.cboxServer.SelectedValue;
TreeNode currentNode = this.treeFolder.SelectedNode;
if (currentNode == null) return;
string subPath = currentNode.Tag as string;
foreach (Control control in this.pnlAPList.Controls)
{
CheckBox chk = control as CheckBox;
if (chk == null || chk.Checked == false) continue;
string nameap = control.Tag as string;
if (string.IsNullOrEmpty(nameap)) continue;
DataRow[] rows = this.DSSetting.Tables["Item"].Select($"Server_Id='{server_Id}' AND name='{nameap}'");
foreach (DataRow row in rows)
{
string url = row["url"] as string;
string dir = row["dir"] as string;
string conkey = row["conkey"] as string;
string userId = this.GetUserIdFromConkey(conkey);
string password = this.GetPasswordFromConkey(conkey);
string currentPath = string.IsNullOrEmpty(subPath) ? dir : System.IO.Path.Combine(dir, subPath);
FtpsClient.Initialize(url, userId, password);
var files = FtpsClient.GetFtpsList(currentPath);
foreach (var file in files)
{
DataRow rowFile = this.DTFileInfo.NewRow();
rowFile["Check"] = false;
rowFile["nameap"] = nameap;
rowFile["Name"] = file.Name;
rowFile["FileName"] = file.Name;
rowFile["Size"] = this.GetFileSize(file.Size, FileSizeType.MB);
rowFile["Modified"] = file.Modified.ToString("yyyy-MM-dd HH:mm:ss");
rowFile["Type"] = file.Type;
rowFile["url"] = url;
rowFile["dir"] = dir;
rowFile["subpath"] = subPath;
rowFile["userId"] = userId;
rowFile["password"] = password;
this.DTFileInfo.Rows.Add(rowFile);
}
}
}
this.DTFileInfo.DefaultView.RowFilter = $"Type='Directory'";
this.DTFileInfo.DefaultView.Sort = "FileName ASC";
foreach (DataRow row in this.DTFileInfo.DefaultView.ToTable(true, "FileName").Rows)
{
string fileName = row["FileName"] as string;
if (string.IsNullOrEmpty(fileName)) continue;
if (currentNode.Nodes.ContainsKey(fileName)) continue;
TreeNode node = currentNode.Nodes.Add(fileName, fileName);
node.Tag = string.IsNullOrEmpty(currentNode.Tag as string) ? fileName : System.IO.Path.Combine(currentNode.Tag as string, fileName);
}
currentNode.Expand();
this.DTFileInfo.DefaultView.RowFilter = "";
this.DTFileInfo.DefaultView.Sort = "Modified DESC";
this.gridFiles.DataSource = this.DTFileInfo;
this.gridFiles.BestFitColumns();
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
finally
{
this.ResumeLayout();
this.Cursor = Cursors.Default;
}
}
/// <summary>
/// 로그파일 다운로드 폴더설정
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnDownPathChange_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(this.tboxDownPath.Text))
this.tboxDownPath.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
using (FolderBrowserDialog dlg = new FolderBrowserDialog())
{
dlg.SelectedPath = this.tboxDownPath.Text;
if (dlg.ShowDialog() == DialogResult.OK)
{
this.tboxDownPath.Text = dlg.SelectedPath;
GlobalVariable.Instance.MesDownloadPath = this.tboxDownPath.Text;
}
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
/// <summary>
/// 로그파일 다운로드 폴더열기
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnDownPathOpen_Click(object sender, EventArgs e)
{
try
{
Process.Start("explorer.exe", this.tboxDownPath.Text);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
private void TreeFolder_AfterSelect(object sender, TreeViewEventArgs e)
{
this.BtnRefresh_Click(this.btnRefresh, new EventArgs());
}
#endregion
#region [ GridFiles ] -------------------------------------------------
private void GridFiles_Setting()
{
try
{
this.gridFiles.Columns.Clear();
this.gridFiles.Columns.Add(new GridViewCheckBoxColumn("Check") { });
this.gridFiles.Columns.Add(new GridViewTextBoxColumn("nameap") { HeaderText = "Server", ReadOnly = true });
this.gridFiles.Columns.Add(new GridViewTextBoxColumn("Name") { ReadOnly=true, IsVisible = false });
this.gridFiles.Columns.Add(new GridViewTextBoxColumn("FileName") { ReadOnly = true });
this.gridFiles.Columns.Add(new GridViewTextBoxColumn("Size") { ReadOnly = true, TextAlignment = ContentAlignment.MiddleRight });
this.gridFiles.Columns.Add(new GridViewTextBoxColumn("Modified") { ReadOnly = true });
this.gridFiles.Columns.Add(new GridViewTextBoxColumn("Type") { ReadOnly = true });
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
private void GridFiles_KeyDown(object sender, KeyEventArgs e)
{
try
{
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
private void GridFiles_CellDoubleClick(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
{
try
{
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
#endregion
/// <summary>
/// Server + File 저장테이블 생성
/// </summary>
/// <returns></returns>
private void CreateDTFileInfo()
{
try
{
this.DTFileInfo = new DataTable();
this.DTFileInfo.Columns.Add("Check", typeof(bool));
this.DTFileInfo.Columns.Add("nameap", typeof(string));
this.DTFileInfo.Columns.Add("Name", typeof(string));
this.DTFileInfo.Columns.Add("FileName", typeof(string));
this.DTFileInfo.Columns.Add("Size", typeof(string));
this.DTFileInfo.Columns.Add("Modified", typeof(string));
this.DTFileInfo.Columns.Add("Type", typeof(string));
this.DTFileInfo.Columns.Add("url", typeof(string));
this.DTFileInfo.Columns.Add("dir", typeof(string));
this.DTFileInfo.Columns.Add("subpath", typeof(string));
this.DTFileInfo.Columns.Add("userId", typeof(string));
this.DTFileInfo.Columns.Add("password", typeof(string));
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
/// <summary>
/// XML 설정파일 로딩 및 CboxServer 셋팅
/// </summary>
private void SetCboxServer()
{
try
{
string path = ConfigurationManager.AppSettings["BULK_VIEWER"];
this.DSSetting = XmlToDsConverter.ConvertXmlToDataSet(path);
if (this.DSSetting == null || this.DSSetting.Tables.Count < 1 || this.DSSetting.Tables.Contains("Server") == false)
{
MessageBox.Show("XML 데이터를 불러올 수 없습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
this.cboxServer.DataSource = DSSetting.Tables["Server"];
this.cboxServer.DisplayMember = "name";
this.cboxServer.ValueMember = "Server_Id";
this.cboxServer.SelectedIndex = -1;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
}
}
/// <summary>
/// conkey to Base64
/// </summary>
/// <param name="conkey"></param>
/// <returns></returns>
private string GetUserIdFromConkey(string conkey)
{
try
{
string value = Util.GetBase64(conkey);
string[] items = value.Split(':');
if (items == null || items.Length < 1) return string.Empty;
return items[0];
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
return string.Empty;
}
}
/// <summary>
/// conkey to Base64
/// </summary>
/// <param name="conkey"></param>
/// <returns></returns>
private string GetPasswordFromConkey(string conkey)
{
try
{
string value = Util.GetBase64(conkey);
string[] items = value.Split(':');
if (items == null || items.Length < 2) return string.Empty;
return items[1];
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex, true);
return string.Empty;
}
}
public string GetFileSize(long length, FileSizeType format = FileSizeType.Auto)
{
int index = 0;
int nFormat = (int)format;
double value = length;
for (index = 0; index < nFormat; index++)
{
if (format == FileSizeType.Auto && value < 1024) break;
value /= 1024;
}
return $"{value.ToString("N2")} {(FileSizeType)index}";
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="gridFiles.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -366,8 +366,16 @@ namespace DDUtilityApp.MESDOWNLOADER
// 데이터 테이블 생성 후 바인딩
foreach (var item in fileList)
{
dtFiles.Rows.Add(row.Cells["name"].Value, row.Cells["nameap"].Value, item.Name, item.Size.ToString("N0")
, item.Modified.ToString("yyyy-MM-dd HH:mm:ss"), item.Type, row.Cells["url"].Value, row.Cells["dir"].Value, userInfo[0], userInfo[1]);
dtFiles.Rows.Add(
row.Cells["name"].Value,
row.Cells["nameap"].Value,
item.Name, item.Size.ToString("N0"),
item.Modified.ToString("yyyy-MM-dd HH:mm:ss"),
item.Type,
row.Cells["url"].Value,
row.Cells["dir"].Value,
userInfo[0],
userInfo[1]);
}
}

View File

@@ -71,6 +71,7 @@ namespace DDUtilityApp
#region [ ]
frmMain.Buttons.Add("EIS Log Viewer", new EisParser0());
frmMain.Buttons.Add("MES Log Download", typeof(MESDOWNLOADER.ServerLog));
frmMain.Buttons.Add("Server Log Download", typeof(MESDOWNLOADER.FrmServerLog));
//frmMain.Buttons.Add("MIS Log Viewer", new AgvParser()); // 제거
frmMain.Buttons.Add("FDC Mongo Viewer", typeof(MONGO.FrmFDCMongo));
frmMain.Buttons.Add("HSMS Converter", typeof(LOGPARSER.FrmHsmsViewer));

View File

@@ -15,7 +15,7 @@
<Server name="FDC">
<Item name="AP01" url="192.168.8.212" dir="/FDCLog" conkey="bG9ndXNlcjpEYWVkdWNrITE="/>
</Server>
<Server name="RMS">
<Server name="RTD">
<Item name="AP01" url="192.168.8.221" dir="/RTDLog" conkey="bG9ndXNlcjpEYWVkdWNrITE="/>
<Item name="AP02" url="192.168.8.222" dir="/RTDLog" conkey="bG9ndXNlcjpEYWVkdWNrITE="/>
</Server>