Skip to content

Commit

Permalink
moved autocolumnizer into extra project #102
Browse files Browse the repository at this point in the history
removed Text from ILogLineColumnizer interface
moved GetPriority from ILogLineColumnizer  to IColumnizerPriority interface
  • Loading branch information
zarunbal committed Apr 13, 2019
1 parent 3d33f9f commit bbf3f00
Show file tree
Hide file tree
Showing 33 changed files with 662 additions and 327 deletions.
116 changes: 116 additions & 0 deletions src/AutoColumnizer.Tests/AutoColumnizer.Tests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\NUnit.3.11.0\build\NUnit.props" Condition="Exists('..\packages\NUnit.3.11.0\build\NUnit.props')" />
<Import Project="..\packages\MSTest.TestAdapter.1.3.2\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.3.2\build\net45\MSTest.TestAdapter.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{BCD44C89-636F-4BC9-9097-25FA56BFD6E3}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AutoColumnizer.Tests</RootNamespace>
<AssemblyName>AutoColumnizer.Tests</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
<IsCodedUITest>False</IsCodedUITest>
<TestProjectType>UnitTest</TestProjectType>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
<HintPath>..\packages\Castle.Core.4.3.1\lib\net45\Castle.Core.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.1.3.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.1.3.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
</Reference>
<Reference Include="Moq, Version=4.10.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.10.1\lib\net45\Moq.dll</HintPath>
</Reference>
<Reference Include="nunit.framework, Version=3.11.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.11.0\lib\net45\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AutoColumnizerTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Content Include="TestData\SquareBracketColumnizerTest_01.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="TestData\SquareBracketColumnizerTest_02.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="TestData\SquareBracketColumnizerTest_03.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="TestData\SquareBracketColumnizerTest_04.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AutoColumnizer\AutoColumnizer.csproj">
<Project>{b57259a3-4ed7-4f8b-a252-29e799a56b9e}</Project>
<Name>AutoColumnizer</Name>
</ProjectReference>
<ProjectReference Include="..\ColumnizerLib\ColumnizerLib.csproj">
<Project>{e72c2bb1-34de-4d66-a830-9647c3837833}</Project>
<Name>ColumnizerLib</Name>
</ProjectReference>
<ProjectReference Include="..\LogExpert\LogExpert.csproj">
<Project>{f0c0d370-f416-44ed-939a-b4827d15ac14}</Project>
<Name>LogExpert</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>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}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.3.2\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.3.2\build\net45\MSTest.TestAdapter.props'))" />
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.3.2\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.3.2\build\net45\MSTest.TestAdapter.targets'))" />
<Error Condition="!Exists('..\packages\NUnit.3.11.0\build\NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit.3.11.0\build\NUnit.props'))" />
</Target>
<Import Project="..\packages\MSTest.TestAdapter.1.3.2\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.1.3.2\build\net45\MSTest.TestAdapter.targets')" />
</Project>
74 changes: 74 additions & 0 deletions src/AutoColumnizer.Tests/AutoColumnizerTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
using System;
using System.Collections.Generic;
using System.IO;
using Moq;
using NUnit.Framework;

namespace LogExpert.Tests
{
/// <summary>
/// Summary description for AutoColumnizerTest
/// </summary>
[TestFixture]
public class AutoColumnizerTest
{
[TestCase("Square Bracket Columnizer", "30/08/2018 08:51:42.712 [TRACE] [a] hello", "30/08/2018 08:51:42.712 [DATAIO] [b] world", null, null, null)]
[TestCase("Square Bracket Columnizer", "30/08/2018 08:51:42.712 [TRACE] hello", "30/08/2018 08:51:42.712 [DATAIO][] world", null, null, null)]
[TestCase("Square Bracket Columnizer", "", "30/08/2018 08:51:42.712 [TRACE] hello", "30/08/2018 08:51:42.712 [TRACE] hello", "[DATAIO][b][c] world", null)]
[TestCase("Square Bracket Columnizer", "30/08/2018 08:51:42.712 no bracket 1", "30/08/2018 08:51:42.712 no bracket 2", "30/08/2018 08:51:42.712 [TRACE] with bracket 1", "30/08/2018 08:51:42.712 [TRACE] with bracket 2", "no bracket 3")]
public void FindColumnizer_ReturnCorrectColumnizer(string expectedColumnizerName, string line0, string line1, string line2, string line3, string line4)
{
AutoColumnizer autoColumnizer = new AutoColumnizer();
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test");

Mock<IAutoLogLineColumnizerCallback> autoLogLineColumnizerCallbackMock = new Mock<IAutoLogLineColumnizerCallback>();

autoLogLineColumnizerCallbackMock.Setup(a => a.GetLogLine(0)).Returns(new TestLogLine()
{
FullLine = line0,
LineNumber = 0
});

autoLogLineColumnizerCallbackMock.Setup(a => a.GetLogLine(1)).Returns(new TestLogLine()
{
FullLine = line1,
LineNumber = 1
});

autoLogLineColumnizerCallbackMock.Setup(a => a.GetLogLine(2)).Returns(new TestLogLine()
{
FullLine = line2,
LineNumber = 2
});

autoLogLineColumnizerCallbackMock.Setup(a => a.GetLogLine(3)).Returns(new TestLogLine()
{
FullLine = line3,
LineNumber = 3
});
autoLogLineColumnizerCallbackMock.Setup(a => a.GetLogLine(4)).Returns(new TestLogLine()
{
FullLine = line4,
LineNumber = 4
});

autoLogLineColumnizerCallbackMock.Setup(a => a.GetRegisteredColumnizers()).Returns(new List<ILogLineColumnizer>(new ILogLineColumnizer[]
{
new SquareBracketColumnizer(0, false),
new ClfColumnizer(),
new TimestampColumnizer(),
}));

var result = autoColumnizer.FindColumnizer(path, autoLogLineColumnizerCallbackMock.Object);

Assert.AreEqual(result.GetName(), expectedColumnizerName);
}

private class TestLogLine : ILogLine
{
public string Text => FullLine;
public string FullLine { get; set; }
public int LineNumber { get; set; }
}
}
}
20 changes: 20 additions & 0 deletions src/AutoColumnizer.Tests/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

