Files
DDUtility/DDUtilityApp/LOGPARSER/PARSER/AgvParser.cs
2025-02-03 11:02:48 +09:00

1110 lines
47 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using DDUtilityApp.LOGPARSER.DATA;
using DDUtilityApp.SECS;
using JWH;
using JWH.CONTROL;
using Telerik.WinControls.UI;
namespace DDUtilityApp.LOGPARSER.PARSER
{
public class AgvParser : LogParser
{
#region [ Properties ] ------------------------------------------------
public List<string> UndefinedParser { get; set; } = new List<string>();
protected List<KeyValuePair<string, string>> DefaultKeyMapping { get; set; } = new List<KeyValuePair<string, string>>();
#endregion
#region [ AgvParser ] -------------------------------------------------
public AgvParser()
{
this.Text = $"[EverOne] MIS Log Viewer";
this.LogDTime = "[yyyy-MM-dd HH:mm:ss.fff]";
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("LOGACTION", "Type"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("EVENTNAME", "MessageName"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("MESSAGENAME", "MessageName"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("CEID", "Value"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("EQPNAME", "EquipmentID"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("VEHICLEID", "PortID"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("CARRIERID", "CarrierID"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("LOTID", "LotID"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("SOURCEPORT", "HostPanelID"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("SOURCE", "HostPanelID"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("DESTPORT", "PanelID"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("DEST", "PanelID"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("TRANSACTIONID", "TID"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("TID", "TID"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("SYSTEMID", "SystemByte"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("COMMANDID", "Column1"));
this.DefaultKeyMapping.Add(new KeyValuePair<string, string>("WAYPOINT", "Column2"));
}
public AgvParser(params string[] files) : base(files)
{
}
#endregion
#region [ Method ] ----------------------------------------------------
public override bool Parsing()
{
try
{
base.Initilize();
foreach (string file in this.Files)
{
StreamReader reader = null;
try
{
reader = new StreamReader(file, Encoding.Default);
long readerPosition = reader.BaseStream.Position;
string strLine = this.GetReadLine(reader);
while (strLine != null)
{
Parser parser = this.GetParser(strLine);
if (parser == null)
{
strLine = this.GetReadLine(reader);
continue;
}
StandardData standardData = parser(reader, ref strLine) as StandardData;
if (standardData != null)
{
standardData.Column5 = System.IO.Path.GetFileName(file);
standardData.Column4 = parser.Method.Name;
if (standardData.Body != null) standardData.Body.Clear();
}
}
}
catch (Exception ex01)
{
XLogger.Instance.Fatal(ex01);
}
if (reader != null) reader.Close();
}
foreach (string undefinedParser in this.UndefinedParser)
XLogger.Instance.Warn(undefinedParser);
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return false;
}
return true;
}
public DataTable AgvHeader = null;
protected Parser GetParser(string strLine)
{
Parser parser = null;
try
{
if (string.IsNullOrWhiteSpace(strLine)) return parser;
if (strLine.Length < this.LogDTime.Length) return parser;
DateTime dtime = DateTime.MinValue;
string strDTime = strLine.Substring(0, this.LogDTime.Length);
if (DateTime.TryParse(strDTime.Substring(1, this.LogDTime.Length - 2), out dtime) == false) return parser;
string[] strValues = strLine.ToUpper().Substring(this.LogDTime.Length).Split(new string[] { ":", "|", " ", "[", "]", "(", ")" }, StringSplitOptions.RemoveEmptyEntries);
if (strValues.Length < 3) return parser;
if(strValues[2].Trim().StartsWith("C.T.W.M")) parser = this.InLine_Parser;
if (parser != null) return parser;
switch (strValues[2].Trim())
{
case "C.T.E.C.S.SECSCHANNEL":
parser = this.SECSChannel_Parser; break;
case "C.T.E.C.A.L.ACSLISTENER":
case "C.T.E.C.A.S.ACSWRITER":
case "C.T.E.C.L.L.LCSLISTENER":
case "C.T.E.C.L.S.LCSWRITER":
case "C.T.E.C.S.S.SCSWRITER":
parser = this.AcsLcsScs_Parser; break;
case "C.T.E.H.M.L.MCS2ACSLISTENER":
case "C.T.E.H.M.L.MCS2LCSLISTENER":
case "C.T.E.H.M.L.MCS2SCSLISTENER":
parser = this.MCS2_Parser; break;
case "C.T.E.H.M.L.SERVICEMESSAGELISTENERMCS2MIS":
case "C.T.M.R.PRODUCER":
case "C.T.S.C.W.SERVICEWORKERBASE":
case "C.T.S.C.M.SERVICEMESSAGELISTENER4MIS":
case "C.T.S.C.M.SERVICEMESSAGELISTENER4UI":
case "C.T.S.M.SERVICEMESSAGEFACTORY":
case "C.T.S.W.SERVICEWORKERFACTORY":
case "C.T.S.W.SERVICEWORKERWITHOUTEVENTLOGWRITER":
parser = this.Service_Parser; break;
case "C.T.S.C.M.SERVICEMESSAGELISTENER4RTD":
case "C.T.S.M.F.I.STATESERVICEFACTORYIMPL":
case "C.T.S.M.F.I.EQUIPMENTSERVICEFACTORYIMPL":
case "C.T.S.M.F.I.CARRIERSERVICEFACTORYIMPL":
case "C.T.S.M.F.I.ROUTESERVICEFACTORYIMPL":
case "C.T.S.M.F.I.TRANSPORTSERVICEFACTORYIMPL":
case "C.T.S.M.I.TMSCUSTOMSERVICEIMPL":
case "C.T.W.M.A.VEHICLEMOVING":
case "C.T.W.M.S.CARRIERREMOVED":
parser = this.InLine_Parser; break;
case "K.F.H.HSMSMANAGER":
case "K.F.S.J.TIMERTEMPLATE":
case "K.F.U.ASSERT":
case "O.S.W.S.C.WEBSOCKETMESSAGEBROKERSTATS":
parser = this.Header_Parser; break;
default:
if (this.UndefinedParser.Contains(strValues[2].Trim()) == false)
this.UndefinedParser.Add(strValues[2].Trim());
parser = this.Header_Parser; break;
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return parser;
}
return parser;
}
private bool IsEnd(string strLine)
{
try
{
string strDTime = string.Empty;
DateTime dtime = DateTime.Now;
if (strLine.Length > this.LogDTime.Length)
{
strDTime = strLine.Substring(0, this.LogDTime.Length);
if (DateTime.TryParse(strDTime.Substring(1, this.LogDTime.Length - 2), out dtime) == true) return true;
}
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
return false;
}
private SECSItem GetSECSItem(string message, string text)
{
if (string.IsNullOrEmpty(text)) return null;
SECSItem root = null;
try
{
MemoryStream stream = new MemoryStream(text.ConvertBytes());
StreamReader reader = new StreamReader(stream);
SECSLib.ItemType valueType = SECSLib.ItemType.None;
SECSItem parent = null;
SECSItem item = null;
char chValue;
string strValue = string.Empty;
while (!reader.EndOfStream)
{
chValue = (char)reader.Read();
if (new char[] { '>', (char)0x0D, (char)0x0A, (char)0x09 }.Contains(chValue))
{
strValue = string.Empty;
valueType = SECSLib.ItemType.None;
}
else if (chValue == '<')
{
item = new SECSItem();
if (parent != null)
{
while (parent.Length <= parent.Count)
parent = parent.Parent;
parent.Add(item);
}
if (root == null) root = item;
strValue = this.GetString(reader, ' ');
if (SECSLib.ItemFormat.Keys.Contains(strValue))
{
item.Format = strValue;
strValue = string.Empty;
if (SECSLib.ItemFormat[item.Format] == typeof(IList)) parent = item;
valueType = SECSLib.ItemType.Length; // Next Item is Length
}
}
else if (chValue == '[')
{
strValue = this.GetString(reader, ']').Replace("V", "");
item.Length = Convert.ToInt16(strValue);
strValue = string.Empty;
valueType = SECSLib.ItemType.None;
}
else if (chValue == '\'')
{
strValue = this.GetString(reader, '\'');
item.Value = strValue;
strValue = string.Empty;
valueType = SECSLib.ItemType.None;
}
else
{
switch (valueType)
{
case SECSLib.ItemType.Length:
{
strValue = chValue + this.GetString(reader, new char[] { ' ', '>' }).Replace("V", "");
item.Length = Convert.ToInt16(strValue);
strValue = string.Empty;
valueType = SECSLib.ItemType.Name;
}
break;
case SECSLib.ItemType.Name:
{
strValue = chValue + this.GetString(reader, new char[] { ' ', '>' });
item.Name = strValue;
strValue = string.Empty;
valueType = SECSLib.ItemType.None;
}
break;
default:
break;
}
}
}
root.Stream = message.ToUpper().Substring(1, message.IndexOf('F') - 1);
root.Function = message.ToUpper().Substring(message.IndexOf('F') + 1);
return root;
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
return null;
}
}
private string GetString(StreamReader reader, params char[] chLast)
{
char chValue;
StringBuilder sbValue = new StringBuilder();
while (!reader.EndOfStream)
{
chValue = (char)reader.Read();
if (chLast.Contains(chValue)) return sbValue.ToString();
sbValue.Append(chValue);
}
return sbValue.ToString();
}
public override void SetGridHeader(GridViewEx grid)
{
Dictionary<string, string> dicColumns = new Dictionary<string, string>();
dicColumns.Add("DateTime", "");
dicColumns.Add("Level", "");
dicColumns.Add("Server", "");
dicColumns.Add("Service", "");
dicColumns.Add("Type", "");
dicColumns.Add("MessageName", "");
dicColumns.Add("Return", "");
dicColumns.Add("Value", "");
dicColumns.Add("EquipmentID", "");
dicColumns.Add("PortID", "VEHICLEID");
dicColumns.Add("CarrierID", "");
dicColumns.Add("LotID", "");
dicColumns.Add("HostPanelID", "SourcePort");
dicColumns.Add("PanelID", "DestPort");
dicColumns.Add("PanelQty", "");
dicColumns.Add("TID", "");
dicColumns.Add("SystemByte", "");
dicColumns.Add("Column1", "CommandID");
dicColumns.Add("Column2", "WayPoint");
dicColumns.Add("Column3", "");
dicColumns.Add("Column4", "");
dicColumns.Add("Column5", "");
string columnNames = GlobalVariable.Instance.AgvParser_GridHeader;
if (string.IsNullOrEmpty(columnNames))
{
StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<string, string> pair in dicColumns)
if (new string[] { "" }.Contains(pair.Key) == false) sb.Append($"{pair.Key};");
columnNames = sb.ToString();
}
string columnText = string.Empty;
foreach (string columnName in columnNames.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
{
columnText = columnName;
if (dicColumns.ContainsKey(columnName))
{
if (string.IsNullOrEmpty(dicColumns[columnName]) == false) columnText = dicColumns[columnName];
dicColumns.Remove(columnName);
}
grid.AddColumn(columnName, columnText);
}
foreach (string columnName in dicColumns.Keys)
{
columnText = columnName;
if (string.IsNullOrEmpty(dicColumns[columnName]) == false) columnText = dicColumns[columnName];
grid.AddColumn(columnName, columnText).IsVisible = false;
}
}
public override void SaveGridHeader(GridViewEx grid)
{
StringBuilder sb = new StringBuilder();
foreach (GridViewColumn column in grid.Columns.OrderBy(x => x.Index))
if (column.IsVisible) sb.AppendFormat($"{column.Name};");
GlobalVariable.Instance.AgvParser_GridHeader = sb.ToString();
GlobalVariable.Instance.SaveSetting();
}
#endregion
#region [ Method : delegate object Parser() ] -------------------------
protected object SECSChannel_Parser(StreamReader reader, ref string startLine)
{
string strLine = startLine;
StandardData standardData = null;
try
{
if (string.IsNullOrWhiteSpace(strLine)) return standardData;
if (strLine.Length < this.LogDTime.Length) return standardData;
DateTime dtime = DateTime.MinValue;
string strDTime = strLine.Substring(0, this.LogDTime.Length);
if (DateTime.TryParse(strDTime.Substring(1, this.LogDTime.Length - 2), out dtime) == false) return standardData;
standardData = new StandardData();
standardData.LineNumber = this.LineNumber;
standardData.DateTime = dtime;
this.StandardCollection.Add(standardData);
#region [ Header Line ] ---------------------------------------
string[] strValues = strLine.ToUpper().Substring(this.LogDTime.Length).Split(new string[] { ":", "|", " ", "[", "]", "(", ")" }, StringSplitOptions.RemoveEmptyEntries);
int indexSystemByte = strValues.Length - 2;
for (int index = 0; index < strValues.Length; index++)
{
string strValue = strValues[index];
if (index == 0) { standardData.Level = strValue; continue; }
if (index == 1) { standardData.Server = strValue; continue; }
if (index == 2) { standardData.Service = strValue; continue; }
if (index == 3) { standardData.Type = strValue; continue; }
if (index == 7) { standardData.Value = strValue; continue; }
if (index == 8) { standardData.MessageName = strValue; continue; }
if (index == 14) standardData.Column1 = "LINKTEST";
if (index == indexSystemByte) { standardData.SystemByte = $"SystemByte[{strValue}]"; continue; }
}
#endregion ----------------------------------------------------
#region [ SECS Body ] -----------------------------------------
strLine = this.GetReadLine(reader);
while (string.IsNullOrWhiteSpace(strLine) == false)
{
if (this.IsEnd(strLine)) break;
standardData.Body.AppendLine(strLine);
strLine = this.GetReadLine(reader);
}
startLine = strLine;
#endregion ----------------------------------------------------
#region [ Get SECS Data ] -------------------------------------
SECSItem rootSECS = this.GetSECSItem(standardData.MessageName, standardData.Body.ToString());
standardData.SECSItem = rootSECS;
SECSItem secsItem = null;
SECSItem[] secsItems = null;
if (rootSECS != null)
{
#region [ SetItemValue : SVID ]
// EQPNAME = EquipmentID
secsItem = rootSECS.GetItemByName("EQPNAME").FirstOrDefault();
if (secsItem != null) standardData.EquipmentID = secsItem.Value;
// VEHICLEID = PortID
secsItems = rootSECS.GetItemByName("VEHICLEID");
foreach (SECSItem item in secsItems)
{
if (!string.IsNullOrEmpty(standardData.PortID)) standardData.PortID += ", ";
standardData.PortID += item.Value;
}
// LotID
secsItems = rootSECS.GetItemByName("LOTID");
foreach (SECSItem item in secsItems)
{
if (!string.IsNullOrEmpty(standardData.LotID)) standardData.LotID += ", ";
standardData.LotID += item.Value;
}
// CarrierID
secsItems = rootSECS.GetItemByName("CARRIERID");
foreach (SECSItem item in secsItems)
{
if (!string.IsNullOrEmpty(standardData.CarrierID)) standardData.CarrierID += ", ";
standardData.CarrierID += item.Value;
}
// SOURCEPORT = HostPanelID
secsItems = rootSECS.GetItemByName("SOURCEPORT");
foreach (SECSItem item in secsItems)
{
if (!string.IsNullOrEmpty(standardData.HostPanelID)) standardData.HostPanelID += ", ";
standardData.HostPanelID += item.Value;
}
// DESTPORT = PanelID
secsItems = rootSECS.GetItemByName("DESTPORT");
foreach (SECSItem item in secsItems)
{
if (!string.IsNullOrEmpty(standardData.PanelID)) standardData.PanelID += ", ";
standardData.PanelID += item.Value;
}
// COMMANDID = TID
secsItems = rootSECS.GetItemByName("COMMANDID");
foreach (SECSItem item in secsItems)
{
if (!string.IsNullOrEmpty(standardData.TID)) standardData.TID += ", ";
standardData.TID += item.Value;
}
#endregion
#region [ SetItemValue : SxFx ]
// GetData S5F1
if (rootSECS.Stream == "5" && rootSECS.Function == "1")
{
// ALTX
secsItem = rootSECS.GetItemByName("ALTX").FirstOrDefault();
if (secsItem != null) standardData.Value += $"='{secsItem.Value}'";
}
// GetData S6F11
if (rootSECS.Stream == "6" && rootSECS.Function == "11")
{
// CEID
secsItem = rootSECS.GetItemByName("CEID").FirstOrDefault();
if (secsItem == null) secsItem = rootSECS[1];
standardData.Value = $"CEID: {secsItem.Value} " + standardData.Value;
}
// GetData S6F12
if (rootSECS.Stream == "6" && rootSECS.Function == "12")
{
// RCMD
secsItem = rootSECS.GetItemByName("ACKC6", "CKC6").FirstOrDefault();
if (secsItem == null) secsItem = rootSECS;
if (secsItem != null) standardData.Value = secsItem.Value;
}
// GetData S2F41
if (rootSECS.Stream == "2" && (rootSECS.Function == "41" || rootSECS.Function == "49"))
{
// RCMD
secsItem = rootSECS.GetItemByName("RCMD").FirstOrDefault();
if (secsItem == null) secsItem = rootSECS[0];
if (secsItem != null) standardData.Value = $"RCMD: {secsItem.Value}";
}
// GetData S2F42
if (rootSECS.Stream == "2" && rootSECS.Function == "42")
{
// RCMD
secsItem = rootSECS.GetItemByName("HCACK").FirstOrDefault();
if (secsItem == null) secsItem = rootSECS[0];
if (secsItem != null) standardData.Value = secsItem.Value;
}
// GetData S7F25
if (rootSECS.Stream == "7" && rootSECS.Function == "25")
{
// PPID
secsItem = rootSECS.GetItemByName("PPID").FirstOrDefault();
if (secsItem == null) secsItem = rootSECS[0];
if (secsItem != null) standardData.Value = $"PPID: {secsItem.Value}";
}
#endregion
}
#endregion ----------------------------------------------------
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
return standardData;
}
protected object AcsLcsScs_Parser(StreamReader reader, ref string startLine)
{
string strLine = startLine;
StandardData standardData = null;
try
{
if (string.IsNullOrWhiteSpace(strLine)) return standardData;
if (strLine.Length < this.LogDTime.Length) return standardData;
DateTime dtime = DateTime.MinValue;
string strDTime = strLine.Substring(0, this.LogDTime.Length);
if (DateTime.TryParse(strDTime.Substring(1, this.LogDTime.Length - 2), out dtime) == false) return standardData;
standardData = new StandardData();
standardData.LineNumber = this.LineNumber;
standardData.DateTime = dtime;
this.StandardCollection.Add(standardData);
#region [ Header Line ] ---------------------------------------
string[] strValues = strLine.ToUpper().Substring(this.LogDTime.Length).Split(new string[] { ":", "|", " ", "[", "]", "(", ")" }, StringSplitOptions.RemoveEmptyEntries);
int indexSystemByte = strValues.Length - 2;
for (int index = 0; index < strValues.Length; index++)
{
string strValue = strValues[index];
if (index == 0) { standardData.Level = strValue; continue; }
if (index == 1) { standardData.Server = strValue; continue; }
if (index == 2) { standardData.Service = strValue; continue; }
if (index == 3) { standardData.Type = strValue; continue; }
if (index == 6) { standardData.MessageName = strValue; continue; }
if (index == 9) { standardData.Value = strValue; continue; }
if (index == 14) standardData.Column1 = "LINKTEST";
if (index == indexSystemByte) { standardData.SystemByte = $"SystemByte[{strValue}]"; continue; }
}
#endregion ----------------------------------------------------
#region [ SECS Body ] -----------------------------------------
strLine = this.GetReadLine(reader);
while (string.IsNullOrWhiteSpace(strLine) == false)
{
if (this.IsEnd(strLine)) break;
standardData.Body.AppendLine(strLine);
strLine = this.GetReadLine(reader);
}
startLine = strLine;
#endregion ----------------------------------------------------
#region [ Get SECS Data ] -------------------------------------
SECSItem rootSECS = this.GetSECSItem(standardData.MessageName, standardData.Body.ToString());
standardData.SECSItem = rootSECS;
SECSItem secsItem = null;
SECSItem[] secsItems = null;
if (rootSECS != null)
{
#region [ SetItemValue : SVID ]
// EQPNAME = EquipmentID
secsItem = rootSECS.GetItemByName("EQPNAME").FirstOrDefault();
if (secsItem != null) standardData.EquipmentID = secsItem.Value;
// VEHICLEID = PortID
secsItems = rootSECS.GetItemByName("VEHICLEID");
foreach (SECSItem item in secsItems)
{
if (!string.IsNullOrEmpty(standardData.PortID)) standardData.PortID += ", ";
standardData.PortID += item.Value;
}
// LotID
secsItems = rootSECS.GetItemByName("LOTID");
foreach (SECSItem item in secsItems)
{
if (!string.IsNullOrEmpty(standardData.LotID)) standardData.LotID += ", ";
standardData.LotID += item.Value;
}
// CarrierID
secsItems = rootSECS.GetItemByName("CARRIERID");
foreach (SECSItem item in secsItems)
{
if (!string.IsNullOrEmpty(standardData.CarrierID)) standardData.CarrierID += ", ";
standardData.CarrierID += item.Value;
}
// SOURCEPORT = HostPanelID
secsItems = rootSECS.GetItemByName("SOURCEPORT");
foreach (SECSItem item in secsItems)
{
if (!string.IsNullOrEmpty(standardData.HostPanelID)) standardData.HostPanelID += ", ";
standardData.HostPanelID += item.Value;
}
// DESTPORT = PanelID
secsItems = rootSECS.GetItemByName("DESTPORT");
foreach (SECSItem item in secsItems)
{
if (!string.IsNullOrEmpty(standardData.PanelID)) standardData.PanelID += ", ";
standardData.PanelID += item.Value;
}
// COMMANDID = TID
secsItems = rootSECS.GetItemByName("COMMANDID");
foreach (SECSItem item in secsItems)
{
if (!string.IsNullOrEmpty(standardData.TID)) standardData.TID += ", ";
standardData.TID += item.Value;
}
#endregion
#region [ SetItemValue : SxFx ]
// GetData S5F1
if (rootSECS.Stream == "5" && rootSECS.Function == "1")
{
// ALTX
secsItem = rootSECS.GetItemByName("ALTX").FirstOrDefault();
if (secsItem != null) standardData.Value += $"='{secsItem.Value}'";
}
// GetData S6F11
if (rootSECS.Stream == "6" && rootSECS.Function == "11")
{
// CEID
secsItem = rootSECS.GetItemByName("CEID").FirstOrDefault();
if (secsItem == null) secsItem = rootSECS[1];
standardData.Value = $"CEID: {secsItem.Value} " + standardData.Value;
}
// GetData S6F12
if (rootSECS.Stream == "6" && rootSECS.Function == "12")
{
// RCMD
secsItem = rootSECS.GetItemByName("ACKC6", "CKC6").FirstOrDefault();
if (secsItem == null) secsItem = rootSECS;
if (secsItem != null) standardData.Value = secsItem.Value;
}
// GetData S2F41
if (rootSECS.Stream == "2" && (rootSECS.Function == "41" || rootSECS.Function == "49"))
{
// RCMD
secsItem = rootSECS.GetItemByName("RCMD").FirstOrDefault();
if (secsItem == null) secsItem = rootSECS[0];
if (secsItem != null) standardData.Value = $"RCMD: {secsItem.Value}";
}
// GetData S2F42
if (rootSECS.Stream == "2" && rootSECS.Function == "42")
{
// RCMD
secsItem = rootSECS.GetItemByName("HCACK").FirstOrDefault();
if (secsItem == null) secsItem = rootSECS[0];
if (secsItem != null) standardData.Value = secsItem.Value;
}
// GetData S7F25
if (rootSECS.Stream == "7" && rootSECS.Function == "25")
{
// PPID
secsItem = rootSECS.GetItemByName("PPID").FirstOrDefault();
if (secsItem == null) secsItem = rootSECS[0];
if (secsItem != null) standardData.Value = $"PPID: {secsItem.Value}";
}
#endregion
}
#endregion ----------------------------------------------------
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
return standardData;
}
protected object Service_Parser(StreamReader reader, ref string startLine)
{
string strLine = startLine;
StandardData standardData = null;
try
{
if (string.IsNullOrWhiteSpace(strLine)) return standardData;
if (strLine.Length < this.LogDTime.Length) return standardData;
DateTime dtime = DateTime.MinValue;
string strDTime = strLine.Substring(0, this.LogDTime.Length);
if (DateTime.TryParse(strDTime.Substring(1, this.LogDTime.Length - 2), out dtime) == false) return standardData;
Type type = typeof(StandardData);
standardData = new StandardData();
standardData.LineNumber = this.LineNumber;
standardData.DateTime = dtime;
this.StandardCollection.Add(standardData);
#region [ Header Line ] ---------------------------------------
string[] strValues = strLine.ToUpper().Substring(this.LogDTime.Length).Split(new string[] { ":", "|", " ", "[", "]", "(", ")" }, StringSplitOptions.RemoveEmptyEntries);
for (int index = 0; index < strValues.Length; index++)
{
string strValue = strValues[index];
if (index == 0) { standardData.Level = strValue; continue; }
if (index == 1) { standardData.Server = strValue; continue; }
if (index == 2) { standardData.Service = strValue; continue; }
}
#endregion ----------------------------------------------------
#region [ Message Body ] --------------------------------------
Dictionary<string, string> dicBody = new Dictionary<string, string>();
strLine = this.GetReadLine(reader);
while (string.IsNullOrWhiteSpace(strLine) == false)
{
if (this.IsEnd(strLine)) break;
string[] arrBody = strLine.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
if (arrBody.Length == 2) dicBody.Add(arrBody[0].Trim().ToUpper(), arrBody[1].Trim());
standardData.Body.AppendLine(strLine);
strLine = this.GetReadLine(reader);
}
startLine = strLine;
#endregion ----------------------------------------------------
#region [ Get Message Data ] ----------------------------------
string strMessageKey = string.Empty;
foreach (string key in new string[] { "MESSAGETEXT", "MESSAGESTRING" })
if (dicBody.ContainsKey(key)) { strMessageKey = key; break; }
if (dicBody.ContainsKey(strMessageKey))
{
string strMessage = dicBody[strMessageKey];
int startIndex = 0;
startIndex = strMessage.IndexOf("\":\"", startIndex);
while (startIndex >= 0)
{
int beginIndex = strMessage.Substring(0, startIndex).LastIndexOf("\"");
int endIndex = strMessage.IndexOf("\"", startIndex + 3);
string strKeyValue = strMessage.Substring(beginIndex, endIndex - beginIndex + 1);
string[] arrKeyValue = strKeyValue.Replace("\"", "").Split(':');
if (arrKeyValue.Length == 2)
{
string strKey = arrKeyValue[0].Trim().ToUpper();
if (dicBody.ContainsKey(strKey) == false) dicBody.Add(strKey, arrKeyValue[1].Trim());
}
startIndex = strMessage.IndexOf("\":\"", endIndex);
}
}
//foreach (KeyValuePair<string, string> pair in dicBody)
// XLogger.Instance.Debug(pair);
List<KeyValuePair<string, string>> keyMapping = new List<KeyValuePair<string, string>>();
keyMapping.AddRange(this.DefaultKeyMapping);
foreach (KeyValuePair<string, string> pair in keyMapping)
{
if (dicBody.ContainsKey(pair.Key) == false) continue;
PropertyInfo property = type.GetProperty(pair.Value);
if (property != null) property.SetValue(standardData, dicBody[pair.Key]);
}
#endregion ----------------------------------------------------
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
return standardData;
}
protected object MCS2_Parser(StreamReader reader, ref string startLine)
{
string strLine = startLine;
StandardData standardData = null;
try
{
if (string.IsNullOrWhiteSpace(strLine)) return standardData;
if (strLine.Length < this.LogDTime.Length) return standardData;
DateTime dtime = DateTime.MinValue;
string strDTime = strLine.Substring(0, this.LogDTime.Length);
if (DateTime.TryParse(strDTime.Substring(1, this.LogDTime.Length - 2), out dtime) == false) return standardData;
Type type = typeof(StandardData);
standardData = new StandardData();
standardData.LineNumber = this.LineNumber;
standardData.DateTime = dtime;
this.StandardCollection.Add(standardData);
#region [ Header Line ] ---------------------------------------
string[] strValues = strLine.ToUpper().Substring(this.LogDTime.Length).Split(new string[] { ":", "|", " ", "[", "]", "(", ")" }, StringSplitOptions.RemoveEmptyEntries);
for (int index = 0; index < strValues.Length; index++)
{
string strValue = strValues[index];
if (index == 0) { standardData.Level = strValue; continue; }
if (index == 1) { standardData.Server = strValue; continue; }
if (index == 2) { standardData.Service = strValue; continue; }
}
#endregion ----------------------------------------------------
#region [ Message Body ] --------------------------------------
Dictionary<string, string> dicBody = new Dictionary<string, string>();
strLine = this.GetReadLine(reader);
while (string.IsNullOrWhiteSpace(strLine) == false)
{
if (this.IsEnd(strLine)) break;
standardData.Body.AppendLine(strLine);
strLine = this.GetReadLine(reader);
}
startLine = strLine;
#endregion ----------------------------------------------------
#region [ Get Message Data ] ----------------------------------
string strMessage = standardData.Body.ToString();
int startIndex = 0;
startIndex = strMessage.IndexOf("\" : \"", startIndex);
while (startIndex >= 0)
{
int beginIndex = strMessage.Substring(0, startIndex).LastIndexOf("\"");
int endIndex = strMessage.IndexOf("\"", startIndex + 5);
string strKeyValue = strMessage.Substring(beginIndex, endIndex - beginIndex + 1);
string[] arrKeyValue = strKeyValue.Replace("\"", "").Split(':');
if (arrKeyValue.Length == 2)
{
string strKey = arrKeyValue[0].Trim().ToUpper();
if (dicBody.ContainsKey(strKey) == false) dicBody.Add(strKey, arrKeyValue[1].Trim());
}
startIndex = strMessage.IndexOf("\" : \"", endIndex);
}
//foreach (KeyValuePair<string, string> pair in dicBody)
// XLogger.Instance.Debug(pair);
List<KeyValuePair<string, string>> keyMapping = new List<KeyValuePair<string, string>>();
keyMapping.AddRange(this.DefaultKeyMapping);
foreach (KeyValuePair<string, string> pair in keyMapping)
{
if (dicBody.ContainsKey(pair.Key) == false) continue;
PropertyInfo property = type.GetProperty(pair.Value);
if (property != null) property.SetValue(standardData, dicBody[pair.Key]);
}
#endregion ----------------------------------------------------
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
return standardData;
}
protected object InLine_Parser(StreamReader reader, ref string startLine)
{
string strLine = startLine;
StandardData standardData = null;
try
{
if (string.IsNullOrWhiteSpace(strLine)) return standardData;
if (strLine.Length < this.LogDTime.Length) return standardData;
DateTime dtime = DateTime.MinValue;
string strDTime = strLine.Substring(0, this.LogDTime.Length);
if (DateTime.TryParse(strDTime.Substring(1, this.LogDTime.Length - 2), out dtime) == false) return standardData;
Type type = typeof(StandardData);
standardData = new StandardData();
standardData.LineNumber = this.LineNumber;
standardData.DateTime = dtime;
this.StandardCollection.Add(standardData);
#region [ Header Line ] ---------------------------------------
string[] strValues = strLine.ToUpper().Substring(this.LogDTime.Length).Split(new string[] { ":", "|", " ", "[", "]", "(", ")" }, StringSplitOptions.RemoveEmptyEntries);
for (int index = 0; index < strValues.Length; index++)
{
string strValue = strValues[index];
if (index == 0) { standardData.Level = strValue; continue; }
if (index == 1) { standardData.Server = strValue; continue; }
if (index == 2) { standardData.Service = strValue; continue; }
}
#endregion ----------------------------------------------------
#region [ Body ] ----------------------------------------------
Dictionary<string, string> dicBody = new Dictionary<string, string>();
strLine = this.GetReadLine(reader);
while (string.IsNullOrWhiteSpace(strLine) == false)
{
if (this.IsEnd(strLine)) break;
standardData.Body.AppendLine(strLine);
strLine = this.GetReadLine(reader);
}
startLine = strLine;
for (int i = 3; i < strValues.Length; i++)
{
string[] arrKeyValue = strValues[i].Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
if (arrKeyValue.Length != 2) continue;
string strKey = arrKeyValue[0].Trim().ToUpper();
if (dicBody.ContainsKey(strKey) == false) dicBody.Add(strKey, arrKeyValue[1].Trim());
}
#endregion ----------------------------------------------------
#region [ Get Data ] ------------------------------------------
//foreach (KeyValuePair<string, string> pair in dicBody)
// XLogger.Instance.Debug(pair);
List<KeyValuePair<string, string>> keyMapping = new List<KeyValuePair<string, string>>();
keyMapping.AddRange(this.DefaultKeyMapping);
foreach (KeyValuePair<string, string> pair in keyMapping)
{
if (dicBody.ContainsKey(pair.Key) == false) continue;
PropertyInfo property = type.GetProperty(pair.Value);
if (property != null) property.SetValue(standardData, dicBody[pair.Key]);
}
#endregion ----------------------------------------------------
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
return standardData;
}
protected object Header_Parser(StreamReader reader, ref string startLine)
{
string strLine = startLine;
StandardData standardData = null;
try
{
if (string.IsNullOrWhiteSpace(strLine)) return standardData;
if (strLine.Length < this.LogDTime.Length) return standardData;
DateTime dtime = DateTime.MinValue;
string strDTime = strLine.Substring(0, this.LogDTime.Length);
if (DateTime.TryParse(strDTime.Substring(1, this.LogDTime.Length - 2), out dtime) == false) return standardData;
standardData = new StandardData();
standardData.LineNumber = this.LineNumber;
standardData.DateTime = dtime;
standardData.Type = "NULL";
this.StandardCollection.Add(standardData);
#region [ Header Line ] ---------------------------------------
string[] strValues = strLine.ToUpper().Substring(this.LogDTime.Length).Split(new string[] { ":", "|", " ", "[", "]", "(", ")" }, StringSplitOptions.RemoveEmptyEntries);
for (int index = 0; index < strValues.Length; index++)
{
string strValue = strValues[index];
if (index == 0) { standardData.Level = strValue; continue; }
if (index == 1) { standardData.Server = strValue; continue; }
if (index == 2) { standardData.Service = strValue; continue; }
}
#endregion ----------------------------------------------------
#region [ Body ] ----------------------------------------------
strLine = this.GetReadLine(reader);
while (string.IsNullOrWhiteSpace(strLine) == false)
{
if (this.IsEnd(strLine)) break;
standardData.Body.AppendLine(strLine);
strLine = this.GetReadLine(reader);
}
startLine = strLine;
#endregion ----------------------------------------------------
}
catch (Exception ex)
{
XLogger.Instance.Fatal(ex);
}
return standardData;
}
#endregion
}
}