Skip to content

Commit eb4df5b

Browse files
committed
initial version
1 parent a511b02 commit eb4df5b

File tree

7 files changed

+520
-129
lines changed

7 files changed

+520
-129
lines changed

Analogy.LogViewer.LiteDB.UnitTests/UnitTest1.cs

+8-9
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,14 @@ public class UnitTest1
1717
[TestMethod]
1818
public async Task ReadDBTest()
1919
{
20-
CancellationTokenSource cts = new CancellationTokenSource();
21-
string fileName = Path.Combine(Folder, "db", "example.db");
22-
MessageHandlerForTesting forTesting = new MessageHandlerForTesting();
23-
LiteDBBroswerDataProvider reader = new LiteDBBroswerDataProvider();
24-
LoggerFactory factory = new LoggerFactory();
25-
Microsoft.Extensions.Logging.ILogger logger = factory.CreateLogger("test");
26-
await reader.InitializeDataProvider(logger);
27-
var messages = (await reader.Process(fileName, cts.Token, forTesting)).ToList();
28-
Assert.IsTrue(messages.Count == 389);
20+
//CancellationTokenSource cts = new CancellationTokenSource();
21+
//string fileName = @"C:\Lior\state.db";//Path.Combine(Folder, "db", "example.db");
22+
//MessageHandlerForTesting forTesting = new MessageHandlerForTesting();
23+
//LiteDBDataProvider reader = new LiteDBDataProvider();
24+
//LoggerFactory factory = new LoggerFactory();
25+
//Microsoft.Extensions.Logging.ILogger logger = factory.CreateLogger("test");
26+
//await reader.InitializeDataProvider(logger);
27+
//var messages = (await reader.Process(fileName, cts.Token, forTesting)).ToList();
2928
}
3029
}
3130
}

Analogy.LogViewer.LiteDB/Analogy.LogViewer.LiteDB.csproj

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFrameworks>net8.0-windows;net7.0-windows;net6.0-windows;net48;net471</TargetFrameworks>
5-
<Version>0.7.1</Version>
5+
<Version>0.1.0</Version>
66
<Authors>Lior Banai</Authors>
77
<Company>Analogy.LogViewer</Company>
88
<Product>Analogy.LogViewer.LiteDB</Product>
@@ -18,8 +18,7 @@
1818
<PackageReference Include="Analogy.LogViewer.Interfaces" Version="6.0.0.1" />
1919
<PackageReference Include="Analogy.CommonUtilities" Version="6.0.0" />
2020
<PackageReference Include="Analogy.LogViewer.Template" Version="6.0.0" />
21-
<PackageReference Include="Microsoft.Data.LiteDB" Version="8.0.3" />
22-
<PackageReference Include="Microsoft.Data.LiteDB.Core" Version="8.0.3" />
21+
<PackageReference Include="LiteDB" Version="5.0.19" />
2322
<PackageReference Include="System.Resources.Extensions" Version="8.0.0" />
2423
</ItemGroup>
2524
<ItemGroup>

Analogy.LogViewer.LiteDB/IAnalogy/LiteDBBroswerDataProvider.cs