[assembly: AssemblyTitle("AutoColumnizer.Tests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("AutoColumnizer.Tests")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

[assembly: ComVisible(false)]

[assembly: Guid("bcd44c89-636f-4bc9-9097-25fa56bfd6e3")]

// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
30/08/2018 08:51:42.712 [TRACE] [a] hello
30/08/2018 08:51:42.712 [DATAIO] [b] world
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

30/08/2018 08:51:42.712 [TRACE] hello
30/08/2018 08:51:42.712 [DATAIO][] world
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

30/08/2018 08:51:42.712 [TRACE] hello
30/08/2018 08:51:42.712 [TRACE] hello
[DATAIO][b][c] world
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
30/08/2018 08:51:42.712 no bracket 1
30/08/2018 08:51:42.712 no bracket 2
30/08/2018 08:51:42.712 [TRACE] with bracket 1
30/08/2018 08:51:42.712 [TRACE] with bracket 2
no bracket 3
10 changes: 10 additions & 0 deletions src/AutoColumnizer.Tests/packages.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Castle.Core" version="4.3.1" targetFramework="net472" requireReinstallation="true" />
<package id="Moq" version="4.10.1" targetFramework="net472" requireReinstallation="true" />
<package id="MSTest.TestAdapter" version="1.3.2" targetFramework="net472" requireReinstallation="true" />
<package id="MSTest.TestFramework" version="1.3.2" targetFramework="net472" requireReinstallation="true" />
<package id="NUnit" version="3.11.0" targetFramework="net472" requireReinstallation="true" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.0" targetFramework="net472" requireReinstallation="true" />
<package id="System.Threading.Tasks.Extensions" version="4.5.1" targetFramework="net472" requireReinstallation="true" />
</packages>
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,8 @@

namespace LogExpert
{
public class AutoColumnizer : ILogLineColumnizer
public class AutoColumnizer : ILogLineColumnizer, IAutoColumnizer
{
protected int timeOffset = 0;
private readonly TimeFormatDeterminer _timeFormatDeterminer = new TimeFormatDeterminer();

#region ILogLineColumnizer implementation

public string Text => GetName();
Expand All @@ -29,15 +26,13 @@ public string GetDescription()
return "Automatically find the right columnizer for any file";
}

public ILogLineColumnizer FindColumnizer(string fileName, LogfileReader logFileReader)
public ILogLineColumnizer FindColumnizer(string fileName, IAutoLogLineColumnizerCallback logFileReader)
{
if (logFileReader == null || string.IsNullOrEmpty(fileName))
{
return new DefaultLogfileColumnizer();
return logFileReader.GetDefaultColumnizer();
}

ILogLineColumnizer lineColumnizer = null;
var timeDeterminer = new TimeFormatDeterminer();
List<ILogLine> loglines = new List<ILogLine>
{
// Sampling a few lines to select the correct columnizer
Expand All @@ -53,7 +48,23 @@ public ILogLineColumnizer FindColumnizer(string fileName, LogfileReader logFileR
logFileReader.GetLogLine(400)
};

lineColumnizer = PluginRegistry.GetInstance().RegisteredColumnizers.OrderByDescending(x => x.GetPriority(fileName, loglines)).First();
var registeredColumnizer = logFileReader.GetRegisteredColumnizers();

List<Tuple<Priority, ILogLineColumnizer>> priorityListOfColumnizers = new List<Tuple<Priority, ILogLineColumnizer>>();

foreach (ILogLineColumnizer logLineColumnizer in registeredColumnizer)
{
var columnizerPriority = logLineColumnizer as IColumnizerPriority;
Priority priority = default(Priority);
if (columnizerPriority != null)
{
priority = columnizerPriority.GetPriority(fileName, loglines);
}

priorityListOfColumnizers.Add(new Tuple<Priority, ILogLineColumnizer>(priority, logLineColumnizer));
}

ILogLineColumnizer lineColumnizer = priorityListOfColumnizers.OrderByDescending(a => a.Item1).Select(a => a.Item2).First();

return lineColumnizer;
}
Expand Down Expand Up @@ -92,11 +103,6 @@ public void PushValue(ILogLineColumnizerCallback callback, int column, string va
{
}

public Priority GetPriority(string fileName, IEnumerable<ILogLine> samples)
{
return Priority.NotSupport;
}

#endregion ILogLineColumnizer implementation
}
}
69 changes: 69 additions & 0 deletions src/AutoColumnizer/AutoColumnizer.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{B57259A3-4ED7-4F8B-A252-29E799A56B9E}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AutoColumnizer</RootNamespace>
<AssemblyName>AutoColumnizer</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\bin\Debug\plugins\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\bin\Release\plugins\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>true</SignAssembly>
</PropertyGroup>
<PropertyGroup>
<AssemblyOriginatorKeyFile>..\Solution Items\Key.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\Solution Items\AssemblyVersion.cs">
<Link>Properties\AssemblyVersion.cs</Link>
</Compile>
<Compile Include="AutoColumnizer.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ColumnizerLib\ColumnizerLib.csproj">
<Project>{e72c2bb1-34de-4d66-a830-9647c3837833}</Project>
<Name>ColumnizerLib</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="..\Solution Items\Key.snk">
<Link>Key.snk</Link>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
Loading

0 comments on commit bbf3f00

Please sign in to comment.