FrmServerLog 추가 (개발중...)
This commit is contained in:
444
DDUtilityApp/MESDOWNLOADER/FrmServerLog.cs
Normal file
444
DDUtilityApp/MESDOWNLOADER/FrmServerLog.cs
Normal 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}";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user