-116
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
using Analogy.Interfaces;
2+
using Analogy.LogViewer.LiteDB.Properties;
3+
using Analogy.LogViewer.Template.Managers;
4+
using LiteDB;
5+
using Microsoft.Extensions.Logging;
6+
using Newtonsoft.Json.Linq;
7+
using System;
8+
using System.Collections;
9+
using System.Collections.Generic;
10+
using System.Data;
11+
using System.Drawing;
12+
using System.IO;
13+
using System.Linq;
14+
using System.Reflection;
15+
using System.Text;
16+
using System.Threading;
17+
using System.Threading.Tasks;
18+
19+
namespace Analogy.LogViewer.LiteDB.IAnalogy
20+
{
21+
public class LiteDBDataProvider : Template.OfflineDataProvider
22+
{
23+
public override Guid Id { get; set; } = new Guid("25b2b926-47f8-4f13-8db8-0803f8829eba");
24+
public override Image? LargeImage { get; set; } = Resources.Analogy_image_32x32;
25+
public override Image? SmallImage { get; set; } = Resources.Analogy_image_16x16;
26+
27+
public override string? OptionalTitle { get; set; } = "LiteDB db browser";
28+
public override string FileOpenDialogFilters { get; set; } = "LiteDB db file (*.db)|*.db";
29+
public override IEnumerable<string> SupportFormats { get; set; } = new[] { "*.db" };
30+
public override string? InitialFolderFullPath { get; set; } = Environment.CurrentDirectory;
31+
public override IEnumerable<(string OriginalHeader, string ReplacementHeader)> GetReplacementHeaders()
32+
=> Array.Empty<(string, string)>();
33+
public string Collection { get; set; } = "";
34+
public string Sql { get; set; } = "";
35+
public const int RESULTLIMIT = 1000;
36+
public bool LimitExceeded { get; set; }
37+
public override Task InitializeDataProvider(ILogger logger)
38+
{
39+
//do some initialization for this provider
40+
return base.InitializeDataProvider(logger);
41+
}
42+
43+
public override IEnumerable<AnalogyLogMessagePropertyName> HideExistingColumns()
44+
{
45+
yield return AnalogyLogMessagePropertyName.Date;
46+
yield return AnalogyLogMessagePropertyName.Text;
47+
yield return AnalogyLogMessagePropertyName.Level;
48+
yield return AnalogyLogMessagePropertyName.Class;
49+
yield return AnalogyLogMessagePropertyName.Source;
50+
yield return AnalogyLogMessagePropertyName.User;
51+
yield return AnalogyLogMessagePropertyName.Class;
52+
yield return AnalogyLogMessagePropertyName.ProcessId;
53+
yield return AnalogyLogMessagePropertyName.ThreadId;
54+
yield return AnalogyLogMessagePropertyName.MachineName;
55+
yield return AnalogyLogMessagePropertyName.MethodName;
56+
yield return AnalogyLogMessagePropertyName.LineNumber;
57+
yield return AnalogyLogMessagePropertyName.RawText;
58+
yield return AnalogyLogMessagePropertyName.RawTextType;
59+
yield return AnalogyLogMessagePropertyName.Id;
60+
}
61+
62+
public override void MessageOpened(IAnalogyLogMessage message)
63+
{
64+
//nop
65+
}
66+
67+
public override async Task<IEnumerable<IAnalogyLogMessage>> Process(string fileName, CancellationToken token, ILogMessageCreatedHandler messagesHandler)
68+
{
69+
var messages = new List<IAnalogyLogMessage>();
70+
ConnectionString connection = new ConnectionString();
71+
connection.Connection = ConnectionType.Direct;
72+
73+
connection.Filename = fileName;
74+
connection.ReadOnly = true;
75+
connection.Upgrade = false;
76+
connection.Password = null;
77+
connection.InitialSize = 0;
78+
var _db = new LiteDatabase(connection);
79+
try
80+
{
81+
// force open database
82+
var uv = _db.UserVersion;
83+
foreach (var col in _db.GetCollectionNames())
84+
{
85+
var bd = new BsonDocument();
86+
Sql = $"SELECT $ FROM {col};";
87+
var sql = new StringReader(Sql.Trim());
88+
89+
while (sql.Peek() >= 0 && _db != null)
90+
{
91+
using var reader = _db.Execute(sql, bd);
92+
var items = ReadResult(reader);
93+
var sb = new StringBuilder();
94+
using (var writer = new StringWriter(sb))
95+
{
96+
var json = new JsonWriter(writer) { Pretty = true, Indent = 2, };
97+
AnalogyLogMessage m = new AnalogyLogMessage();
98+
m.Source = $"Table: {col}";
99+
foreach (var item in items)
100+
{
101+
var keys = ((BsonDocument)item).Keys.ToList();
102+
var values = ((BsonDocument)item).Values.ToList();
103+
104+
for (var i = 0; i < keys.Count; i++)
105+
{
106+
var key = keys[i];
107+
var itm = values[i];
108+
sb.AppendLine($"{key}: {itm}");
109+
m.AddOrReplaceAdditionalProperty(key, itm.ToString());
110+
}
111+
json.Serialize(item);
112+
m.Text = sb.ToString();
113+
messages.Add(m);
114+
messagesHandler.AppendMessage(m, fileName);
115+
}
116+
117+
m.RawText = json.ToString();
118+
m.RawTextType = AnalogyRowTextType.JSON;
119+
sb.AppendLine();
120+
}
121+
}
122+
}
123+
}
124+
catch (Exception ex)
125+
{
126+
_db?.Dispose();
127+
}
128+
return messages;
129+
}
130+
public List<BsonValue> ReadResult(IBsonDataReader reader)
131+
{
132+
var result = new List<BsonValue>();
133+
this.LimitExceeded = false;
134+
this.Collection = reader.Collection;
135+
136+
var index = 0;
137+
var hasLimit = this.Sql.IndexOf("LIMIT ", StringComparison.OrdinalIgnoreCase) >= 0;
138+
139+
while (reader.Read())
140+
{
141+
if (index++ >= RESULTLIMIT && hasLimit == false)
142+
{
143+
this.LimitExceeded = true;
144+
break;
145+
}
146+
147+
result.Add(reader.Current);
148+
}
149+
150+
return result;
151+
}
152+
}
153+
}

Analogy.LogViewer.LiteDB/IAnalogy/LiteDBDataProviderFactory.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class LiteDBDataProviderFactory : DataProvidersFactory
1212

1313
public override IEnumerable<IAnalogyDataProvider> DataProviders { get; set; } = new List<IAnalogyDataProvider>
1414
{
15-
new LiteDBBroswerDataProvider(),
15+
new LiteDBDataProvider(),
1616
};
1717
}
1818
}

0 commit comments

Comments
 (0)