--- dao/DaoMqPump2/DaoMqPump2/Transport.cs 2013/11/27 09:46:11 2086 +++ dao/DaoMqPump2/DaoMqPump2/Transport.cs 2014/05/16 20:56:22 2168 @@ -9,17 +9,13 @@ using MySql.Data.MySqlClient; using System.Globalization; +using DaoCommon; + namespace DaoMqPump2 { public class Transport { - enum LogfileType { - LogTransactions, - LogEvents, - LogDiscarded - } - public static string SQL2MQ = "sql2mq"; public static string MQ2SQL = "mq2sql"; @@ -29,6 +25,8 @@ StatusData statusData = new StatusData(); + public Logfile logfile { get; private set; } + public string name { get; private set; } public string direction { get; private set; } public string queueName { get; private set; } @@ -64,17 +62,17 @@ statusData.transportEnabled = value; if (value == true) { - this.addLogEntry("Transport enabled"); + logfile.addSingleLogEntry("Transport enabled"); } else { - this.addLogEntry("Transport disabled"); + logfile.addSingleLogEntry("Transport disabled"); } } } - private LinkedList logEntries = new LinkedList(); + public Transport(TransportController controller, string name, string direction, string queueName, string mq2sqlInsertQuery, string sql2mqReadQuery, string sql2mqUpdateQuery, bool enabled) @@ -94,12 +92,13 @@ statusData.counter = 0; statusData.lastErrorMessage = statusData.lastOkTime = statusData.lastErrorTime = ""; - addLogEntry( "Starting ... " ); + logfile = new Logfile(name, controller.logDirectory); + logfile.addSingleLogEntry("Starting ... "); } ~Transport() { - addLogEntry("Stopping ... "); + logfile.addSingleLogEntry("Stopping ... "); } @@ -124,18 +123,18 @@ if (statusData.lastrunOk == true) { - statusData.lastOkTime = getNowString(); + statusData.lastOkTime = Logfile.getNowString(); if (statusData.counter != startCounter) { //Vi har transporteret beskeder - så gemmer vi lige transfer tidspunktet - statusData.lastTransferTime = getNowString(); + statusData.lastTransferTime = Logfile.getNowString(); } } else { - addLogEntry(statusData.lastErrorMessage); - statusData.lastErrorTime = getNowString(); + logfile.addSingleLogEntry(statusData.lastErrorMessage); + statusData.lastErrorTime = Logfile.getNowString(); } } @@ -144,7 +143,7 @@ MQQueueManager mqMgr = null; MQQueue out_queue = null; - string filename = getLogFilename(LogfileType.LogTransactions); + string filename = Logfile.getLogFilename(LogfileType.LogTransactions, controller.logDirectory, name); using (StreamWriter translog = new StreamWriter(filename, true) ) try { @@ -189,7 +188,7 @@ MySqlCommand updateCmd = new MySqlCommand(updateSql, sqlWriteConnection); int numrows = updateCmd.ExecuteNonQuery(); - translog.WriteLine(getNowString() + " " + msgString); + translog.WriteLine(Logfile.getNowString() + " " + msgString); if (numrows != 1) { @@ -240,9 +239,11 @@ private void transportMq2Sql() { + int messageCount = 0; + MQQueueManager mqMgr = null; - MQQueue in_queue = null; - string filename = getLogFilename(LogfileType.LogTransactions); + MQQueue in_queue = null; + string filename = Logfile.getLogFilename(LogfileType.LogTransactions, controller.logDirectory, name); using (StreamWriter translog = new StreamWriter(filename, true)) try { @@ -283,12 +284,12 @@ // Hvis transaktionen starter med et ? er det ikke en gyldig transaktion // validér ligeledes at headeren er gyldig - if ( msgString.StartsWith("?") || validateSalt2Header(msgString) == false ) + if ( msgString.StartsWith("?") || DaoUtil.validateSalt2Header(msgString) == false ) { - string discarded_filename = getLogFilename(LogfileType.LogDiscarded); + string discarded_filename = Logfile.getLogFilename(LogfileType.LogTransactions, controller.logDirectory, name); using (StreamWriter discardedlog = new StreamWriter(discarded_filename, true)) { - discardedlog.WriteLine(getNowString() + " " + msgString); + discardedlog.WriteLine(Logfile.getNowString() + " " + msgString); } mqMgr.Commit();//fjern den afviste transaktion fra køen statusData.discardedCounter++; @@ -303,9 +304,19 @@ if (numrows == 1) { - translog.WriteLine(getNowString() + " " + msgString); + translog.WriteLine(Logfile.getNowString() + " " + msgString); mqMgr.Commit(); statusData.counter++; + + + messageCount++;// increment per run message counter + if (messageCount >= 10000) // if we have moved 10000 messages in this run - let it go and give the other transports a change + { + isContinue = false; + } + + + } else { @@ -356,7 +367,7 @@ } catch (Exception e2) { - this.addLogEntry("Error backing out from MQ Transaction: " + e2.Message); + logfile.addSingleLogEntry("Error backing out from MQ Transaction: " + e2.Message); } statusData.lastrunOk = false; @@ -418,137 +429,5 @@ } - - private string getLogFilename(LogfileType type) - { - - DateTime now = DateTime.Now; - string filename = controller.logDirectory + "\\"; - - //Find uge nr - DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo; - Calendar myCal = CultureInfo.InvariantCulture.Calendar;//System.Globalization - int week = myCal.GetWeekOfYear(now, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); - - switch (type) - { - case LogfileType.LogEvents: - filename += "eventlog_"; - break; - - case LogfileType.LogTransactions: - filename += "transactionlog_"; - break; - case LogfileType.LogDiscarded: - filename += "discardedlog_"; - break; - } - - - filename += name + "_" + now.Year.ToString("D4") + "_W" + week.ToString("D2") + ".log"; - - return filename; - } - - public string getNowString() - { - DateTime now = DateTime.Now; - - return now.ToString("s"); - } - - private bool validateSalt2Header(string salt2String) - { - if (salt2String.Length < 66) - { - addLogEntry("Transaction too short - discarding"); - return false; - } - - - int result; - long result_long; - - string afsender = salt2String.Substring(0, 5); - string modtager = salt2String.Substring(5, 5); - string afsenderTegnSaet = salt2String.Substring(10, 6); - string standardNavn = salt2String.Substring(16, 6); - string standardVersion = salt2String.Substring(22, 3); - string afsenderSekvensnr = salt2String.Substring(25, 6); - string afsenderTidsstempel = salt2String.Substring(31, 14); - string afsenderBakkeIdent = salt2String.Substring(45, 5); - string modtagerBakkeIdent = salt2String.Substring(50, 5); - string transaktionForkortelse = salt2String.Substring(55, 4); - string transaktionsLaengde = salt2String.Substring(59, 5); - string prioritet = salt2String.Substring(64, 1); - - - - if (int.TryParse(standardVersion.Trim(), out result) == false) // standardVersion _skal_ være en int - { - addLogEntry("standardVersion not an integer, discarding"); - return false; - } - - if (int.TryParse(afsenderSekvensnr.Trim(), out result) == false) // afsenderSekvensnr _skal_ være en int - { - addLogEntry("afsenderSekvensnr not an integer, discarding"); - return false; - } - - if (long.TryParse(afsenderTidsstempel.Trim(), out result_long) == false) // afsenderTidsstempel _skal_ være en long - { - addLogEntry("afsenderSekvensnr not a long integer, discarding"); - return false; - } - - if (int.TryParse(transaktionsLaengde.Trim(), out result) == false) // transaktionsLaengde _skal_ være en int - { - addLogEntry("transaktionsLaengde not an integer, discarding"); - return false; - } - - if ( int.TryParse(prioritet.Trim(), out result) == false ) // prioritet _skal_ være en int - { - addLogEntry("prioritet not an integer, discarding"); - return false; - } - - return true; - } - - private void addLogEntry(string msg) - { - msg = getNowString() + " " + msg; - lock (logEntries) - { - logEntries.AddFirst(msg); - - if (logEntries.Count > 20) - { - logEntries.RemoveLast(); - } - } - - string filename = getLogFilename(LogfileType.LogEvents); - using (StreamWriter eventlog = new StreamWriter(filename, true)) - { - eventlog.WriteLine(msg); - } - } - - public string[] getLog() - { - lock(logEntries) - { - List tmpEntries = new List(); - foreach (string s in logEntries) - { - tmpEntries.Add(s); - } - return tmpEntries.ToArray(); - } - } - } }