From 2aaa26f0c1da96df50d0f8232f48c2ededd3c525 Mon Sep 17 00:00:00 2001
From: Roman <48102089+romanlryji@users.noreply.github.com>
Date: Wed, 2 Oct 2019 11:18:07 +0300
Subject: [PATCH] C# application
---
EventLogApp/App.config | 6 +
EventLogApp/ConfigSetting.cs | 22 +
EventLogApp/ConfigSettings.cs | 30 +
.../ElasticSearchFieldSynonymsClass.cs | 26 +
EventLogApp/EventElements/Application.cs | 9 +
EventLogApp/EventElements/CodeNameGuidType.cs | 12 +
EventLogApp/EventElements/CodeNameType.cs | 22 +
EventLogApp/EventElements/Computer.cs | 9 +
EventLogApp/EventElements/ESRecord.cs | 28 +
.../EventElements/EventElementsDictionary.cs | 27 +
EventLogApp/EventElements/EventType.cs | 9 +
EventLogApp/EventElements/MainPort.cs | 9 +
EventLogApp/EventElements/Metadata.cs | 9 +
EventLogApp/EventElements/OneEventRecord.cs | 198 +
EventLogApp/EventElements/SecondPort.cs | 9 +
EventLogApp/EventElements/Server.cs | 9 +
EventLogApp/EventElements/StringExtension.cs | 22 +
EventLogApp/EventElements/User.cs | 9 +
EventLogApp/EventLogApp.csproj | 161 +
EventLogApp/EventLogLoaderService.cs | 338 ++
EventLogApp/EventLogProcessor.cs | 1369 +++++++
EventLogApp/EventLogService.Designer.cs | 37 +
EventLogApp/EventLogService.cs | 32 +
.../EventLogServiceInstaller.Designer.cs | 36 +
EventLogApp/EventLogServiceInstaller.cs | 33 +
EventLogApp/InfobaseSetting.cs | 12 +
EventLogApp/NLog.config | 41 +
EventLogApp/NLog.xsd | 3481 +++++++++++++++++
EventLogApp/ParserServices.cs | 51 +
EventLogApp/Program.cs | 26 +
EventLogApp/Properties/AssemblyInfo.cs | 36 +
EventLogApp/ReadParameters.cs | 10 +
EventLogApp/config.json | 39 +
EventLogApp/packages.config | 11 +
EventLogLoader.sln | 21 +-
35 files changed, 6197 insertions(+), 2 deletions(-)
create mode 100644 EventLogApp/App.config
create mode 100644 EventLogApp/ConfigSetting.cs
create mode 100644 EventLogApp/ConfigSettings.cs
create mode 100644 EventLogApp/ElasticSearchFieldSynonymsClass.cs
create mode 100644 EventLogApp/EventElements/Application.cs
create mode 100644 EventLogApp/EventElements/CodeNameGuidType.cs
create mode 100644 EventLogApp/EventElements/CodeNameType.cs
create mode 100644 EventLogApp/EventElements/Computer.cs
create mode 100644 EventLogApp/EventElements/ESRecord.cs
create mode 100644 EventLogApp/EventElements/EventElementsDictionary.cs
create mode 100644 EventLogApp/EventElements/EventType.cs
create mode 100644 EventLogApp/EventElements/MainPort.cs
create mode 100644 EventLogApp/EventElements/Metadata.cs
create mode 100644 EventLogApp/EventElements/OneEventRecord.cs
create mode 100644 EventLogApp/EventElements/SecondPort.cs
create mode 100644 EventLogApp/EventElements/Server.cs
create mode 100644 EventLogApp/EventElements/StringExtension.cs
create mode 100644 EventLogApp/EventElements/User.cs
create mode 100644 EventLogApp/EventLogApp.csproj
create mode 100644 EventLogApp/EventLogLoaderService.cs
create mode 100644 EventLogApp/EventLogProcessor.cs
create mode 100644 EventLogApp/EventLogService.Designer.cs
create mode 100644 EventLogApp/EventLogService.cs
create mode 100644 EventLogApp/EventLogServiceInstaller.Designer.cs
create mode 100644 EventLogApp/EventLogServiceInstaller.cs
create mode 100644 EventLogApp/InfobaseSetting.cs
create mode 100644 EventLogApp/NLog.config
create mode 100644 EventLogApp/NLog.xsd
create mode 100644 EventLogApp/ParserServices.cs
create mode 100644 EventLogApp/Program.cs
create mode 100644 EventLogApp/Properties/AssemblyInfo.cs
create mode 100644 EventLogApp/ReadParameters.cs
create mode 100644 EventLogApp/config.json
create mode 100644 EventLogApp/packages.config
diff --git a/EventLogApp/App.config b/EventLogApp/App.config
new file mode 100644
index 0000000..8fc0551
--- /dev/null
+++ b/EventLogApp/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/EventLogApp/ConfigSetting.cs b/EventLogApp/ConfigSetting.cs
new file mode 100644
index 0000000..ca07611
--- /dev/null
+++ b/EventLogApp/ConfigSetting.cs
@@ -0,0 +1,22 @@
+using System.Collections.Generic;
+
+namespace EventLogApp
+{
+ public class ConfigSetting
+ {
+ public string ConnectionString { get; set; }
+ public string DBType { get; set; }
+ public int RepeatTime { get; set; }
+ public string ESIndexName { get; set; }
+ public bool ESUseSynonymsForFieldsNames { get; set; }
+ public ElasticSearchFieldSynonymsClass ESFieldSynonyms { get; set; }
+ public List Infobases { get; set; }
+
+
+ public ConfigSetting()
+ {
+ Infobases = new List();
+ ESFieldSynonyms = new ElasticSearchFieldSynonymsClass();
+ }
+ }
+}
diff --git a/EventLogApp/ConfigSettings.cs b/EventLogApp/ConfigSettings.cs
new file mode 100644
index 0000000..673aa82
--- /dev/null
+++ b/EventLogApp/ConfigSettings.cs
@@ -0,0 +1,30 @@
+using Newtonsoft.Json;
+using System.IO;
+
+namespace EventLogApp
+{
+ class ConfigSettings
+ {
+ public static ConfigSetting LoadConfigSettingFromFile(string ConfigFilePath)
+ {
+ if (File.Exists(ConfigFilePath))
+ {
+ string JsonText = File.ReadAllText(ConfigFilePath);
+
+ ConfigSetting ConfigSettingObj = JsonConvert.DeserializeObject(JsonText);
+
+ return ConfigSettingObj;
+ }
+
+ return new ConfigSetting();
+ }
+
+
+ public static void SaveConfigSettingToFile(ConfigSetting ConfigSettingObj, string ConfigFilePath)
+ {
+ string JsonText = JsonConvert.SerializeObject(ConfigSettingObj, Formatting.Indented);
+
+ File.WriteAllText(ConfigFilePath, JsonText);
+ }
+ }
+}
diff --git a/EventLogApp/ElasticSearchFieldSynonymsClass.cs b/EventLogApp/ElasticSearchFieldSynonymsClass.cs
new file mode 100644
index 0000000..09eb71d
--- /dev/null
+++ b/EventLogApp/ElasticSearchFieldSynonymsClass.cs
@@ -0,0 +1,26 @@
+namespace EventLogApp
+{
+ public class ElasticSearchFieldSynonymsClass
+ {
+ public string ServerName { get; set; }
+ public string DatabaseName { get; set; }
+ public string RowID { get; set; }
+ public string Severity { get; set; }
+ public string DateTime { get; set; }
+ public string ConnectID { get; set; }
+ public string DataType { get; set; }
+ public string SessionNumber { get; set; }
+ public string DataStructure { get; set; }
+ public string DataString { get; set; }
+ public string Comment { get; set; }
+ public string SessionDataSplitCode { get; set; }
+ public string EventType { get; set; }
+ public string Metadata { get; set; }
+ public string Computer { get; set; }
+ public string PrimaryPort { get; set; }
+ public string Server { get; set; }
+ public string SecondaryPort { get; set; }
+ public string Application { get; set; }
+ public string UserName { get; set; }
+ }
+}
diff --git a/EventLogApp/EventElements/Application.cs b/EventLogApp/EventElements/Application.cs
new file mode 100644
index 0000000..43426da
--- /dev/null
+++ b/EventLogApp/EventElements/Application.cs
@@ -0,0 +1,9 @@
+namespace EventLogApp
+{
+ internal class Application : CodeNameType
+ {
+ public Application(long code, string name) : base(code, name)
+ {
+ }
+ }
+}
diff --git a/EventLogApp/EventElements/CodeNameGuidType.cs b/EventLogApp/EventElements/CodeNameGuidType.cs
new file mode 100644
index 0000000..d9f4493
--- /dev/null
+++ b/EventLogApp/EventElements/CodeNameGuidType.cs
@@ -0,0 +1,12 @@
+namespace EventLogApp
+{
+ internal class CodeNameGuidType : CodeNameType
+ {
+ public string Guid;
+
+ public CodeNameGuidType(long code, string name, string guid) : base(code, name)
+ {
+ this.Guid = guid;
+ }
+ }
+}
diff --git a/EventLogApp/EventElements/CodeNameType.cs b/EventLogApp/EventElements/CodeNameType.cs
new file mode 100644
index 0000000..aba82f0
--- /dev/null
+++ b/EventLogApp/EventElements/CodeNameType.cs
@@ -0,0 +1,22 @@
+namespace EventLogApp
+{
+ internal class CodeNameType
+ {
+ public long Code;
+ public string Name;
+
+ public CodeNameType(long code, string name)
+ {
+ this.Code = code;
+
+ if (string.IsNullOrEmpty(name))
+ {
+ this.Name = string.Empty;
+ }
+ else
+ {
+ this.Name = name;
+ }
+ }
+ }
+}
diff --git a/EventLogApp/EventElements/Computer.cs b/EventLogApp/EventElements/Computer.cs
new file mode 100644
index 0000000..8ed0e37
--- /dev/null
+++ b/EventLogApp/EventElements/Computer.cs
@@ -0,0 +1,9 @@
+namespace EventLogApp
+{
+ internal class Computer : CodeNameType
+ {
+ public Computer(long code, string name) : base(code, name)
+ {
+ }
+ }
+}
diff --git a/EventLogApp/EventElements/ESRecord.cs b/EventLogApp/EventElements/ESRecord.cs
new file mode 100644
index 0000000..9e30291
--- /dev/null
+++ b/EventLogApp/EventElements/ESRecord.cs
@@ -0,0 +1,28 @@
+using System;
+
+namespace EventLogApp
+{
+ internal class ESRecord
+ {
+ public long RowID { get; set; }
+ public string ServerName { get; set; }
+ public string DatabaseName { get; set; }
+ public DateTime DateTime { get; set; }
+ public string Severity { get; set; }
+ public EventType EventType { get; set; }
+ public string Computer { get; set; }
+ public string Application { get; set; }
+ public Metadata Metadata { get; set; }
+ public User UserName { get; set; }
+ public int SessionNumber { get; set; }
+ public int ConnectID { get; set; }
+ public int DataType { get; set; }
+ public string DataStructure { get; set; }
+ public string DataString { get; set; }
+ public string Comment { get; set; }
+ public string PrimaryPort { get; set; }
+ public string SecondaryPort { get; set; }
+ public string Server { get; set; }
+ public int SessionDataSplitCode { get; set; }
+ }
+}
diff --git a/EventLogApp/EventElements/EventElementsDictionary.cs b/EventLogApp/EventElements/EventElementsDictionary.cs
new file mode 100644
index 0000000..0fb2efe
--- /dev/null
+++ b/EventLogApp/EventElements/EventElementsDictionary.cs
@@ -0,0 +1,27 @@
+//using Nest;
+using System.Collections.Generic;
+
+namespace EventLogApp
+{
+ internal class EventElementsDictionary : Dictionary where T : CodeNameType
+ {
+ //private Dictionary dictionary = new Dictionary();
+
+ public EventElementsDictionary() : base() { }
+
+ EventElementsDictionary(int capacity) : base(capacity) { }
+
+ public void Add(T item)
+ {
+ if (typeof(T).IsSubclassOf(typeof(CodeNameGuidType)))
+ {
+ if (base.ContainsKey(item.Code))
+ {
+ base.Remove(item.Code);
+ }
+ }
+
+ base.Add(item.Code, item);
+ }
+ }
+}
diff --git a/EventLogApp/EventElements/EventType.cs b/EventLogApp/EventElements/EventType.cs
new file mode 100644
index 0000000..69b7278
--- /dev/null
+++ b/EventLogApp/EventElements/EventType.cs
@@ -0,0 +1,9 @@
+namespace EventLogApp
+{
+ internal class EventType : CodeNameType
+ {
+ public EventType(long code, string name) : base(code, name)
+ {
+ }
+ }
+}
diff --git a/EventLogApp/EventElements/MainPort.cs b/EventLogApp/EventElements/MainPort.cs
new file mode 100644
index 0000000..e31794b
--- /dev/null
+++ b/EventLogApp/EventElements/MainPort.cs
@@ -0,0 +1,9 @@
+namespace EventLogApp
+{
+ internal class MainPort : CodeNameType
+ {
+ public MainPort(long code, string name) : base(code, name)
+ {
+ }
+ }
+}
diff --git a/EventLogApp/EventElements/Metadata.cs b/EventLogApp/EventElements/Metadata.cs
new file mode 100644
index 0000000..87fe232
--- /dev/null
+++ b/EventLogApp/EventElements/Metadata.cs
@@ -0,0 +1,9 @@
+namespace EventLogApp
+{
+ internal class Metadata : CodeNameGuidType
+ {
+ public Metadata(long code, string name, string guid) : base(code, name, guid)
+ {
+ }
+ }
+}
diff --git a/EventLogApp/EventElements/OneEventRecord.cs b/EventLogApp/EventElements/OneEventRecord.cs
new file mode 100644
index 0000000..1e21a97
--- /dev/null
+++ b/EventLogApp/EventElements/OneEventRecord.cs
@@ -0,0 +1,198 @@
+//using Nest;
+using System;
+using System.Collections.Generic;
+using System.Data.SQLite;
+using System.Globalization;
+
+namespace EventLogApp
+{
+ public class OneEventRecord
+ {
+ public NLog.Logger Log;
+
+ public long RowID { get; set; }
+ public DateTime DateTime { get; set; }
+ public long ConnectID { get; set; }
+ public long Severity { get; set; }
+ public string TransactionStatus { get; set; }
+ public string Transaction { get; set; }
+ public DateTime TransactionStartTime { get; set; }
+ public long TransactionMark { get; set; }
+ public long UserName { get; set; }
+ public long ComputerName { get; set; }
+ public long AppName { get; set; }
+ public long EventID { get; set; }
+ public string EventType { get; set; }
+ public string Comment { get; set; }
+ public int MetadataID;
+ public long SessionDataSplitCode { get; set; }
+ public string DataStructure { get; set; }
+ public string DataString { get; set; }
+ public long DataType { get; set; }
+ public long ServerID { get; set; }
+ public long MainPortID { get; set; }
+ public long SecondPortID { get; set; }
+ public long SessionNumber { get; set; }
+
+ private string eventString;
+
+ public OneEventRecord()
+ {
+ Log = NLog.LogManager.GetLogger("CurrentThread");
+ }
+
+
+ public OneEventRecord(string eventString)
+ {
+ CultureInfo provider = CultureInfo.InvariantCulture;
+
+ this.eventString = eventString;
+
+ List parsedEvent = ParserServices.ParseEventLogString(eventString);
+ DateTime = DateTime.ParseExact(parsedEvent[0], "yyyyMMddHHmmss", provider);
+ TransactionStatus = parsedEvent[1];
+
+ string transactionString = parsedEvent[2].ToString().Replace("}", "").Replace("{", "");
+
+ long transactionDate = From16To10(transactionString.Substring(0, transactionString.IndexOf(",")));
+
+ TransactionStartTime = new DateTime().AddYears(2000);
+
+ try
+ {
+ if (transactionDate != 0)
+ {
+ TransactionStartTime = new DateTime().AddSeconds(Convert.ToInt64(transactionDate / 10000));
+ }
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, this.GetType().ToString());
+ }
+
+ TransactionMark = From16To10(transactionString.Substring(transactionString.IndexOf(",") + 1));
+
+ Transaction = parsedEvent[2];
+ UserName = Convert.ToInt32(parsedEvent[3]);
+ ComputerName = Convert.ToInt32(parsedEvent[4]);
+ AppName = Convert.ToInt32(parsedEvent[5]);
+ EventID = Convert.ToInt32(parsedEvent[7]);
+ EventType = parsedEvent[8];
+ Comment = parsedEvent[9].RemoveQuotes();
+ MetadataID = Convert.ToInt32(parsedEvent[10]);
+ DataStructure = parsedEvent[11];
+ DataString = parsedEvent[12].RemoveQuotes();
+ ServerID = Convert.ToInt32(parsedEvent[13]);
+ MainPortID = Convert.ToInt32(parsedEvent[14]);
+ SecondPortID = Convert.ToInt32(parsedEvent[15]);
+ SessionNumber = Convert.ToInt32(parsedEvent[16]);
+
+ if (DataStructure == "{\"U\"}") //'empty reference
+ {
+ DataStructure = string.Empty;
+ }
+ else if (DataStructure.StartsWith("{"))
+ {
+ //'internal representation for different objects.
+ List ParsedObject = ParserServices.ParseEventLogString(DataStructure);
+
+ if (ParsedObject.Count == 2)
+ {
+ if (ParsedObject[0] == "\"S\"" || ParsedObject[0] == "\"R\"") //'this is string or reference
+ DataStructure = ParsedObject[1].RemoveQuotes(); //'string value
+ }
+ }
+
+ switch (EventType)
+ {
+ case "I":
+ Severity = 1;// '"Information";
+ break;
+ case "W":
+ Severity = 2;// '"Warning"
+ break;
+ case "E":
+ Severity = 3;// '"Error"
+ break;
+ case "N":
+ Severity = 4;// '"Note"
+ break;
+ }
+ }
+
+ public OneEventRecord(SQLiteDataReader reader)
+ {
+ System.Text.Encoding ANSI = System.Text.Encoding.GetEncoding(1252);
+ System.Text.Encoding UTF8 = System.Text.Encoding.UTF8;
+
+ RowID = (long)reader["rowID"];
+ Severity = (long)reader["severity"];
+ ConnectID = (long)reader["connectID"];
+ DateTime = new DateTime().AddSeconds(Convert.ToInt64((long)reader["date"] / 10000));
+ TransactionStatus = reader["transactionStatus"].ToString();
+ TransactionMark = (long)reader["transactionID"];
+ TransactionStartTime = new DateTime().AddYears(2000);
+
+ try
+ {
+ if ((long)reader["transactionDate"] != 0)
+ {
+ TransactionStartTime = new DateTime().AddSeconds(Convert.ToInt64((long)reader["transactionDate"] / 10000));
+ }
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, this.GetType().ToString());
+ }
+
+ UserName = (long)reader["userCode"];
+ ComputerName = (long)reader["computerCode"];
+ AppName = (long)reader["appCode"];
+ EventID = (long)reader["eventCode"];
+ Comment = (string)reader["comment"];
+
+ string MDCodes = (string)reader["metadataCodes"];
+
+ if (string.IsNullOrEmpty(MDCodes))
+ {
+ MetadataID = 0;
+ }
+ else if (MDCodes.Contains(","))
+ {
+ string MDCode = MDCodes.Split(',')[0];
+ int.TryParse(MDCode, out MetadataID);
+ }
+ else
+ {
+ int.TryParse(MDCodes, out MetadataID);
+ }
+
+ string s = string.Empty;
+
+ if (!string.IsNullOrEmpty((string)reader["data"]))
+ {
+ s = UTF8.GetString(ANSI.GetBytes((string)reader["data"]));
+ }
+
+ DataStructure = s;
+
+ DataType = (long)reader["dataType"];
+ DataString = (string)reader["dataPresentation"];
+ ServerID = (long)reader["workServerCode"];
+ MainPortID = (long)reader["primaryPortCode"];
+ SecondPortID = (long)reader["secondaryPortCode"];
+ SessionNumber = (long)reader["session"];
+ SessionDataSplitCode = (long)reader["sessionDataSplitCode"];
+
+ Transaction = string.Empty;
+ EventType = string.Empty;
+ }
+
+
+ private long From16To10(string str)
+ {
+ return long.Parse(str, NumberStyles.HexNumber);
+ }
+
+ }
+}
diff --git a/EventLogApp/EventElements/SecondPort.cs b/EventLogApp/EventElements/SecondPort.cs
new file mode 100644
index 0000000..1ee5b91
--- /dev/null
+++ b/EventLogApp/EventElements/SecondPort.cs
@@ -0,0 +1,9 @@
+namespace EventLogApp
+{
+ internal class SecondPort : CodeNameType
+ {
+ public SecondPort(long code, string name) : base(code, name)
+ {
+ }
+ }
+}
diff --git a/EventLogApp/EventElements/Server.cs b/EventLogApp/EventElements/Server.cs
new file mode 100644
index 0000000..d7db3bc
--- /dev/null
+++ b/EventLogApp/EventElements/Server.cs
@@ -0,0 +1,9 @@
+namespace EventLogApp
+{
+ internal class Server : CodeNameType
+ {
+ public Server(long code, string name) : base(code, name)
+ {
+ }
+ }
+}
diff --git a/EventLogApp/EventElements/StringExtension.cs b/EventLogApp/EventElements/StringExtension.cs
new file mode 100644
index 0000000..21a3605
--- /dev/null
+++ b/EventLogApp/EventElements/StringExtension.cs
@@ -0,0 +1,22 @@
+namespace EventLogApp
+{
+ public static class StringExtension
+ {
+ public static string RemoveQuotes(this string str)
+ {
+ string retval = str;
+
+ if (retval.StartsWith("\""))
+ {
+ retval = retval.Substring(1);
+ }
+
+ if (retval.EndsWith("\""))
+ {
+ retval = retval.Substring(0, retval.Length - 1);
+ }
+
+ return retval;
+ }
+ }
+}
diff --git a/EventLogApp/EventElements/User.cs b/EventLogApp/EventElements/User.cs
new file mode 100644
index 0000000..6c03802
--- /dev/null
+++ b/EventLogApp/EventElements/User.cs
@@ -0,0 +1,9 @@
+namespace EventLogApp
+{
+ internal class User : CodeNameGuidType
+ {
+ public User(long code, string name, string guid) : base(code, name, guid)
+ {
+ }
+ }
+}
diff --git a/EventLogApp/EventLogApp.csproj b/EventLogApp/EventLogApp.csproj
new file mode 100644
index 0000000..5ef76bd
--- /dev/null
+++ b/EventLogApp/EventLogApp.csproj
@@ -0,0 +1,161 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {036F352B-E448-47E0-BB91-F98D4896C6CA}
+ Exe
+ EventLogApp
+ EventLogApp
+ v4.7.1
+ 512
+ true
+ true
+
+
+
+ false
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x64
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\packages\BouncyCastle.1.8.3.1\lib\BouncyCastle.Crypto.dll
+
+
+ ..\packages\Google.Protobuf.3.6.1\lib\net45\Google.Protobuf.dll
+
+
+ ..\packages\MySql.Data.8.0.16\lib\net452\MySql.Data.dll
+
+
+ ..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll
+
+
+ ..\packages\NLog.4.6.2\lib\net45\NLog.dll
+
+
+
+
+
+
+
+
+ ..\packages\System.Data.SQLite.Core.1.0.110.0\lib\net451\System.Data.SQLite.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Component
+
+
+ EventLogService.cs
+
+
+ Component
+
+
+ EventLogServiceInstaller.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+ Designer
+
+
+
+
+
+ False
+ Microsoft .NET Framework 4.7.1 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
+
+
+
\ No newline at end of file
diff --git a/EventLogApp/EventLogLoaderService.cs b/EventLogApp/EventLogLoaderService.cs
new file mode 100644
index 0000000..2f6f13e
--- /dev/null
+++ b/EventLogApp/EventLogLoaderService.cs
@@ -0,0 +1,338 @@
+using System;
+using System.Collections.Generic;
+using System.Data.SqlClient;
+using System.IO;
+using System.Threading;
+
+namespace EventLogApp
+{
+ public class EventLogLoaderService
+ {
+ List ListOfProcessors = new List();
+ List ArrayThread;
+
+ public ConfigSetting ConfigSettingObj = new ConfigSetting();
+ string ConnectionString;
+ string DBType;
+ bool ItIsMySQL;
+ bool ItIsMSSQL;
+ bool ItIsElasticSearch;
+ public int SleepTime = 60 * 1000; //1 мин
+
+ public Thread WorkerThread;
+ private NLog.Logger Log;
+
+ public EventLogLoaderService()
+ {
+ //InitializeComponent();
+
+ Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
+
+ Log = NLog.LogManager.GetLogger("CurrentThread");
+
+ ArrayThread = new List();
+
+ WorkerThread = new Thread(DoWork);
+ WorkerThread.SetApartmentState(ApartmentState.STA);
+ }
+
+
+ public void DoWork()
+ {
+ if (!LoadConfigSetting())
+ {
+ Log.Error("Error while working with config.json file in application folder");
+ Environment.Exit(-1);
+ }
+
+ CreateTables();
+
+ foreach (EventLogProcessor IB in ListOfProcessors)
+ {
+ try
+ {
+ IB.GetInfobaseIDFromDatabase();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"Error occurred while getting infobase ID from target database ({IB.InfobaseName})");
+
+ continue;
+ }
+
+ try
+ {
+ var Thead = new Thread(IB.DoWork)
+ {
+ IsBackground = false
+ };
+
+ Thead.Start();
+
+ ArrayThread.Add(Thead);
+
+ //-------------------------------------
+
+ //IB.DoWork();
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, $"Error occurred while starting new thread ({IB.InfobaseName})");
+ }
+ }
+ }
+
+
+ public void CreateTables()
+ {
+ try
+ {
+ if (ItIsMSSQL)
+ {
+ SqlConnection objConn = new SqlConnection(ConnectionString);
+ objConn.Open();
+
+ var command = new SqlCommand(@"IF NOT EXISTS (select * from sysobjects where id = object_id(N'Events'))
+ BEGIN
+ CREATE TABLE[dbo].[Events]([InfobaseCode] int Not NULL, [DateTime][datetime] Not NULL,
+ [TransactionStatus][varchar](1) NULL,
+ [TransactionStartTime][datetime] NULL,
+
+ [TransactionMark] bigint NULL,
+ [Transaction][varchar](100) NULL,
+
+ [UserName] int NULL,
+
+ [ComputerName] int NULL,
+
+ [AppName] Int NULL,
+ [EventID] int NULL,
+
+ [EventType][varchar](1) NULL,
+ [Comment][nvarchar](max) NULL,
+
+ [MetadataID] int NULL,
+
+ [DataStructure][nvarchar](max) NULL,
+
+ [DataString][nvarchar](max) NULL,
+ [ServerID] int NULL,
+
+ [MainPortID] int NULL,
+ [SecondPortID] int NULL,
+
+ [Seance] int NULL);
+ CREATE CLUSTERED INDEX[CIX_Events] ON[dbo].[Events]([InfobaseCode], [DateTime])
+ END", objConn);
+ command.ExecuteNonQuery();
+
+ command.CommandText = "IF NOT EXISTS (select * from sysobjects where id = object_id(N'Infobases'))" + Environment.NewLine +
+ " CREATE TABLE [dbo].[Infobases] ([Guid] [char](40) NOT NULL, [Code] int NOT NULL, [Name] [char](100))" + Environment.NewLine +
+ " IF NOT EXISTS (select * from sys.indexes where object_id = object_id(N'Infobases') AND Name = 'ClusteredIndex')" + Environment.NewLine +
+ " CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex] ON [dbo].[Infobases] ([Guid] ASC);";
+ command.ExecuteNonQuery();
+
+ command.CommandText =
+ "IF NOT EXISTS (select * from sysobjects where id = object_id(N'Users'))" + Environment.NewLine +
+ "CREATE TABLE [dbo].[Users]([InfobaseCode] int NOT NULL, [Code] int NOT NULL, [Name] [nvarchar](100), [Guid] [varchar](40));" + Environment.NewLine +
+ "IF NOT EXISTS (select * from sys.indexes where object_id = object_id(N'Users') AND Name = 'ClusteredIndex')" + Environment.NewLine +
+ "CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex] ON [dbo].[Users] ([InfobaseCode] ASC, [Code] ASC);" + Environment.NewLine +
+ "" +
+ "IF NOT EXISTS (select * from sysobjects where id = object_id(N'Metadata'))" + Environment.NewLine +
+ "CREATE TABLE [dbo].[Metadata]([InfobaseCode] int NOT NULL, [Code] int NOT NULL, [Name] [nvarchar](100), [Guid] [varchar](40));" + Environment.NewLine +
+ "IF NOT EXISTS (select * from sys.indexes where object_id = object_id(N'Metadata') AND Name = 'ClusteredIndex')" + Environment.NewLine +
+ "CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex] ON [dbo].[Metadata] ([InfobaseCode] ASC, [Code] ASC);" + Environment.NewLine +
+ "" +
+ "IF NOT EXISTS (select * from sysobjects where id = object_id(N'Computers'))" + Environment.NewLine +
+ "CREATE TABLE [dbo].[Computers]([InfobaseCode] int NOT NULL, [Code] int NOT NULL, [Name] [nvarchar](100));" + Environment.NewLine +
+ "IF NOT EXISTS (select * from sys.indexes where object_id = object_id(N'Computers') AND Name = 'ClusteredIndex')" + Environment.NewLine +
+ "CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex] ON [dbo].[Computers] ([InfobaseCode] ASC, [Code] ASC);" + Environment.NewLine +
+ "" +
+ "IF NOT EXISTS (select * from sysobjects where id = object_id(N'Applications'))" + Environment.NewLine +
+ "CREATE TABLE [dbo].[Applications]([InfobaseCode] int NOT NULL, [Code] int NOT NULL,[Name] [nvarchar](100));" + Environment.NewLine +
+ "IF NOT EXISTS (select * from sys.indexes where object_id = object_id(N'Applications') AND Name = 'ClusteredIndex')" + Environment.NewLine +
+ "CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex] ON [dbo].[Applications] ([InfobaseCode] ASC, [Code] ASC);" + Environment.NewLine +
+ "" +
+ "IF NOT EXISTS (select * from sysobjects where id = object_id(N'EventsType'))" + Environment.NewLine +
+ "CREATE TABLE [dbo].[EventsType]([InfobaseCode] int NOT NULL, [Code] int NOT NULL, [Name] [nvarchar](max));" + Environment.NewLine +
+ "IF NOT EXISTS (select * from sys.indexes where object_id = object_id(N'EventsType') AND Name = 'ClusteredIndex')" + Environment.NewLine +
+ "CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex] ON [dbo].[EventsType] ([InfobaseCode] ASC, [Code] ASC);" + Environment.NewLine +
+ "" +
+ "IF NOT EXISTS (select * from sysobjects where id = object_id(N'Servers'))" + Environment.NewLine +
+ "CREATE TABLE [dbo].[Servers]([InfobaseCode] int NOT NULL, [Code] int NOT NULL, [Name] [nvarchar](100));" + Environment.NewLine +
+ "IF NOT EXISTS (select * from sys.indexes where object_id = object_id(N'Servers') AND Name = 'ClusteredIndex')" + Environment.NewLine +
+ "CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex] ON [dbo].[Servers] ([InfobaseCode] ASC, [Code] ASC);" + Environment.NewLine +
+ "" +
+ "IF NOT EXISTS (select * from sysobjects where id = object_id(N'MainPorts'))" + Environment.NewLine +
+ "CREATE TABLE [dbo].[MainPorts]([InfobaseCode] int NOT NULL, [Code] int NOT NULL, [Name] [nvarchar](100));" + Environment.NewLine +
+ "IF NOT EXISTS (select * from sys.indexes where object_id = object_id(N'MainPorts') AND Name = 'ClusteredIndex')" + Environment.NewLine +
+ "CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex] ON [dbo].[MainPorts] ([InfobaseCode] ASC, [Code] ASC);" + Environment.NewLine +
+ "" +
+ "IF NOT EXISTS (select * from sysobjects where id = object_id(N'SecondPorts'))" + Environment.NewLine +
+ "CREATE TABLE [dbo].[SecondPorts]([InfobaseCode] int NOT NULL, [Code] int NOT NULL, [Name] [nvarchar](100));" + Environment.NewLine +
+ "IF NOT EXISTS (select * from sys.indexes where object_id = object_id(N'SecondPorts') AND Name = 'ClusteredIndex')" + Environment.NewLine +
+ "CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex] ON [dbo].[SecondPorts] ([InfobaseCode] ASC, [Code] ASC);";
+
+ command.ExecuteNonQuery();
+
+ command.CommandText = "SELECT TOP 1 * FROM Events";
+ command.ExecuteReader();
+
+ command.Dispose();
+ objConn.Close();
+ objConn.Dispose();
+ }
+ else if (ItIsMySQL)
+ {
+ MySql.Data.MySqlClient.MySqlConnection objConn = new MySql.Data.MySqlClient.MySqlConnection(ConnectionString);
+ objConn.Open();
+
+ string DBName = objConn.Database;
+
+ MySql.Data.MySqlClient.MySqlCommand command = new MySql.Data.MySqlClient.MySqlCommand
+ {
+ Connection = objConn,
+ CommandText = "CREATE TABLE IF NOT EXISTS `Events` (`InfobaseCode` int(11) NOT NULL, `DateTime` int(11) NOT NULL," +
+ "`TransactionStatus` varchar(1) NULL, `TransactionStartTime` datetime NULL, " +
+ "`TransactionMark` bigint NULL, `Transaction` varchar(100) NULL, `UserName` int(11) NULL, `ComputerName` int(11) NULL, " +
+ "`AppName` int(11) NULL, `EventID` int(11) NULL, `EventType` varchar(1) NULL, " +
+ "`Comment` text NULL, `MetadataID` int(11) NULL, `DataStructure` text NULL, `DataString` text NULL, " +
+ "`ServerID` int(11) NULL, `MainPortID` int(11) NULL, `SecondPortID` int(11) NULL, `Seance` int(11) NULL" +
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8;"
+ };
+
+ command.ExecuteNonQuery();
+
+ command.CommandText = "CREATE TABLE IF NOT EXISTS `Infobases` (`Guid` varchar(40) NOT NULL, `Code` int(11) NOT NULL, `Name` varchar(100)," +
+ "PRIMARY KEY `Guid` (`Guid`));";
+ command.ExecuteNonQuery();
+
+ command.CommandText =
+ "CREATE TABLE IF NOT EXISTS `Users`(`InfobaseCode` int(11) NOT NULL, `Code` int(11) NOT NULL, `Name` varchar(100), `Guid` varchar(40), PRIMARY KEY (`InfobaseCode`, `Code`));" + Environment.NewLine +
+ "" +
+ "CREATE TABLE IF NOT EXISTS `Metadata`(`InfobaseCode` int(11) NOT NULL, `Code` int(11) NOT NULL, `Name` varchar(100), `Guid` varchar(40), PRIMARY KEY (`InfobaseCode`, `Code`));" + Environment.NewLine +
+ "" +
+ "CREATE TABLE IF NOT EXISTS `Computers`(`InfobaseCode` int(11) NOT NULL, `Code` int(11) NOT NULL, `Name` varchar(100), PRIMARY KEY (`InfobaseCode`, `Code`));" + Environment.NewLine +
+ "" +
+ "CREATE TABLE IF NOT EXISTS `Applications`(`InfobaseCode` int(11) NOT NULL, `Code` int(11) NOT NULL, `Name` varchar(100), PRIMARY KEY (`InfobaseCode`, `Code`));" + Environment.NewLine +
+ "" +
+ "CREATE TABLE IF NOT EXISTS `EventsType`(`InfobaseCode` int(11) NOT NULL, `Code` int(11) NOT NULL, `Name` text, PRIMARY KEY (`InfobaseCode`, `Code`));" + Environment.NewLine +
+ "" +
+ "CREATE TABLE IF NOT EXISTS `Servers`(`InfobaseCode` int(11) NOT NULL, `Code` int(11) NOT NULL, `Name` varchar(100), PRIMARY KEY (`InfobaseCode`, `Code`));" + Environment.NewLine +
+ "" +
+ "CREATE TABLE IF NOT EXISTS `MainPorts`(`InfobaseCode` int(11) NOT NULL, `Code` int(11) NOT NULL, `Name` varchar(100), PRIMARY KEY (`InfobaseCode`, `Code`));" + Environment.NewLine +
+ "" +
+ "CREATE TABLE IF NOT EXISTS `SecondPorts`(`InfobaseCode` int(11) NOT NULL, `Code` int(11) NOT NULL, `Name` varchar(100), PRIMARY KEY (`InfobaseCode`, `Code`));";
+
+ command.ExecuteNonQuery();
+
+ command.Dispose();
+ objConn.Close();
+ objConn.Dispose();
+ }
+
+ Log.Info("Target database tables have been verified!");
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, "Error occurred while during target database tables verification");
+ }
+ }
+
+
+ public bool LoadConfigSetting()
+ {
+ try
+ {
+ string PathConfigFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.json");
+
+ if (File.Exists(PathConfigFile))
+ {
+ ConfigSettingObj = ConfigSettings.LoadConfigSettingFromFile(PathConfigFile);
+
+ ConnectionString = ConfigSettingObj.ConnectionString;
+ DBType = ConfigSettingObj.DBType;
+
+ if (DBType == "MySQL")
+ {
+ ItIsMySQL = true;
+ }
+ else if (DBType == "MS SQL Server")
+ {
+ ItIsMSSQL = true;
+ }
+ else if (DBType == "ElasticSearch")
+ {
+ ItIsElasticSearch = true;
+ }
+
+ this.SleepTime = this.ConfigSettingObj.RepeatTime * 1000;
+
+ foreach (InfobaseSetting IBConfig in ConfigSettingObj.Infobases)
+ {
+ string IB_ID = IBConfig.DatabaseID;
+ string IB_Name = IBConfig.DatabaseName;
+ string IB_Catalog = IBConfig.DatabaseCatalog;
+
+ EventLogProcessor EventLogProcessorObj = new EventLogProcessor
+ {
+ Log = NLog.LogManager.GetLogger("CurrentThread"),
+ InfobaseGuid = IB_ID,
+ InfobaseName = IB_Name,
+ Catalog = IB_Catalog,
+ ConnectionString = this.ConnectionString,
+ SleepTime = this.SleepTime,
+ ItIsMSSQL = this.ItIsMSSQL,
+ ItIsMySQL = this.ItIsMySQL,
+ ItIsElasticSearch = this.ItIsElasticSearch,
+ ESIndexName = this.ConfigSettingObj.ESIndexName,
+ ESServerName = IBConfig.ESServerName,
+ ESUseSynonymsForFieldsNames = this.ConfigSettingObj.ESUseSynonymsForFieldsNames,
+ ESFieldSynonyms = this.ConfigSettingObj.ESFieldSynonyms
+ };
+
+ try
+ {
+ EventLogProcessorObj.LoadEventsStartingAt = DateTime.Parse(IBConfig.StartDate);
+ }
+ catch (Exception ex)
+ {
+ EventLogProcessorObj.LoadEventsStartingAt = new DateTime(1900, 1, 1);
+
+ Log.Error(ex, this.GetType().ToString());
+ }
+
+ ListOfProcessors.Add(EventLogProcessorObj);
+ }
+
+ return true;
+ }
+ else
+ {
+ Log.Error("File config.json was not found!");
+
+ return false;
+ }
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, "Parameters cannot be load from config.json file (it may be corrupted)");
+
+ throw ex;
+ }
+ }
+
+
+ public void SubStart()
+ {
+ WorkerThread.Start();
+ }
+
+
+ public void SubStop()
+ {
+ WorkerThread.Abort();
+ }
+
+ }
+}
diff --git a/EventLogApp/EventLogProcessor.cs b/EventLogApp/EventLogProcessor.cs
new file mode 100644
index 0000000..da2cfd1
--- /dev/null
+++ b/EventLogApp/EventLogProcessor.cs
@@ -0,0 +1,1369 @@
+using MySql.Data.MySqlClient;
+//using Nest;
+using Newtonsoft.Json;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.SqlClient;
+using System.Data.SQLite;
+using System.Globalization;
+using System.IO;
+using System.Threading;
+
+namespace EventLogApp
+{
+ partial class EventLogProcessor
+ {
+ public EventElementsDictionary UsersDictionary = new EventElementsDictionary();
+ public EventElementsDictionary ComputersDictionary = new EventElementsDictionary();
+ public EventElementsDictionary ApplicationsDictionary = new EventElementsDictionary();
+ public EventElementsDictionary EventsDictionary = new EventElementsDictionary();
+ public EventElementsDictionary MetadataDictionary = new EventElementsDictionary();
+ public EventElementsDictionary ServersDictionary = new EventElementsDictionary();
+ public EventElementsDictionary MainPortsDictionary = new EventElementsDictionary();
+ public EventElementsDictionary SecondPortsDictionary = new EventElementsDictionary();
+
+ public List EventsList = new List();
+
+ public string ESIndexName;
+ public string ESServerName;
+
+ public string InfobaseName;
+ public string InfobaseGuid;
+ public int InfobaseID;
+ public string ConnectionString;
+ public bool ItIsMSSQL;
+ public bool ItIsMySQL;
+ public bool ItIsElasticSearch;
+ public bool ESUseSynonymsForFieldsNames;
+ public DateTime LoadEventsStartingAt;
+ public ElasticSearchFieldSynonymsClass ESFieldSynonyms = new ElasticSearchFieldSynonymsClass();
+ public int SleepTime = 60 * 1000;// '1 минута
+
+ public NLog.Logger Log;
+
+ public string Catalog;
+ long CurrentPosition;
+ string CurrentFilename;
+ long LastEventNumber83;
+ public DateTime LastReferenceUpdate;
+
+
+ public void AddUser(long code, string guid, string name)
+ {
+ this.UsersDictionary.Add(new User(code, name, guid));
+ }
+
+
+ public void AddComputer(long code, string name)
+ {
+ this.ComputersDictionary.Add(new Computer(code, name));
+ }
+
+
+ public void AddApplication(long code, string name)
+ {
+ this.ApplicationsDictionary.Add(new Application(code, name));
+ }
+
+
+ public void AddEvent(long code, string name)
+ {
+ this.EventsDictionary.Add(new EventType(code, name));
+ }
+
+
+ public void AddMetadata(long code, string guid, string name)
+ {
+ this.MetadataDictionary.Add(new Metadata(code, name, guid));
+ }
+
+
+ public void AddServer(long code, string name)
+ {
+ this.ServersDictionary.Add(new Server(code, name));
+ }
+
+
+ public void AddMainPort(long code, string name)
+ {
+ this.MainPortsDictionary.Add(new MainPort(code, name));
+ }
+
+
+ public void AddSecondPort(long code, string name)
+ {
+ this.SecondPortsDictionary.Add(new SecondPort(code, name));
+ }
+
+
+ public void SaveReferenceValuesToDatabase()
+ {
+ if (ItIsMSSQL)
+ {
+ SqlConnection objConn = new SqlConnection(ConnectionString);
+ objConn.Open();
+
+ SqlCommand command = new SqlCommand("IF NOT EXISTS (select * from [dbo].[Applications] where [Code] = @v1 AND [InfobaseCode] = @v3) " +
+ "INSERT INTO [dbo].[Applications] ([InfobaseCode],[Code],[Name]) VALUES(@v3, @v1, @v2)", objConn);
+
+ foreach (var item in ApplicationsDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new SqlParameter("@v1", SqlDbType.Int)).Value = item.Value.Code;
+ command.Parameters.Add(new SqlParameter("@v2", SqlDbType.Char)).Value = item.Value.Name;
+ command.Parameters.Add(new SqlParameter("@v3", SqlDbType.Int)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = "IF NOT EXISTS (select * from [dbo].[Computers] where [Code] = @v1 AND [InfobaseCode] = @v3) " +
+ "INSERT INTO [dbo].[Computers] ([InfobaseCode],[Code],[Name]) VALUES(@v3, @v1,@v2)";
+
+ foreach (var item in ComputersDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new SqlParameter("@v1", SqlDbType.Int)).Value = item.Value.Code;
+ command.Parameters.Add(new SqlParameter("@v2", SqlDbType.Char)).Value = item.Value.Name;
+ command.Parameters.Add(new SqlParameter("@v3", SqlDbType.Int)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = "IF NOT EXISTS (select * from [dbo].[EventsType] where [Code] = @v1 AND [InfobaseCode] = @v3) " +
+ "INSERT INTO [dbo].[EventsType] ([InfobaseCode],[Code],[Name]) VALUES(@v3, @v1,@v2)";
+
+ foreach (var item in EventsDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new SqlParameter("@v1", SqlDbType.Int)).Value = item.Value.Code;
+ command.Parameters.Add(new SqlParameter("@v2", SqlDbType.Char)).Value = item.Value.Name;
+ command.Parameters.Add(new SqlParameter("@v3", SqlDbType.Int)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = "IF NOT EXISTS (select * from [dbo].[MainPorts] where [Code] = @v1 AND [InfobaseCode] = @v3) " +
+ "INSERT INTO [dbo].[MainPorts] ([InfobaseCode],[Code],[Name]) VALUES(@v3, @v1,@v2)";
+
+ foreach (var item in MainPortsDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new SqlParameter("@v1", SqlDbType.Int)).Value = item.Value.Code;
+ command.Parameters.Add(new SqlParameter("@v2", SqlDbType.Char)).Value = item.Value.Name;
+ command.Parameters.Add(new SqlParameter("@v3", SqlDbType.Int)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = @"MERGE INTO [dbo].[Metadata] AS Target
+ USING(SELECT @v1 AS[Code],
+ @v4 AS[InfobaseCode],
+ @v3 AS[Guid]) AS Source
+ ON(Target.[Code] = Source.[Code]
+
+ AND Target.[InfobaseCode] = Source.[InfobaseCode]
+
+ AND Target.[Guid] = Source.[Guid])
+ WHEN MATCHED AND NOT([Name] = @v2) THEN UPDATE
+ SET[Name] = @v2
+ WHEN NOT MATCHED THEN INSERT([InfobaseCode], [Code], [Name], [Guid]) VALUES(@v4, @v1, @v2, @v3);";
+
+ foreach (var item in MetadataDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new SqlParameter("@v1", SqlDbType.Int)).Value = item.Value.Code;
+ command.Parameters.Add(new SqlParameter("@v2", SqlDbType.Char)).Value = item.Value.Name;
+ command.Parameters.Add(new SqlParameter("@v3", SqlDbType.Char)).Value = item.Value.Guid;
+ command.Parameters.Add(new SqlParameter("@v4", SqlDbType.Int)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = @"MERGE INTO [dbo].[Users] AS Target
+ USING(SELECT @v1 AS[Code],
+ @v4 AS[InfobaseCode],
+ @v3 AS[Guid]) AS Source
+ ON(Target.[Code] = Source.[Code]
+
+ AND Target.[InfobaseCode] = Source.[InfobaseCode]
+
+ AND Target.[Guid] = Source.[Guid])
+ WHEN MATCHED AND NOT([Name] = @v2) THEN UPDATE
+ SET[Name] = @v2
+ WHEN NOT MATCHED THEN INSERT([InfobaseCode], [Code], [Name], [Guid]) VALUES(@v4, @v1, @v2, @v3);";
+
+ foreach (var item in UsersDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new SqlParameter("@v1", SqlDbType.Int)).Value = item.Value.Code;
+ command.Parameters.Add(new SqlParameter("@v2", SqlDbType.Char)).Value = item.Value.Name;
+ command.Parameters.Add(new SqlParameter("@v3", SqlDbType.Char)).Value = item.Value.Guid;
+ command.Parameters.Add(new SqlParameter("@v4", SqlDbType.Int)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = "IF NOT EXISTS (select * from [dbo].[SecondPorts] where [Code] = @v1 AND [InfobaseCode] = @v3) " +
+ "INSERT INTO [dbo].[SecondPorts] ([InfobaseCode],[Code],[Name]) VALUES(@v3, @v1,@v2)";
+
+ foreach (var item in SecondPortsDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new SqlParameter("@v1", SqlDbType.Int)).Value = item.Value.Code;
+ command.Parameters.Add(new SqlParameter("@v2", SqlDbType.Char)).Value = item.Value.Name;
+ command.Parameters.Add(new SqlParameter("@v3", SqlDbType.Int)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = "IF NOT EXISTS (select * from [dbo].[Servers] where [Code] = @v1 AND [InfobaseCode] = @v3) " +
+ "INSERT INTO [dbo].[Servers] ([InfobaseCode],[Code],[Name]) VALUES(@v3, @v1,@v2)";
+
+ foreach (var item in ServersDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new SqlParameter("@v1", SqlDbType.Int)).Value = item.Value.Code;
+ command.Parameters.Add(new SqlParameter("@v2", SqlDbType.Char)).Value = item.Value.Name;
+ command.Parameters.Add(new SqlParameter("@v3", SqlDbType.Int)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = "IF NOT EXISTS (select * from [dbo].[Infobases] where [Guid] = @v0) " +
+ "INSERT INTO [dbo].[Infobases] ([Guid],[Code],[Name]) VALUES(@v0,@v1,@v2)";
+
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new SqlParameter("@v0", SqlDbType.Char)).Value = InfobaseGuid;
+ command.Parameters.Add(new SqlParameter("@v1", SqlDbType.Int)).Value = InfobaseID;
+ command.Parameters.Add(new SqlParameter("@v2", SqlDbType.Char)).Value = InfobaseName;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+
+ command.Dispose();
+ objConn.Close();
+ objConn.Dispose();
+ }
+ else if (ItIsMySQL)
+ {
+ MySqlConnection objConn = new MySqlConnection(ConnectionString);
+ objConn.Open();
+
+ MySqlCommand command = new MySqlCommand("REPLACE INTO `Applications`(`InfobaseCode`, `Code`, `Name`) VALUES(@v3, @v1, @v2)", objConn);
+
+ foreach (var item in ApplicationsDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new MySqlParameter("@v1", MySqlDbType.Int32)).Value = item.Value.Code;
+ command.Parameters.Add(new MySqlParameter("@v2", MySqlDbType.VarChar)).Value = item.Value.Name;
+ command.Parameters.Add(new MySqlParameter("@v3", MySqlDbType.Int32)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = "REPLACE INTO `Computers` (`InfobaseCode`,`Code`,`Name`) VALUES(@v3, @v1, @v2)";
+
+ foreach (var item in ComputersDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new MySqlParameter("@v1", MySqlDbType.Int32)).Value = item.Value.Code;
+ command.Parameters.Add(new MySqlParameter("@v2", MySqlDbType.VarChar)).Value = item.Value.Name;
+ command.Parameters.Add(new MySqlParameter("@v3", MySqlDbType.Int32)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = "REPLACE INTO `EventsType` (`InfobaseCode`,`Code`,`Name`) VALUES(@v3, @v1,@v2)";
+
+ foreach (var item in EventsDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new MySqlParameter("@v1", MySqlDbType.Int32)).Value = item.Value.Code;
+ command.Parameters.Add(new MySqlParameter("@v2", MySqlDbType.VarChar)).Value = item.Value.Name;
+ command.Parameters.Add(new MySqlParameter("@v3", MySqlDbType.Int32)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = "REPLACE INTO `MainPorts` (`InfobaseCode`,`Code`,`Name`) VALUES(@v3, @v1,@v2)";
+
+ foreach (var item in MainPortsDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new MySqlParameter("@v1", MySqlDbType.Int32)).Value = item.Value.Code;
+ command.Parameters.Add(new MySqlParameter("@v2", MySqlDbType.VarChar)).Value = item.Value.Name;
+ command.Parameters.Add(new MySqlParameter("@v3", MySqlDbType.Int32)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = @"REPLACE INTO `Metadata` (`InfobaseCode`,`Code`,`Name`,`Guid`) VALUES(@v4, @v1,@v2,@v3)";
+
+ foreach (var item in MetadataDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new MySqlParameter("@v1", MySqlDbType.Int32)).Value = item.Value.Code;
+ command.Parameters.Add(new MySqlParameter("@v2", MySqlDbType.VarChar)).Value = item.Value.Name;
+ command.Parameters.Add(new MySqlParameter("@v3", MySqlDbType.VarChar)).Value = item.Value.Guid;
+ command.Parameters.Add(new MySqlParameter("@v4", MySqlDbType.Int32)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = @"REPLACE INTO `Users` (`InfobaseCode`,`Code`,`Name`,`Guid`) VALUES(@v4, @v1,@v2,@v3)";
+
+ foreach (var item in UsersDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new MySqlParameter("@v1", MySqlDbType.Int32)).Value = item.Value.Code;
+ command.Parameters.Add(new MySqlParameter("@v2", MySqlDbType.VarChar)).Value = item.Value.Name;
+ command.Parameters.Add(new MySqlParameter("@v3", MySqlDbType.VarChar)).Value = item.Value.Guid;
+ command.Parameters.Add(new MySqlParameter("@v4", MySqlDbType.Int32)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = "REPLACE INTO `SecondPorts` (`InfobaseCode`,`Code`,`Name`) VALUES(@v3, @v1,@v2)";
+
+ foreach (var item in SecondPortsDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new MySqlParameter("@v1", MySqlDbType.Int32)).Value = item.Value.Code;
+ command.Parameters.Add(new MySqlParameter("@v2", MySqlDbType.VarChar)).Value = item.Value.Name;
+ command.Parameters.Add(new MySqlParameter("@v3", MySqlDbType.Int32)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = "REPLACE INTO `Servers` (`InfobaseCode`,`Code`,`Name`) VALUES(@v3, @v1,@v2)";
+
+ foreach (var item in ServersDictionary)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new MySqlParameter("@v1", MySqlDbType.Int32)).Value = item.Value.Code;
+ command.Parameters.Add(new MySqlParameter("@v2", MySqlDbType.VarChar)).Value = item.Value.Name;
+ command.Parameters.Add(new MySqlParameter("@v3", MySqlDbType.Int32)).Value = InfobaseID;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ command.CommandText = "REPLACE INTO `Infobases` (`Guid`,`Code`,`Name`) VALUES(@v0,@v1,@v2)";
+
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new MySqlParameter("@v0", MySqlDbType.VarChar)).Value = InfobaseGuid;
+ command.Parameters.Add(new MySqlParameter("@v1", MySqlDbType.Int32)).Value = InfobaseID;
+ command.Parameters.Add(new MySqlParameter("@v2", MySqlDbType.VarChar)).Value = InfobaseName;
+ command.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+
+ command.Dispose();
+ objConn.Close();
+ objConn.Dispose();
+ }
+
+ LastReferenceUpdate = DateTime.Now;
+ }
+
+
+ public void GetInfobaseIDFromDatabase()
+ {
+ if (ItIsMSSQL)
+ {
+ SqlConnection objConn = new SqlConnection(ConnectionString);
+ objConn.Open();
+
+ SqlCommand command = new SqlCommand("SELECT [Code] FROM [dbo].[Infobases] WHERE [Guid] = @v1", objConn);
+ command.Parameters.Add(new SqlParameter("@v1", SqlDbType.Char)).Value = InfobaseGuid;
+
+ SqlDataReader rs = command.ExecuteReader();
+
+ if (rs.Read())
+ {
+ InfobaseID = Convert.ToInt32(rs[0]);
+ }
+
+ rs.Close();
+
+ if (InfobaseID == 0)
+ {
+ command.CommandText = @"INSERT INTO Infobases ([Code], [Name], [guid])
+ SELECT MAX(f) AS[Code],
+ @v0 AS[Name],
+ @v1 AS[guid]
+ FROM(SELECT MAX(Code) + 1 AS f
+ FROM Infobases
+ UNION ALL
+ SELECT 1 AS Expr1) AS T; ";
+
+ command.Parameters.Clear();
+ command.Parameters.Add(new SqlParameter("@v0", SqlDbType.Char)).Value = InfobaseName;
+ command.Parameters.Add(new SqlParameter("@v1", SqlDbType.Char)).Value = InfobaseGuid;
+ command.ExecuteNonQuery();
+
+ command.CommandText = "SELECT [Code] FROM [dbo].[Infobases] WHERE [Guid] = @v1";
+ rs = command.ExecuteReader();
+
+ if (rs.Read())
+ {
+ InfobaseID = Convert.ToInt32(rs[0]);
+ }
+
+ rs.Close();
+ }
+
+ command.Dispose();
+ objConn.Close();
+ objConn.Dispose();
+ }
+ else if (ItIsMySQL)
+ {
+ MySqlConnection objConn = new MySqlConnection(ConnectionString);
+ objConn.Open();
+
+ MySqlCommand command = new MySqlCommand("SELECT `Code` FROM `Infobases` WHERE `Guid` = @v1", objConn);
+ command.Parameters.Add(new MySqlParameter("@v1", MySqlDbType.VarChar)).Value = InfobaseGuid;
+
+ MySqlDataReader rs = command.ExecuteReader();
+
+ if (rs.Read())
+ {
+ InfobaseID = Convert.ToInt32(rs[0]);
+ }
+
+ rs.Close();
+
+ if (InfobaseID == 0)
+ {
+ command.CommandText = "INSERT INTO Infobases (`Code`,`Name`,`guid`)" +
+ " SELECT MAX(f) AS `Code`, @v0 as `Name`, @v1 as `guid` FROM " +
+ " (SELECT MAX(Code) + 1 AS f FROM `Infobases` UNION ALL" +
+ " SELECT 1 AS `Expr1`) AS T";
+
+ command.Parameters.Clear();
+ command.Parameters.Add(new MySqlParameter("@v0", MySqlDbType.VarChar)).Value = InfobaseName;
+ command.Parameters.Add(new MySqlParameter("@v1", MySqlDbType.VarChar)).Value = InfobaseGuid;
+ command.ExecuteNonQuery();
+
+ command.CommandText = "SELECT `Code` FROM `Infobases` WHERE `Guid` = @v1";
+
+ rs = command.ExecuteReader();
+
+ if (rs.Read())
+ {
+ InfobaseID = Convert.ToInt32(rs[0]);
+ }
+
+ rs.Close();
+ }
+
+ command.Dispose();
+ objConn.Close();
+ objConn.Dispose();
+ }
+ }
+
+
+ public void SaveReadParametersToFile()
+ {
+ string readParametersFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"read-setting-{InfobaseGuid}.json");
+
+ ReadParameters ConfigSettingObj = new ReadParameters
+ {
+ CurrentPosition = this.CurrentPosition,
+ CurrentFilename = this.CurrentFilename,
+ LastEventNumber83 = this.LastEventNumber83
+ };
+
+ string JsonText = JsonConvert.SerializeObject(ConfigSettingObj, Formatting.Indented);
+
+ //Console.WriteLine(readParametersFile);
+ //Console.WriteLine(JsonText);
+
+ File.WriteAllText(readParametersFile, JsonText);
+ }
+
+
+ public void GetReadParametersFromFile()
+ {
+ string ReadParametersFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"read-setting-{InfobaseGuid}.json");
+
+ if (File.Exists(ReadParametersFile))
+ {
+ string JsonText = File.ReadAllText(ReadParametersFile);
+
+ ReadParameters ConfigSettingObj = JsonConvert.DeserializeObject(JsonText);
+
+ this.CurrentPosition = Convert.ToInt64(ConfigSettingObj.CurrentPosition);
+ this.CurrentFilename = ConfigSettingObj.CurrentFilename;
+ this.LastEventNumber83 = ConfigSettingObj.LastEventNumber83;
+ }
+ }
+
+
+ public void SaveEventsToSQL()
+ {
+ if (EventsList.Count == 0)
+ return;
+
+ if (ItIsMSSQL)
+ {
+ SqlConnection objConn = new SqlConnection(ConnectionString);
+ objConn.Open();
+
+ DataTable dt = new DataTable();
+
+ /*
+ [InfobaseCode] [int] NOT NULL,
+ [DateTime] [datetime] NOT NULL,
+ [TransactionStatus] [varchar](1) NULL,
+ [TransactionStartTime] [datetime] NULL,
+ [TransactionMark] [bigint] NULL,
+ [Transaction] [varchar](100) NULL,
+ [UserName] [int] NULL,
+ [ComputerName] [int] NULL,
+ [AppName] [int] NULL,
+ [EventID] [int] NULL,
+ [EventType] [varchar](1) NULL,
+ [Comment] [nvarchar](max) NULL,
+ [MetadataID] [int] NULL,
+ [DataStructure] [nvarchar](max) NULL,
+ [DataString] [nvarchar](max) NULL,
+ [ServerID] [int] NULL,
+ [MainPortID] [int] NULL,
+ [SecondPortID] [int] NULL,
+ [Seance] [int] NULL
+ */
+
+ dt.Columns.Add(new DataColumn("InfobaseCode", typeof(int)));
+ dt.Columns.Add(new DataColumn("DateTime", typeof(DateTime)));
+ dt.Columns.Add(new DataColumn("TransactionStatus", typeof(string)));
+ dt.Columns.Add(new DataColumn("TransactionStartTime", typeof(DateTime)));
+ dt.Columns.Add(new DataColumn("TransactionMark", typeof(long)));
+ dt.Columns.Add(new DataColumn("Transaction", typeof(string)));
+ dt.Columns.Add(new DataColumn("UserName", typeof(int)));
+ dt.Columns.Add(new DataColumn("ComputerName", typeof(int)));
+ dt.Columns.Add(new DataColumn("AppName", typeof(int)));
+ dt.Columns.Add(new DataColumn("EventID", typeof(int)));
+ dt.Columns.Add(new DataColumn("EventType", typeof(string)));
+ dt.Columns.Add(new DataColumn("Comment", typeof(string)));
+ dt.Columns.Add(new DataColumn("MetadataID", typeof(int)));
+ dt.Columns.Add(new DataColumn("DataStructure", typeof(string)));
+ dt.Columns.Add(new DataColumn("DataString", typeof(string)));
+ dt.Columns.Add(new DataColumn("ServerID", typeof(int)));
+ dt.Columns.Add(new DataColumn("MainPortID", typeof(int)));
+ dt.Columns.Add(new DataColumn("SecondPortID", typeof(int)));
+ dt.Columns.Add(new DataColumn("Seance", typeof(int)));
+
+ foreach (OneEventRecord eventRecord in EventsList)
+ {
+ if (eventRecord.AppName == 0)
+ continue;
+
+ DataRow row = dt.NewRow();
+
+ try
+ {
+ row[0] = InfobaseID;
+ row[1] = eventRecord.DateTime;
+ row[2] = eventRecord.TransactionStatus;
+ row[3] = eventRecord.TransactionStartTime;
+ row[4] = eventRecord.TransactionMark;
+ row[5] = eventRecord.Transaction;
+ row[6] = eventRecord.UserName;
+ row[7] = eventRecord.ComputerName;
+ row[8] = eventRecord.AppName;
+ row[9] = eventRecord.EventID;
+ row[10] = eventRecord.EventType;
+ row[11] = eventRecord.Comment;
+ row[12] = eventRecord.MetadataID;
+ row[13] = eventRecord.DataStructure;
+ row[14] = eventRecord.DataString;
+ row[15] = eventRecord.ServerID;
+ row[16] = eventRecord.MainPortID;
+ row[17] = eventRecord.SecondPortID;
+ row[18] = eventRecord.SessionNumber;
+
+ dt.Rows.Add(row);
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex, this.GetType().ToString());
+ }
+ }
+
+
+
+ using (SqlBulkCopy copy = new SqlBulkCopy(objConn))
+ {
+ for (int jj = 0; jj <= 18; jj++)
+ {
+ copy.ColumnMappings.Add(jj, jj);
+ }
+
+ copy.DestinationTableName = "Events";
+ copy.WriteToServer(dt);
+ }
+
+ SaveReadParametersToFile();
+
+ Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff",
+ CultureInfo.InvariantCulture) + $" New records have been processed: {EventsList.Count.ToString()} ({InfobaseName})");
+
+ objConn.Close();
+ objConn.Dispose();
+ }
+ else if (ItIsMySQL)
+ {
+ MySqlConnection objConn = new MySqlConnection(ConnectionString);
+ objConn.Open();
+
+ MySqlCommand command = new MySqlCommand("START TRANSACTION", objConn);
+ command.ExecuteNonQuery();
+
+ command.CommandText = "INSERT INTO `Events` (`InfobaseCode`,`DateTime`,`TransactionStatus`,`Transaction`,`UserName`,`ComputerName`" +
+ ",`AppName`,`EventID`,`EventType`,`Comment`,`MetadataID`,`DataStructure`,`DataString`" +
+ ",`ServerID`,`MainPortID`,`SecondPortID`,`Seance`,`TransactionStartTime`,`TransactionMark`)" +
+ " VALUES(@v0,@v1,@v2,@v3,@v4,@v5,@v6,@v7,@v8,@v9,@v10,@v11,@v12,@v13,@v14,@v15,@v16,@v17,@v18)";
+
+ int i = 0;
+
+ foreach (OneEventRecord eventRecord in EventsList)
+ {
+ try
+ {
+ command.Parameters.Clear();
+ command.Parameters.Add(new MySqlParameter("@v0", MySqlDbType.Int32)).Value = InfobaseID;
+ command.Parameters.Add(new MySqlParameter("@v1", MySqlDbType.DateTime)).Value = eventRecord.DateTime;
+ command.Parameters.Add(new MySqlParameter("@v2", MySqlDbType.VarChar)).Value = eventRecord.TransactionStatus;
+ command.Parameters.Add(new MySqlParameter("@v3", MySqlDbType.VarChar)).Value = eventRecord.Transaction;
+ command.Parameters.Add(new MySqlParameter("@v4", MySqlDbType.Int32)).Value = eventRecord.UserName;
+ command.Parameters.Add(new MySqlParameter("@v5", MySqlDbType.Int32)).Value = eventRecord.ComputerName;
+ command.Parameters.Add(new MySqlParameter("@v6", MySqlDbType.Int32)).Value = eventRecord.AppName;
+ command.Parameters.Add(new MySqlParameter("@v7", MySqlDbType.Int32)).Value = eventRecord.EventID;
+ command.Parameters.Add(new MySqlParameter("@v8", MySqlDbType.VarChar)).Value = eventRecord.EventType;
+ command.Parameters.Add(new MySqlParameter("@v9", MySqlDbType.VarChar)).Value = eventRecord.Comment;
+ command.Parameters.Add(new MySqlParameter("@v10", MySqlDbType.Int32)).Value = eventRecord.MetadataID;
+ command.Parameters.Add(new MySqlParameter("@v11", MySqlDbType.VarChar)).Value = eventRecord.DataStructure;
+ command.Parameters.Add(new MySqlParameter("@v12", MySqlDbType.VarChar)).Value = eventRecord.DataString;
+ command.Parameters.Add(new MySqlParameter("@v13", MySqlDbType.Int32)).Value = eventRecord.ServerID;
+ command.Parameters.Add(new MySqlParameter("@v14", MySqlDbType.Int32)).Value = eventRecord.MainPortID;
+ command.Parameters.Add(new MySqlParameter("@v15", MySqlDbType.Int32)).Value = eventRecord.SecondPortID;
+ command.Parameters.Add(new MySqlParameter("@v16", MySqlDbType.Int32)).Value = eventRecord.SessionNumber;
+ command.Parameters.Add(new MySqlParameter("@v17", MySqlDbType.DateTime)).Value = eventRecord.TransactionStartTime;
+ command.Parameters.Add(new MySqlParameter("@v18", MySqlDbType.Int64)).Value = eventRecord.TransactionMark;
+
+ command.ExecuteNonQuery();
+
+ i += 1;
+ }
+ catch (Exception ex)
+ {
+ Log.Error($"Ошибка сохранения в БД записи от {eventRecord.DateTime.ToString()} по ИБ {InfobaseName} : {ex.Message}");
+ }
+ }
+
+ Console.WriteLine($"{DateTime.Now.ToShortTimeString()} New records have been processed: {i.ToString()}");
+
+ SaveReadParametersToFile();
+
+ command.CommandText = "COMMIT";
+ command.Parameters.Clear();
+ command.ExecuteNonQuery();
+
+ command.Dispose();
+ objConn.Close();
+ objConn.Dispose();
+ }
+ //else if (ItIsES)
+ //{
+ // var node = new Uri(ConnectionString);
+
+ // var _settings = new ConnectionSettings(node).DefaultIndex(ESIndexName).MaximumRetries(2).MaxRetryTimeout(TimeSpan.FromSeconds(150));
+ // var _current = new ElasticClient(_settings);
+
+ // //'Let's create proper array for ES
+ // List