using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Net.NetworkInformation; using System.Runtime.CompilerServices; using System.Windows.Forms; using DDUtilityApp.LOGPARSER.DATA; using DDUtilityApp.LOGPARSER.PARSER; using DDUtilityApp.MONGO; using DDUtilityApp.SECS; using JWH; using JWH.CONTROL; using JWH.NETWORK; using Telerik.WinControls.UI; using ContentAlignment = System.Drawing.ContentAlignment; namespace DDUtilityApp.LOGPARSER { public partial class FrmLogParser : Form { #region [ Variable ] -------------------------------------------------- private LogParser m_LogParser = null; private FrmMessageReplyTime1 FrmMessageReplyTime { get; set; } = null; private bool IsLogFolderOpen { get; set; } = false; #endregion #region [ Properties ] ------------------------------------------------ private bool RadGridControlKey { get; set; } = false; private StandardCollection StandardCollection { get; set; } = new StandardCollection(); public LogParser LogParser { get { return this.m_LogParser; } set { this.SetLogParser(value); } } private void SetLogParser(LogParser parser) { this.m_LogParser = parser; if (parser == null) return; this.LogParser.SetGridHeader(this.grid); } public EisEquipment Equipment { get; set; } = null; public SECSDefine SECSDefine { get; set; } = null; private FrmFindDialog FindDialog { get; set; } = null; private string WindowText { get; set; } = $"[EverOne] EIS Log Viewer"; private string ServerName { get; set; } = string.Empty; private string EquipmentID { get; set; } = string.Empty; #endregion #region [ FrmLogParser ] ---------------------------------------------- public FrmLogParser() { InitializeComponent(); this.SetLayout(); this.SetEventHandler(); XLogger.Instance.Control = this.tboxException; } public FrmLogParser(LogParser parser, string serverName, string equipmentID) : this() { this.LogParser = parser; if (parser == null) return; this.ServerName = serverName; this.EquipmentID = equipmentID; } private void SetLayout() { this.AllowDrop = true; #if DEBUG this.Text = $"{this.WindowText} - Ver. {Application.ProductVersion} : DEBUG"; #else this.Text = $"{this.WindowText} - Ver. {Application.ProductVersion}"; #endif Font font = new Font("돋움체", 9); this.tboxLog.AllowDrop = true; this.tboxLog.WordWrap = false; this.tboxLog.Multiline = true; this.tboxLog.HideSelection = false; this.tboxLog.ScrollBars = ScrollBars.Both; this.tboxLog.Font = font; this.tboxLog.SetTabWidth(4); this.tboxException.WordWrap = false; this.tboxException.Font = font; this.tboxException.SetTabWidth(4); this.lviewFiles.View = View.Details; ColumnHeader header = this.lviewFiles.Columns.Add("File Name"); header = this.lviewFiles.Columns.Add("Size"); header.TextAlign = HorizontalAlignment.Right; this.lviewFiles.CheckBoxes = true; this.lviewFiles.MultiSelect = false; this.lviewFiles.GridLines = true; this.lviewFiles.FullRowSelect = true; this.lviewFiles.Sorting = System.Windows.Forms.SortOrder.Ascending; this.lviewFiles.HeaderStyle = ColumnHeaderStyle.Nonclickable; this.lviewFiles.ListViewItemSorter = new ListViewItemComparer(0, this.lviewFiles.Sorting); this.chkAutoClear.Checked = true; this.chkDownload.Checked = true; this.chkShowGroupColumns.Checked = true; this.chkLogSynchronization.Checked = true; this.chkHideLinktest.Checked = true; this.chkHidTID.Checked = true; this.chkHideTraceData.Checked = true; this.btnOpenWorkFlow.Visible = false; this.chkGridDTGroupKey.Items.Clear(); foreach (GridViewEx.eDateTimeGroupKey key in Enum.GetValues(typeof(GridViewEx.eDateTimeGroupKey))) { if (key == GridViewEx.eDateTimeGroupKey.Date) continue; bool check = false; if ((key & GridViewEx.eDateTimeGroupKey.Date) > 0) check = true; RadCheckedListDataItem item = new RadCheckedListDataItem(key.ToString(), check); item.Value = key; this.chkGridDTGroupKey.Items.Add(item); } #if !DEBUG this.btnTest01.Visible = false; #endif this.RadGrid_Setting(); this.ActiveControl = this.btnEqpSelector; this.cboxLineNumber.DropDownStyle = ComboBoxStyle.DropDownList; this.cboxLineNumber.Font = font; this.cboxLineNumber.DisplayMember = "Key"; this.cboxLineNumber.ValueMember = "Value"; this.cboxLineNumber.Sorted = true; } private void SetEventHandler() { // DragDrop this.DragDrop += Control_DragDrop; this.DragEnter += Control_DragEnter; this.Load += FrmLogParser_Load; this.FormClosing += FrmLogParser_FormClosing; this.tboxLog.DragDrop += Control_DragDrop; this.tboxLog.DragEnter += Control_DragEnter; this.tboxLog.KeyDown += TboxLog_KeyDown; // File List this.lviewFiles.Click += LviewFiles_Click; this.lviewFiles.ColumnClick += LviewFiles_ColumnClick; this.lviewFiles.Resize += LviewFiles_Resize; this.lviewFiles.KeyDown += LviewFiles_KeyDown; this.tboxFilename.KeyDown += TboxFilename_KeyDown; this.tboxFilename.KeyPress += TboxFilename_KeyPress; this.btnFileAdd.Click += BtnFileAdd_Click; this.btnFileRemove.Click += BtnFileRemove_Click; this.btnFileClear.Click += BtnFileClear_Click; this.btnParsing.Click += BtnParsing_Click; this.btnEqpSelector.Click += BtnEqpSelector_Click; // Capture Image this.pnlFilesButtons.DoubleClick += this.Capture_FullScreen; this.pnlEISInfo.DoubleClick += this.Capture_EISInformation; this.pnlEqInfo01.DoubleClick += this.Capture_EISInformation; this.pnlOptionButton.DoubleClick += this.Capture_LogArea; this.pnlOptionCheck.DoubleClick += this.Capture_LogArea; this.pnlOptions.DoubleClick += this.Capture_LogArea; this.tabLogViewer.DoubleClick += this.Capture_LogArea; this.pnlStatus.DoubleClick += this.LogFolderOpen; // Option this.chkShowGroupColumns.CheckedChanged += this.ChkShowGroupColumns_CheckedChanged; this.chkHideLinktest.CheckedChanged += Filter_CheckedChanged; this.chkHidTID.CheckedChanged += Filter_CheckedChanged; this.chkHideTraceData.CheckedChanged += Filter_CheckedChanged; this.btnClearFilter.Click += BtnClearFilter_Click; this.btnClearGroupBy.Click += this.BtnClearGroupBy_Click; this.btnColumnResize.Click += BtnColumnResize_Click; this.btnMongoDB.Click += this.BtnMongoDB_Click; this.btnMarkingFilter.Click += this.BtnMarkingFilter_Click; this.btnOpenLog.Click += BtnOpenLog_Click; this.btnSaveLog.Click += BtnSaveLog_Click; this.btnSecsDefine.Click += BtnSecsDefine_Click; this.btnOpenWorkFlow.Click += BtnOpenWorkFlow_Click; this.btnClearDownload.Click += BtnClearDownload_Click; this.btnMessageReplyTime.Click += this.BtnMessageReplyTime_Click; this.btnDeploySite.Click += this.BtnDeploySite_Click; this.btnTest01.Click += this.BtnTest01_Click; this.chkGridDTGroupKey.ItemCheckedChanged += this.ChkGridDTGroupKey_ItemCheckedChanged; // StatusBar this.tboxLineNumber.KeyDown += TboxLineNumber_KeyDown; this.tboxLineNumber.KeyPress += TboxLineNumber_KeyPress; this.cboxLineNumber.SelectedIndexChanged += CboxLineNumber_SelectedIndexChanged; this.btnBookmark.Click += BtnBookmark_Click; this.btnBookmarkClear.Click += BtnBookmarkClear_Click; // Grid this.grid.DataBindingComplete += RadGrid_DataBindingComplete; this.grid.SelectionChanged += RadGrid_SelectionChanged; this.grid.ViewCellFormatting += RadGrid_ViewCellFormatting; this.grid.CellDoubleClick += RadGrid_CellDoubleClick; this.grid.KeyDown += RadGrid_KeyDown; this.grid.KeyUp += RadGrid_KeyUp; this.grid.CellClick += RadGrid_CellClick; } private void FrmLogParser_Load(object sender, EventArgs e) { if (string.IsNullOrEmpty(this.ServerName)) return; if (string.IsNullOrEmpty(this.EquipmentID)) return; this.LogParser.ServerName = this.ServerName; this.LogParser.EquipmentID = this.EquipmentID; this.BtnEqpSelector_Click(this.btnEqpSelector, new EventArgs()); } private void FrmLogParser_FormClosing(object sender, FormClosingEventArgs e) { if (this.LogParser != null) this.LogParser.SaveGridHeader(this.grid); } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { try { switch (keyData) { case Keys.F1: Process.Start($"http://192.168.7.221:8081/"); break; case Keys.F2: this.Location = new Point(0, 0); this.Size = new Size(800, 600); break; case Keys.F3: if (this.FindDialog != null) this.FindDialog.Next(); break; case Keys.F5: this.BtnParsing_Click(this.btnParsing, new EventArgs()); break; case Keys.F6: this.grid.BestFitColumns(BestFitColumnMode.DisplayedCells); break; case Keys.PageDown: if (this.grid.RowCount == this.grid.CurrentRow.Index + 1) { int index = this.grid.CurrentRow.Index; this.BtnParsing_Click(this.btnParsing, new EventArgs()); this.grid.CurrentRow = this.grid.Rows[index]; return true; } break; } } catch (Exception ex) { XLogger.Instance.Fatal(ex); } return base.ProcessCmdKey(ref msg, keyData); } #endregion #region [ Control Event ] --------------------------------------------- private void Control_DragDrop(object sender, DragEventArgs e) { XLogger.Instance.Info(e); if (this.chkAutoClear.Checked) this.lviewFiles.Items.Clear(); string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); foreach (string filePath in files) { ListViewItem lviewItem = this.lviewFiles.Items.Add(Path.GetFileName(filePath)); lviewItem.Checked = true; lviewItem.Tag = filePath; } this.tboxEISInfo01.Clear(); this.tboxEISInfo02.Clear(); this.tboxEISInfo03.Clear(); this.tboxEISInfo04.Clear(); this.tboxEISInfo05.Clear(); this.tboxEISInfo07.Clear(); this.tboxEISInfo06.Clear(); this.tboxFilename.Clear(); this.tboxLog.Clear(); this.grid.DataSource = null; this.BtnParsing_Click(this.btnParsing, new EventArgs()); } private void Control_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy; } private void TboxLog_KeyDown(object sender, KeyEventArgs e) { if ((e.KeyData & Keys.Control) == Keys.Control && (e.KeyData & Keys.F) == Keys.F) { if (this.FindDialog == null) { this.FindDialog = new FrmFindDialog(this.tboxLog); this.FindDialog.StartPosition = FormStartPosition.Manual; this.FindDialog.Location = this.grid.PointToScreen(new Point(10, 10)); this.FindDialog.FormClosed += (object sender1, FormClosedEventArgs e1) => { this.FindDialog = null; }; this.FindDialog.FInd += (object sender1, EventArgs e1) => { }; this.FindDialog.Show(); } else { this.FindDialog.Activate(); } this.FindDialog.SelectedText = this.tboxLog.SelectedText; } } #region [ File List Events ] private void LviewFiles_Click(object sender, EventArgs e) { try { if (this.lviewFiles.Items.Count < 1) return; if (this.lviewFiles.SelectedItems.Count < 1) return; int index = -1; index = this.lviewFiles.SelectedItems[0].Index; this.tboxFilename.Text = Path.GetFileName(this.lviewFiles.Items[index].Tag as string); this.tboxFilename.Tag = Path.GetDirectoryName(this.lviewFiles.Items[index].Tag as string); if (string.IsNullOrEmpty(this.tboxFilename.Text) == false && this.tboxFilename.Text.Length > 6) { this.tboxFilename.SelectionStart = this.tboxFilename.Text.Length - 6; this.tboxFilename.SelectionLength = 2; } } catch (Exception ex) { XLogger.Instance.Fatal(ex); } } private void LviewFiles_ColumnClick(object sender, ColumnClickEventArgs e) { try { System.Windows.Forms.SortOrder sorting = System.Windows.Forms.SortOrder.None; switch (this.lviewFiles.Sorting) { case System.Windows.Forms.SortOrder.None: sorting = System.Windows.Forms.SortOrder.Ascending; break; case System.Windows.Forms.SortOrder.Ascending: sorting = System.Windows.Forms.SortOrder.Descending; break; case System.Windows.Forms.SortOrder.Descending: sorting = System.Windows.Forms.SortOrder.None; break; } this.lviewFiles.Sorting = sorting; this.lviewFiles.ListViewItemSorter = new ListViewItemComparer(e.Column, this.lviewFiles.Sorting); } catch (Exception ex) { XLogger.Instance.Fatal(ex); } } private void LviewFiles_Resize(object sender, EventArgs e) { int width = this.lviewFiles.Width - 32; if (this.lviewFiles.Columns.Count == 2) { this.lviewFiles.Columns[0].Width = width - 120; this.lviewFiles.Columns[1].Width = 120; } else { int widthColumn = width / this.lviewFiles.Columns.Count; foreach (ColumnHeader header in this.lviewFiles.Columns) header.Width = widthColumn; } } private void LviewFiles_KeyDown(object sender, KeyEventArgs e) { try { if (e.KeyCode == Keys.Delete) { List items = new List(); foreach (ListViewItem item in this.lviewFiles.SelectedItems) items.Add(item); foreach (ListViewItem item in items) this.lviewFiles.Items.Remove(item); } } catch (Exception ex) { XLogger.Instance.Fatal(ex); } } private void TboxFilename_KeyDown(object sender, KeyEventArgs e) { } private void TboxFilename_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Enter) { this.BtnFileAdd_Click(this.btnFileAdd, new EventArgs()); if (string.IsNullOrEmpty(this.tboxFilename.Text) == false && this.tboxFilename.Text.Length > 6) { this.tboxFilename.SelectionStart = this.tboxFilename.Text.Length - 6; this.tboxFilename.SelectionLength = 2; this.tboxFilename.Focus(); } e.Handled = true; } } private void BtnFileAdd_Click(object sender, EventArgs e) { try { string path = this.tboxFilename.Tag as string; string fileName = this.tboxFilename.Text; if (string.IsNullOrEmpty(fileName)) return; foreach (ListViewItem item in this.lviewFiles.Items) if (string.Compare(item.Text, fileName, true) == 0) return; ListViewItem lviewItem = this.lviewFiles.Items.Add(fileName); lviewItem.Tag = $"{path}{Path.DirectorySeparatorChar}{fileName}"; lviewItem.Checked = true; } catch (Exception ex) { XLogger.Instance.Fatal(ex); } } private void BtnFileRemove_Click(object sender, EventArgs e) { try { if (this.lviewFiles.SelectedItems.Count <= 0) return; this.lviewFiles.SelectedItems[0].Remove(); this.tboxFilename.Text = string.Empty; } catch (Exception ex) { XLogger.Instance.Fatal(ex); } } private void BtnFileClear_Click(object sender, EventArgs e) { this.Text = $"{this.WindowText} - Ver. {Application.ProductVersion}"; this.lviewFiles.Items.Clear(); this.tboxLog.Clear(); this.tboxException.Clear(); this.grid.DataSource = null; } private void BtnParsing_Click(object sender, EventArgs e) { try { this.Cursor = Cursors.WaitCursor; System.GC.Collect(); this.Parsing(); StandardData[] array = this.Filtering(this.StandardCollection.ToArray()); this.grid.AutoBinding(array); if (this.FrmMessageReplyTime != null) { this.FrmMessageReplyTime.StandardCollection.Clear(); this.FrmMessageReplyTime.StandardCollection.AddRange(array); this.FrmMessageReplyTime.Generate(); } } catch (Exception ex) { XLogger.Instance.Fatal(ex); } finally { this.Cursor = Cursors.Default; } } private StandardData[] Filtering(StandardData[] values) { StandardData[] array = null; try { array = values.ToArray(); if (this.chkHideLinktest.Checked) array = array.Where(item => item.Column1?.ToUpper() != "LINKTEST").ToArray(); if (this.chkHidTID.Checked) array = array.Where(item => item.Server?.ToUpper() != "TID" || (item.Server?.ToUpper() == "TID" && item.Level?.ToUpper() != "INFO")).ToArray(); if (this.chkHideTraceData.Checked) { array = array.Where(item => item.MessageName?.ToUpper() != "S6F0").ToArray(); array = array.Where(item => item.MessageName?.ToUpper() != "S6F1").ToArray(); array = array.Where(item => item.MessageName?.ToUpper() != "S6F2").ToArray(); array = array.Where(item => item.MessageName?.ToUpper() != "TRACEDATAREPORT").ToArray(); } return array; } catch (Exception ex) { XLogger.Instance.Fatal(ex); return values; } } private void BtnEqpSelector_Click(object sender, EventArgs e) { if (this.LogParser == null) return; List lstFileNames = new List(); foreach (ListViewItem item in this.lviewFiles.Items) { if (item.Tag != null && item.Tag.GetType() == typeof(string)) lstFileNames.Add(item.Tag.ToString()); } string[] selectedFiles = this.LogParser.FileSelector(this, lstFileNames.ToArray()); if (selectedFiles == null || selectedFiles.Length < 1) return; if (this.chkAutoClear.Checked) this.BtnFileClear_Click(this.btnFileClear, new EventArgs()); this.cboxLineNumber.Items.Clear(); this.cboxLineNumber.Text = string.Empty; if (this.Equipment != null) { this.tboxEISInfo01.Text = this.Equipment.EquipmentID; this.tboxEISInfo02.Text = this.Equipment.DisplayName.Replace("EQP_NAME=", "").Split(new string[] { Environment.NewLine }, StringSplitOptions.None).FirstOrDefault(); this.tboxEISInfo02.Text += $" / {this.Equipment.GemSettingID}"; this.tboxEISInfo03.Text = $"{this.Equipment.ModelID} / {this.Equipment.Version}"; this.tboxEISInfo04.Text = $"[{this.Equipment.Facility}] {this.Equipment.Line}"; this.tboxEISInfo05.Text = $"[{this.Equipment.ProcessSegmentID}] {this.Equipment.ProcessSegmentName}"; this.tboxEISInfo06.Text = $"{this.Equipment.ServerIP} / {this.Equipment.EquipmentIP}:{this.Equipment.Port}"; this.tboxEISInfo07.Text = $"[MES] {this.Equipment.MesSubject} / {this.Equipment.MesService}"; this.LogParser.ModelID = this.Equipment.ModelID; } foreach (string filename in selectedFiles) { this.tboxFilename.Tag = Path.GetDirectoryName(filename); this.tboxFilename.Text = Path.GetFileName(filename); this.BtnFileAdd_Click(this.btnFileAdd, new EventArgs()); } if (this.chkAutoClear.Checked) this.BtnParsing_Click(this.btnParsing, new EventArgs()); } #endregion #region [ Screen Capture & Log Folder Open ] /// /// Capture of EIS Information /// /// /// private void Capture_EISInformation(object sender, EventArgs e) { Bitmap bitmap = this.pnlEISInfo.ControlCapture(); } /// /// Capture of Full Screen /// /// /// private void Capture_FullScreen(object sender, EventArgs e) { Bitmap bitmap = this.ControlCapture(); } /// /// Capture of Grid Area /// /// /// private void Capture_Grid(object sender, EventArgs e) { Bitmap bitmap = this.grid.ControlCapture(); } /// /// Capture of Log Area /// /// /// private void Capture_LogArea(object sender, EventArgs e) { Bitmap bitmap = this.pnlLogView.ControlCapture(); } /// /// 로그폴더 열기 or Capture_FullScreen /// /// /// /// private void LogFolderOpen(object sender, EventArgs e) { if (this.lviewFiles.Items.Count < 1) { this.IsLogFolderOpen = true; this.pnlStatus.BackColor = Color.FromArgb(20, 255, 0, 0); return; } if (this.IsLogFolderOpen) { /* 지정된 PC에서... var macAddress = ( from nic in NetworkInterface.GetAllNetworkInterfaces() where nic.OperationalStatus == OperationalStatus.Up select nic.GetPhysicalAddress().ToString() ).FirstOrDefault(); string[] permissions = new string[] { "00FF746EA3CB" }; if (!permissions.Contains(macAddress)) return; */ string filePath = this.lviewFiles.Items[0].Tag as string; string path = System.IO.Path.GetDirectoryName(filePath); Process.Start(path); } } #endregion #region [ Option Events ] private void ChkShowGroupColumns_CheckedChanged(object sender, EventArgs e) { this.grid.ShowGroupedColumns = this.chkShowGroupColumns.Checked; } private void Filter_CheckedChanged(object sender, EventArgs e) { try { StandardData[] array = this.Filtering(this.StandardCollection.ToArray()); this.grid.AutoBinding(array); } catch (Exception ex) { XLogger.Instance.Fatal(ex); } } private void BtnClearFilter_Click(object sender, EventArgs e) { this.grid.MasterTemplate.FilterDescriptors.Clear(); } private void BtnClearGroupBy_Click(object sender, EventArgs e) { this.grid.MasterTemplate.GroupDescriptors.Clear(); } private void BtnColumnResize_Click(object sender, EventArgs e) { this.grid.BestFitColumns(BestFitColumnMode.DisplayedCells); } private void BtnMongoDB_Click(object sender, EventArgs e) { string equipmentID = this.Equipment?.EquipmentID; string start = string.Empty; string end = string.Empty; if (this.StandardCollection != null && this.StandardCollection.Count > 0) { start = this.StandardCollection.First()?.DateTime.ToString("yyyy-MM-ddTHH:mm:ss"); end = this.StandardCollection.Last()?.DateTime.ToString("yyyy-MM-ddTHH:mm:ss"); } #if DEBUG FrmFDCMongo frmFDCMongo = new FrmFDCMongo(); frmFDCMongo.EquipmentID = equipmentID; frmFDCMongo.DateTimeStart = this.StandardCollection.Last().DateTime; frmFDCMongo.DateTimeEnd = this.StandardCollection.Last().DateTime; frmFDCMongo.Show(); #else ProcessStartInfo processStartInfo = new ProcessStartInfo(); processStartInfo.FileName = Application.ExecutablePath; processStartInfo.WorkingDirectory = Environment.CurrentDirectory; processStartInfo.Arguments = $"FrmFDCMongo {equipmentID} {start} {end}"; Process process = Process.Start(processStartInfo); #endif } private void BtnMarkingFilter_Click(object sender, EventArgs e) { XLogger.Instance.Info(); List lstCondition = new List(); foreach (GridViewColumn column in this.grid.Columns) { foreach (BaseFormattingObject formatting in column.ConditionalFormattingObjectList) { ExpressionFormattingObject express = formatting as ExpressionFormattingObject; if (express == null) continue; if (string.Compare(express.Name, "Marking", true) != 0) continue; lstCondition.Add(express.Expression); XLogger.Instance.Debug($"[{column.Name}] {express.Expression}"); } } StandardCollection template = new StandardCollection(); bool flag = true; foreach (StandardData data in this.grid.DataBindingItems) { flag = false; foreach (string conditon in lstCondition) { flag = this.CheckShowCondition(data, conditon); if (flag == true) break; } if (flag) template.Add(data); } this.grid.AutoBinding(template.ToArray()); } private bool CheckShowCondition(StandardData data, string conditon) { try { bool flag = true; string[] operands = conditon.Split(new string[] { "AND" }, StringSplitOptions.RemoveEmptyEntries); foreach (string operand in operands) { string[] values = operand.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries); if (values.Length != 2) continue; string propertyName = values[0].Trim(); string valueB = values[1].Trim().Replace("'", ""); string valueA = data.PropertyGet(propertyName); if (valueA != valueB) flag = false; } return flag; } catch (Exception ex) { XLogger.Instance.Fatal(ex); return false; } } private void BtnOpenLog_Click(object sender, EventArgs e) { try { List lstFileName = new List(); foreach (ListViewItem lviewItem in this.lviewFiles.Items) { if (lviewItem.Checked == false) continue; XLogger.Instance.Info(lviewItem.Text); string sourceFileName = lviewItem.Tag as string; string destPath = GlobalVariable.Instance.DownloadPath; if (System.IO.Directory.Exists(destPath) == false) System.IO.Directory.CreateDirectory(destPath); string destFileName = $@"{destPath}{System.IO.Path.GetFileName(sourceFileName)}"; if (this.chkDownload.Checked == false) System.IO.File.Copy(sourceFileName, destFileName, true); sourceFileName = destFileName; lstFileName.Add(sourceFileName); } foreach (string filename in lstFileName) Process.Start(filename); } catch (Exception ex) { XLogger.Instance.Fatal(ex); } } private void BtnSaveLog_Click(object sender, EventArgs e) { try { FolderBrowserDialog dialog = new FolderBrowserDialog(); if (dialog.ShowDialog() != DialogResult.OK) return; string pathCopyTo = $"{dialog.SelectedPath}{Path.DirectorySeparatorChar}{this.Equipment.EquipmentID}{Path.DirectorySeparatorChar}"; if (System.IO.Directory.Exists(pathCopyTo) == false) System.IO.Directory.CreateDirectory(pathCopyTo); List lstFilePath = new List(); foreach (ListViewItem lviewItem in this.lviewFiles.Items) { if (lviewItem.Checked == false) continue; XLogger.Instance.Info(lviewItem.Text); string sourceFileName = lviewItem.Tag as string; string fileName = System.IO.Path.GetFileName(sourceFileName); string destPath = GlobalVariable.Instance.DownloadPath; if (System.IO.Directory.Exists(destPath) == false) System.IO.Directory.CreateDirectory(destPath); string destFileName = $@"{destPath}{fileName}"; if (this.chkDownload.Checked == false) System.IO.File.Copy(sourceFileName, destFileName, true); sourceFileName = destFileName; string copyTo = $"{pathCopyTo}{fileName}"; System.IO.File.Copy(sourceFileName, copyTo, true); lstFilePath.Add(copyTo); } if (lstFilePath.Count == 0) return; Process.Start("explorer.exe", $"/select,\"{lstFilePath[0]}\""); } catch (Exception ex) { XLogger.Instance.Fatal(ex); } } private void BtnSecsDefine_Click(object sender, EventArgs e) { if (this.LogParser == null || this.LogParser.SECSDefine == null) return; FrmSecsDefine frm = new FrmSecsDefine(this.LogParser.SECSDefine); frm.StartPosition = FormStartPosition.Manual; int x = this.Location.X + this.Width - frm.Width - 32; int y = this.Location.Y + 32; frm.Location = new Point(x, y); frm.Text = $"{this.Equipment.ModelID} - {this.Equipment.GemSettingID}"; // this.tboxEqModelID.Text; frm.Show(this); } private void BtnOpenWorkFlow_Click(object sender, EventArgs e) { try { FrmWorkFlow dlg = new FrmWorkFlow(); dlg.Owner = this; dlg.Size = this.Size; dlg.Location = this.Location; dlg.StartPosition = FormStartPosition.Manual; dlg.Text = $"{this.Equipment.ModelID} - {this.Equipment.RunningVersion}"; dlg.Equipment = this.Equipment; dlg.Show(); } catch (Exception ex) { XLogger.Instance.Fatal(ex); } } private void BtnClearDownload_Click(object sender, EventArgs e) { try { DialogResult dlgResult = MessageBox.Show($"로컬에 다운로드 된 로그 파일들을 삭제하시겠습니까?", "로그삭제", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); if (dlgResult != DialogResult.OK) return; this.Cursor = Cursors.WaitCursor; string path = string.Empty; path = GlobalVariable.Instance.DownloadPath; if (System.IO.Directory.Exists(path)) System.IO.Directory.Delete(path, true); path = GlobalVariable.Instance.WorkflowPath; if (System.IO.Directory.Exists(path)) System.IO.Directory.Delete(path, true); path = GlobalVariable.Instance.DefaultPath + "Logs" + Path.DirectorySeparatorChar; if (System.IO.Directory.Exists(path)) System.IO.Directory.Delete(path, true); MessageBox.Show($"다운로드 및 로그 파일들이 삭제 되었습니다.", "삭제", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { XLogger.Instance.Fatal(ex); } finally { this.Cursor = Cursors.Default; } } private void BtnMessageReplyTime_Click(object sender, EventArgs e) { try { if (this.StandardCollection == null || this.StandardCollection.Count < 1) return; FrmMessageReplyTime1 frm = new FrmMessageReplyTime1(this.StandardCollection); this.FrmMessageReplyTime = frm; frm.GridView = this.grid; frm.StartPosition = FormStartPosition.CenterParent; frm.FormClosed += new FormClosedEventHandler(delegate (object ddd, FormClosedEventArgs arg) { this.FrmMessageReplyTime = null; }); frm.Show(this); } catch (Exception ex) { XLogger.Instance.Fatal(ex, true); } } private void BtnDeploySite_Click(object sender, EventArgs e) { Process.Start("IEXPLORE.EXE", "http://pms.e1soft.co.kr:8090/Deploy/eqview/"); } private void BtnTest01_Click(object sender, EventArgs e) { } private void ChkGridDTGroupKey_ItemCheckedChanged(object sender, RadCheckedListDataItemEventArgs e) { GridViewEx.eDateTimeGroupKey groupKey = GridViewEx.eDateTimeGroupKey.None; foreach (RadListDataItem item in this.chkGridDTGroupKey.CheckedItems) { GridViewEx.eDateTimeGroupKey itemKey = (GridViewEx.eDateTimeGroupKey)item.Value; groupKey |= itemKey; } this.grid.DateTimeGroupKey = groupKey; } #endregion #region [ StatusBar Events ] private void TboxLineNumber_KeyDown(object sender, KeyEventArgs e) { //if (e.KeyData == Keys.Enter) // this.BtnGoLineNumber_Click(this.btnGoLineNumber, new EventArgs()); } private void TboxLineNumber_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Enter) { this.BtnBookmark_Click(this.btnBookmark, new EventArgs()); e.Handled = true; } } private void CboxLineNumber_SelectedIndexChanged(object sender, EventArgs e) { KeyValuePair cboxItem = (KeyValuePair)this.cboxLineNumber.SelectedItem; string lineNumber = cboxItem.Value; this.tboxLineNumber.Text = lineNumber; this.BtnBookmark_Click(null, null); } private void BtnBookmark_Click(object sender, EventArgs e) { this.Cursor = Cursors.WaitCursor; try { int lineNumber = -1; int.TryParse(this.tboxLineNumber.Text, out lineNumber); foreach (GridViewRowInfo row in this.grid.Rows) { try { StandardData standardData = row.DataBoundItem as StandardData; if (standardData == null) continue; if (lineNumber <= standardData.LineNumber) { this.grid.Focus(); row.IsSelected = false; row.IsCurrent = false; row.IsSelected = true; row.IsCurrent = true; break; } } catch (Exception ex) { XLogger.Instance.Debug(ex); } } } catch (Exception ex) { XLogger.Instance.Fatal(ex); } finally { this.Cursor = Cursors.Default; } } private void BtnBookmarkClear_Click(object sender, EventArgs e) { this.cboxLineNumber.Items.Clear(); } #endregion #endregion #region [ Grid ] ------------------------------------------------------ private void RadGrid_Setting() { this.grid.MultiSelect = true; this.grid.Columns.Clear(); this.grid.TableElement.RowHeight = 20; this.grid.InsertContextMenu(4, "Copy Message", RadGrid_CopyMessage); this.grid.DateTimeGroupKey = GridViewEx.eDateTimeGroupKey.Date; if (this.LogParser != null) this.LogParser.SetGridHeader(this.grid); } private void RadGrid_KeyUp(object sender, KeyEventArgs e) { this.RadGridControlKey = e.Control; if (e.KeyData == Keys.Escape) this.RadGrid_RemoveFormatting(sender, new string[] { "Marking" }); } private void RadGrid_RemoveFormatting(object sender, params string[] names) { try { Dictionary> dicRemove = new Dictionary>(); RadGridView rgrid = sender as RadGridView; foreach (GridViewDataColumn column in rgrid.Columns) { foreach (BaseFormattingObject format in column.ConditionalFormattingObjectList) { if (names.Contains(format.Name)) { if (dicRemove.ContainsKey(column) == false) dicRemove.Add(column, new List()); dicRemove[column].Add(format); } } } foreach (GridViewColumn column in dicRemove.Keys) { foreach (BaseFormattingObject format in dicRemove[column]) column.ConditionalFormattingObjectList.Remove(format); } } catch (Exception ex) { XLogger.Instance.Fatal(ex); } } private void RadGrid_KeyDown(object sender, KeyEventArgs e) { this.RadGridControlKey = e.Control; } private void RadGrid_CellClick(object sender, GridViewCellEventArgs e) { try { RadGridView rgrid = sender as RadGridView; if (rgrid == null) rgrid = this.grid; if (this.RadGridControlKey == false) return; foreach (GridViewDataColumn column in rgrid.Columns) { foreach (BaseFormattingObject obj in column.ConditionalFormattingObjectList) { if (new string[] { "Marking" }.Contains(obj.Name)) { ExpressionFormattingObject formatting = obj as ExpressionFormattingObject; formatting.Expression += $" AND {e.Column.Name} = '{e.Value}'"; } } } } catch (Exception ex) { XLogger.Instance.Fatal(ex); } } private void RadGrid_CellDoubleClick(object sender, GridViewCellEventArgs e) { try { RadGridView rgrid = sender as RadGridView; if (rgrid == null) rgrid = this.grid; StandardData standardData = e.Row.DataBoundItem as StandardData; if (standardData != null) { this.tboxLineNumber.Text = standardData.LineNumber.ToString(); this.tboxLineNumber.Tag = e.Row; string itemKey = $"[{standardData.DateTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}] Line:{standardData.LineNumber.ToString().PadRight(10)} {standardData.MessageName} / {standardData.Value}"; string itemValue = standardData.LineNumber.ToString(); KeyValuePair cboxItem = new KeyValuePair(itemKey, itemValue); if (!this.cboxLineNumber.Items.Contains(cboxItem)) this.cboxLineNumber.Items.Add(cboxItem); this.cboxLineNumber.SelectedItem = cboxItem; } if (e.Value == null) return; var value = e.Value; if (e.Value.GetType() == typeof(DateTime)) { var tempData = (DateTime)e.Value; value = tempData.ToString("yyyy-MM-dd HH:mm:ss.fff"); } ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Marking", $"{e.Column.Name} = '{value}'", true); formatting.RowBackColor = Color.FromArgb(128, 0, 255, 0); rgrid.Columns[e.Column.Name].ConditionalFormattingObjectList.Add(formatting); } catch (Exception ex) { XLogger.Instance.Fatal(ex); } } private void RadGrid_ViewCellFormatting(object sender, CellFormattingEventArgs e) { if (e.CellElement is GridRowHeaderCellElement && e.Row is GridViewDataRowInfo) { #if ROW_INDEX GridDataView dataView = this.grid.MasterTemplate.DataView as GridDataView; e.CellElement.Text = (dataView.Indexer.Items.IndexOf(e.Row) + 1).ToString(); #else StandardData standardData = e.Row.DataBoundItem as StandardData; e.CellElement.Text = (standardData != null ? standardData.LineNumber.ToString() : ""); #endif } else { e.CellElement.ResetValue(LightVisualElement.TextImageRelationProperty, Telerik.WinControls.ValueResetFlags.Local); } } private void RadGrid_DataBindingComplete(object sender, GridViewBindingCompleteEventArgs e) { RadGridView rgrid = sender as RadGridView; if (rgrid == null) return; if (rgrid.Columns.Contains("LineNumber")) rgrid.Columns["LineNumber"].IsVisible = false; if (rgrid.Columns.Contains("DateTime")) rgrid.Columns["DateTime"].FormatString = "{0:yyyy-MM-dd HH:mm:ss.fff}"; if (rgrid.Columns.Contains("Service")) rgrid.Columns["Service"].IsVisible = false; if (rgrid.Columns.Contains("Body")) rgrid.Columns["Body"].IsVisible = false; if (rgrid.Columns.Contains("Level")) { this.RadGrid_RemoveFormatting(rgrid, "Level_Error"); rgrid.Columns["Level"].TextAlignment = ContentAlignment.MiddleCenter; ExpressionFormattingObject formatting = new ExpressionFormattingObject("Level_Error", "Level='ERROR'", true); formatting.RowBackColor = Color.FromArgb(128, 255, 0, 0); rgrid.Columns["Level"].ConditionalFormattingObjectList.Add(formatting); } if (rgrid.Columns.Contains("Type")) { this.RadGrid_RemoveFormatting(rgrid, "Type_Error"); ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Type_Error", "Server<>'TID' and Type='ERROR'", true); formatting.RowBackColor = Color.FromArgb(128, 255, 0, 0); rgrid.Columns["Type"].ConditionalFormattingObjectList.Add(formatting); } if (rgrid.Columns.Contains("Return")) { this.RadGrid_RemoveFormatting(rgrid, "Return_Error"); rgrid.Columns["Return"].TextAlignment = ContentAlignment.MiddleCenter; ExpressionFormattingObject formatting = new ExpressionFormattingObject($"Return_Error", "Return<>'0'", true); formatting.RowBackColor = Color.FromArgb(128, 255, 0, 0); rgrid.Columns["Return"].ConditionalFormattingObjectList.Add(formatting); } rgrid.BestFitColumns(BestFitColumnMode.DisplayedCells); } private void RadGrid_SelectionChanged(object sender, EventArgs e) { try { if (this.chkLogSynchronization.Checked == false) return; this.Cursor = Cursors.WaitCursor; RadGridView rgrid = sender as RadGridView; if (rgrid == null) return; if (rgrid.SelectedRows.Count < 1) return; StandardData data = rgrid.SelectedRows.FirstOrDefault().DataBoundItem as StandardData; if (data == null) return; int dataLineNumber = data.LineNumber - 1; int startLineNumber = dataLineNumber - 10; int bottomLineNumber = dataLineNumber + 100; int dataIndex = this.tboxLog.Text.IndexOf($"{data.LineNumber.ToString("000000")}:"); int difference = dataIndex - this.tboxLog.GetFirstCharIndexFromLine(dataLineNumber); this.tboxLog.SuspendLayout(); if (bottomLineNumber >= this.tboxLog.Lines.Length) bottomLineNumber = this.tboxLog.Lines.Length - 1; this.tboxLog.SelectionStart = this.tboxLog.GetFirstCharIndexFromLine(bottomLineNumber) + difference; this.tboxLog.ScrollToCaret(); if (startLineNumber < 0) startLineNumber = 0; this.tboxLog.SelectionStart = this.tboxLog.GetFirstCharIndexFromLine(startLineNumber) + difference; this.tboxLog.ScrollToCaret(); this.tboxLog.SelectionStart = this.tboxLog.GetFirstCharIndexFromLine(dataLineNumber) + difference; this.tboxLog.SelectionLength = 6; this.tboxLog.ScrollToCaret(); } catch (Exception ex) { XLogger.Instance.Fatal(ex); } finally { this.tboxLog.ResumeLayout(); this.Cursor = Cursors.Default; } } private void RadGrid_CopyMessage(object sender, params object[] args) { try { if (this.grid.SelectedRows.Count < 1) return; StandardData data = this.grid.SelectedRows[0].DataBoundItem as StandardData; string strBody = string.Empty; if (data != null && data.Body != null) strBody = data.Body.ToString(); Clipboard.SetText($"{strBody}"); } catch (Exception ex) { XLogger.Instance.Fatal(ex); } } #endregion #region [ Method ] ---------------------------------------------------- /// /// [CheckPoint] 로그파일을 로컬에 복제후, 데이터를 생성한다 /// /// private StandardCollection Parsing() { try { this.tboxLog.Clear(); this.tboxException.Clear(); this.StandardCollection.Clear(); List lstFileName = new List(); string strTitle = string.Empty; // Process Unit: File foreach (ListViewItem lviewItem in this.lviewFiles.Items) //jhlim 20250202 { if (lviewItem.Checked == false) continue; XLogger.Instance.Info(lviewItem.Text); string fullPath = lviewItem.Tag as string; //var sftpFileInfo = SftpClientWrapper.GetFileInfo(fullPath); var ftpsFileInfo = FtpsClient.GetFileInfo(fullPath); //if (sftpFileInfo != null) if (ftpsFileInfo != null) { //if (lviewItem.SubItems.Count < 2) lviewItem.SubItems.Add($"{((float)sftpFileInfo.Size / 1024 / 1024).ToString("F2")} MB"); //else lviewItem.SubItems[1].Text = $"{((float)sftpFileInfo.Size / 1024 / 1024).ToString("F2")} MB"; if (lviewItem.SubItems.Count < 2) lviewItem.SubItems.Add($"{((float)ftpsFileInfo.Size / 1024 / 1024).ToString("F2")} MB"); else lviewItem.SubItems[1].Text = $"{((float)ftpsFileInfo.Size / 1024 / 1024).ToString("F2")} MB"; if (this.chkDownload.Checked) { string destPath = GlobalVariable.Instance.DownloadPath; if (System.IO.Directory.Exists(destPath) == false) System.IO.Directory.CreateDirectory(destPath); if (string.IsNullOrEmpty(strTitle)) strTitle = System.IO.Path.GetFileNameWithoutExtension(fullPath); string destFileName = $@"{destPath}{System.IO.Path.GetFileName(fullPath)}"; //SftpClientWrapper.DownloadSftpFile(fullPath, destFileName); FtpsClient.DownloadFtpsFile(fullPath, destFileName); fullPath = destFileName; } } else { FileInfo fileInfo = new FileInfo(fullPath); // if (fileInfo.Exists == false) continue; if (lviewItem.SubItems.Count < 2) lviewItem.SubItems.Add($"{((float)fileInfo.Length / 1024 / 1024).ToString("F2")} MB"); else lviewItem.SubItems[1].Text = $"{((float)fileInfo.Length / 1024 / 1024).ToString("F2")} MB"; if (this.chkDownload.Checked) { string destPath = GlobalVariable.Instance.DownloadPath; if (System.IO.Directory.Exists(destPath) == false) System.IO.Directory.CreateDirectory(destPath); if (string.IsNullOrEmpty(strTitle)) strTitle = System.IO.Path.GetFileNameWithoutExtension(fullPath); string destFileName = $@"{destPath}{System.IO.Path.GetFileName(fullPath)}"; if (fullPath != destFileName) { System.IO.File.Copy(fullPath, destFileName, true); } fullPath = destFileName; } } lstFileName.Add(fullPath); } // Process Unit: File if (!string.IsNullOrEmpty(this.tboxEISInfo04.Text)) this.LogParser.ModelID = this.tboxEISInfo04.Text; if (this.SECSDefine != null) this.LogParser.SECSDefine = this.SECSDefine; this.LogParser.Parsing(lstFileName.ToArray()); this.Text = $"{strTitle} - Ver. {Application.ProductVersion}"; this.tboxLog.Text = this.LogParser.LogString.ToString(); this.StandardCollection.AddRange(this.LogParser.StandardCollection); return this.StandardCollection; } catch (Exception ex) { XLogger.Instance.Fatal(ex); return this.StandardCollection; } } #endregion } }