diff --git a/TimberWinR.ServiceHost/Properties/AssemblyInfo.cs b/TimberWinR.ServiceHost/Properties/AssemblyInfo.cs index e04da47..1df06ee 100644 --- a/TimberWinR.ServiceHost/Properties/AssemblyInfo.cs +++ b/TimberWinR.ServiceHost/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.3.6.0")] -[assembly: AssemblyFileVersion("1.3.6.0")] +[assembly: AssemblyVersion("1.3.7.0")] +[assembly: AssemblyFileVersion("1.3.7.0")] diff --git a/TimberWinR/Inputs/LogsListener.cs b/TimberWinR/Inputs/LogsListener.cs index 439f8cc..5b8257e 100644 --- a/TimberWinR/Inputs/LogsListener.cs +++ b/TimberWinR/Inputs/LogsListener.cs @@ -28,13 +28,16 @@ namespace TimberWinR.Inputs private long _receivedMessages; private Dictionary _logFileMaxRecords; private Dictionary _logFileCreationTimes; + private Dictionary _logFileSampleTimes; private Dictionary _logFileSizes; + public LogsListener(TimberWinR.Parser.Log arguments, CancellationToken cancelToken, int pollingIntervalInSeconds = 3) : base(cancelToken, "Win32-FileLog") { _logFileMaxRecords = new Dictionary(); _logFileCreationTimes = new Dictionary(); + _logFileSampleTimes = new Dictionary(); _logFileSizes = new Dictionary(); _receivedMessages = 0; @@ -59,12 +62,19 @@ namespace TimberWinR.Inputs new JProperty("log", new JObject( new JProperty("messages", _receivedMessages), + new JProperty("type", InputType), new JProperty("location", _arguments.Location), new JProperty("codepage", _arguments.CodePage), new JProperty("splitLongLines", _arguments.SplitLongLines), new JProperty("recurse", _arguments.Recurse), new JProperty("files", - new JArray(from f in _logFileMaxRecords.Keys + new JArray(from f in _logFileMaxRecords.Keys + select new JValue(f))), + new JProperty("fileSampleTimes", + new JArray(from f in _logFileSampleTimes.Values + select new JValue(f))), + new JProperty("fileSizes", + new JArray(from f in _logFileSizes.Values select new JValue(f))), new JProperty("fileIndices", new JArray(from f in _logFileMaxRecords.Values @@ -73,7 +83,7 @@ namespace TimberWinR.Inputs new JArray(from f in _logFileCreationTimes.Values select new JValue(f))) ))); - + return json; } @@ -103,13 +113,20 @@ namespace TimberWinR.Inputs string logName = record.getValue("LogFilename") as string; FileInfo fi = new FileInfo(logName); - fi.Refresh(); + if (!fi.Exists) + { + _logFileCreationTimes.Remove(logName); + _logFileMaxRecords.Remove(logName); + _logFileSizes.Remove(logName); + } + + _logFileSampleTimes[logName] = DateTime.UtcNow; + DateTime creationTime = fi.CreationTimeUtc; - bool logHasRolled = (_logFileCreationTimes.ContainsKey(logName) && - creationTime > _logFileCreationTimes[logName]) || + bool logHasRolled = (_logFileCreationTimes.ContainsKey(logName) && creationTime > _logFileCreationTimes[logName]) || (_logFileSizes.ContainsKey(logName) && fi.Length < _logFileSizes[logName]); - - + + if (!_logFileMaxRecords.ContainsKey(logName) || logHasRolled) { _logFileCreationTimes[logName] = creationTime;