Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"cSpell.words": ["roslynator"]
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using SixLabors.Fonts;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;

Expand Down Expand Up @@ -38,7 +37,6 @@ private IDictionary<string, Definition> GetDefinitions()
{
if (definitions == null)
{

if (XmlDocument == null)
{
throw new ArgumentNullException(nameof(XmlDocument));
Expand Down
4 changes: 2 additions & 2 deletions src/LightQueryProfiler.Shared/Data/ApplicationDbContext.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using System.Data.Common;
using Microsoft.Data.SqlClient;
using Microsoft.Data.SqlClient;
using System.Data.Common;

namespace LightQueryProfiler.Shared.Data
{
Expand Down
11 changes: 5 additions & 6 deletions src/LightQueryProfiler.Shared/Data/SqliteContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,15 @@ namespace LightQueryProfiler.Shared.Data
{
public class SqliteContext : IDatabaseContext
{
const string dataBaseName = "localStorage.db";
private const string dataBaseName = "localStorage.db";

public IDbConnection GetConnection()
{
string dbPath = Path.Combine(AppContext.BaseDirectory, dataBaseName);
return new SqliteConnection($"Filename={dbPath}");
}


public async static void InitializeDatabase()
public static async void InitializeDatabase()
{
string dbPath = Path.Combine(AppContext.BaseDirectory, dataBaseName);
if (!File.Exists(dbPath))
Expand All @@ -28,9 +27,9 @@ public async static void InitializeDatabase()

const string tableCommand = @"
CREATE TABLE IF NOT
EXISTS Connections
EXISTS Connections
(
Id INTEGER PRIMARY KEY,
Id INTEGER PRIMARY KEY,
DataSource NVARCHAR(1000) NULL,
InitialCatalog NVARCHAR(100) NULL,
UserId NVARCHAR(100) NULL,
Expand All @@ -44,4 +43,4 @@ CreationDate Date
await createTable.ExecuteReaderAsync();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public DefaultProfilerSessionTemplate()
{
Name = "Default";
}

public override string GetDefaultView() => "DefaultProfilerViewTemplate";

public override string CreateSQLStatement(string sessionName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ public abstract class BaseProfilerSessionTemplate

public abstract string CreateSQLStatement(string sessionName);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
using System.Linq.Expressions;

namespace LightQueryProfiler.Shared.Repositories.Interfaces
namespace LightQueryProfiler.Shared.Repositories.Interfaces
{
public interface IRepository<T>
{
Expand All @@ -16,4 +14,4 @@ public interface IRepository<T>

Task<T?> Find(Func<T, bool> predicate);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using LightQueryProfiler.Shared.Data;
using LightQueryProfiler.Shared.Repositories.Interfaces;
using Microsoft.Data.SqlClient;
using System.Data;
using System.Data.Common;
using Microsoft.Data.SqlClient;

namespace LightQueryProfiler.Shared.Repositories
{
Expand Down
5 changes: 2 additions & 3 deletions src/LightQueryProfiler.Shared/Services/XEventService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ public class XEventService : IXEventService
{
public XEventService()
{

}

public List<ProfilerEvent> Parser(string xml)
Expand All @@ -22,10 +21,10 @@ public List<ProfilerEvent> Parser(string xml)
XmlReader reader = XmlReader.Create(new StringReader(xml), settings);
XmlDocument xmlDocument = new XmlDocument();

//Read the XML File
//Read the XML File
xmlDocument.Load(reader);

//Create a XML Node List with XPath Expression
//Create a XML Node List with XPath Expression
XmlNodeList? eventNodeList = xmlDocument.SelectNodes("/RingBufferTarget/event");

if (eventNodeList == null)
Expand Down
2 changes: 2 additions & 0 deletions src/LightQueryProfiler.WinFormsApp/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,7 @@ public static class Constants
public const string RESUME_BMP_ENC = "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAADFUlEQVR4nO2ZS0hUURjHb0EURFDrojYuWhV6iyyzMubh25nMAp/zsjTNScMeLpwJhxKEWqSUID3MRQ8yQxvnnHHuGUqEwEXlzjIkCGphiFI6nst8ce+dR40GLsZmDtw/fLvvnvP9vu/cc889H8epUqVKVVLK54NdiIgjmNAAJiIoRgNIEL1eL+yM9ScENiFC25FAJ5EgjnkINXCJFJKDDwceY4KIY/0xoV3LfWnf0BvYlhAA/Ffmo2Y0ucBgcgVj/RGhsyv5I0K/Ij/NSQCAuGL207Rm2VbrHwERaO/AKGxhFgAr1Zj2+GkWswBYqUQQE9qNEGxmEuCPakwN+5cymQUIVYNKW6/bDRuZBMDRbXlieCSQxi4AkauxJFVjfBw2MAmAo/bWQ2A3ywCABLqABfGywwHrmQTAURv1EEhhGQAwoT+xINoBYB2jAKKyrIjocRPYwSwAVqoxg/1iCcMAonIU8dFCJgH6h37AUeMFsDZ2TzEJ0HytX547v8zxmSmA54MzUFp7MzS3BTIK64zMAHR0jUFGQb085/5s2zyvNbHxEr8cnpPWemS+9Nza13uPV25fVfCJBrjd8w6OGRuVrOurF3m9rYbjuOT/kA2ieahpvh+Z41B+/YdUnZWNo0TXvQnIKr4oj71PXy0ezKtzcg5H8h/mXuFf0NT6FHitRR43s6jhE6+rYuM43dM3CfrTV0NZtwazTjTd5fkzyf9D4/YuKFnXWeWxjhjs3w/n1fJxCXytAR4+mYb88tZQ1i3BnNKWvpTs88n/U+/xLUHL9UFpW1SybrTP6UouaeMe+FoAPHr2BQornfJzvM4CeWWtvj3a8uS/2EICBdctAQ7knA2v9YViW/upNQ08XgCPX3yDk9YbEX+Dqe19UZVjK5fI6/UB96wSkMa0+K/rdffIIjg7MKTn1ij7uqGBVtk7G/5b4GFJnZhwPyCcxbClaswrNTg6ZX9zW8Sv2NL+sbLxzuoPYPFuMUmdGKmZEQleYw6kakyI11QsazFJ95vSzVrdld6Zggrn7LnmB664BqRKlSpVXDLqN0tRWCSIb+HsAAAAAElFTkSuQmCC";
public const string SEARCH_BMP_ENC = "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAADLUlEQVR4nO2YWU8TURiG505N0DuTarkwBlxiIhLxn4hL4o3GiPuOMWo0uJJGiQtKaYHSVqORH6DxpuFCIdUQ4pK4QJu2YKWgFBi00xYec1oX3BJxzsxI0jc5N3P1PGfO9n2KUkghhfxT/DDPDxu9E7hbswRbsyQ8WdKeDOmWDImmDMHmDK5GjQ1NMFf5X+KFJT5o9k0w7p2E1on88IiRhZYsNGfyw50GlwaNKcadKZoaUpRaBn4X5vjgohcyvkn4a3gNnCm48QnqP5K+No7DA7NNhb8FpX545gP+Ff56XoCr43B5jI46lQWmwHuh3A8JWfBXVLiswqVRYo4xVpox89Lh68ZyAlwcIeZQsRkCL9apH7oNhMcxArVJnlyKMke6gNiwJsBz4QOcfU+N9KNSz2kzHfhz7+HMEGOnBiQupdw5bx48NYNwKsENaTfstC4pOfCcHECtHpRwY+eeB+bDc+IdHI+zXrdA7m1jAfyxOBx9S6NugdzDzBp4qvvp0C3gyTJoBfyRfjgcY0C3QEsWzRL4PjgUI6VfIINmETwHonIEBi2CZ29EwhL6UkmZDr8vArtDEjaxKAOtgN8Thl29OHULiBrWEvgQ7AhRqVugHoqcKVSz4bf3oO58TpEiI6IAN3Xme2FbDy5FVkT3QBTgZsFX9aBtfsViRWZE98AkeLa+4YJiREkpugdGw68NDqdX+LrKFCNSr2KrGyVqFPymZ59Y6n3MsraX8fIHQ8sNkRCtj1z3QDb804+suNnF0jsvWHU/TkV7sq88kCwxROLcKPNrk7TLgq8MDmul3mAe/t5b1rSP5MbqQPJRsTtqjMQVmCW6B6eHUPWcNltfc37l7e4ly9tehsXMf4WvCCRDdk/s3QJXNG5zh41ZTiKieyAKcFHDTueSquqhcepRWRaIL6poHwn/AO+OkhtGS3wRKRI17NF+nEf66RTFyMEY2v4omnhV7g7TubOXhqoQ6/50w5YHkiWrA8mHxZ6+7/BmSsiIvSFWanNH+n4RKEiYHHvhT8yAP2FzR14pMyH230m4IpM2V2S7MlNinyox0+B/kni9sCm65dvHQgopRJmaz39BUHt8KVcUAAAAAElFTkSuQmCC";
public const string STOP_BMP_ENC = "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAABFUlEQVR4nO1YQQrCMBDsl6w+oT2p957U+oBe/ICg+ADBSzNfUX/jXfSWhUiLBVGExkM36gzMObOzk82SKCII4ndhjRkLcLTGXAVwXdJWZxpzsGU5+kw8sOlatLwrBlh/4ry6cHkswqcTVWy0Bcsr9z7xuQQg2DWcZYWbZIX4dMCFxDjNa7IAYQfACLWC9qUVXmLouy4co9B3XviQIQzGXCXADjhGKOU6DU4h4RhtCe2xKXzIoO+6cJWAvvPCZQ5hMP67ddoG9Ll72u5q8b0kP7fvgDEHbeFyJxbLpgCP7/WyHIXgPBZLN0jnUhXQT+bD1gXcY7R+/J9vcqjCJF95iX/qxH6aFbUL3XJ2qWLj7TxBENFX4QYSuSsjccyTLgAAAABJRU5ErkJggg==";
public const string FIND_NEXT_BMP_ENC = "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";
public const string CLEAR_SEARCH_BMP_ENC = "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";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ public class SqlHighlightService
{
private readonly IConfiguration _configuration;
private readonly IEngine _engine;

public SqlHighlightService(IEngine engine, IConfiguration configuration)
{
_engine = engine;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
<ImplicitUsings>enable</ImplicitUsings>
<EnableWindowsTargeting>true</EnableWindowsTargeting>
<AssemblyName>LightQueryProfiler</AssemblyName>
<Version>1.0.0</Version>
<FileVersion>1.0.0</FileVersion>
<AssemblyVersion>1.0.0</AssemblyVersion>
<Version>1.0.1</Version>
<FileVersion>1.0.1</FileVersion>
<AssemblyVersion>1.0.1</AssemblyVersion>
</PropertyGroup>

<ItemGroup>
Expand Down
87 changes: 54 additions & 33 deletions src/LightQueryProfiler.WinFormsApp/Presenters/MainPresenter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ public class MainPresenter
private IXEventService? _xEventService;
private Dictionary<string, ProfilerEvent> CurrentRows = new();
private Dictionary<string, object>? Filters;
private int currentIndex = 0;

public MainPresenter(IMainView mainView)
{
view = mainView;
Expand All @@ -55,7 +57,8 @@ public MainPresenter(IMainView mainView)
view.OnClearEvents += OnClearEvents;
view.OnFiltersClick += OnFiltersClick;
view.OnClearFiltersClick += OnClearFiltersClick;
view.OnSearch += OnSearch;
view.OnClearSearch += OnClearSearch;
view.OnFindNext += OnNextSearch;
view.OnRecentConnectionsClick += OnRecentConnectionsClick;
_connectionRepository = new ConnectionRepository(new SqliteContext());
view.Show();
Expand Down Expand Up @@ -401,6 +404,7 @@ private void OnRecentConnectionsClick(object? sender, EventArgs e)
}
}
}

private void OnResume(object? sender, EventArgs e)
{
_shouldStop = false;
Expand All @@ -410,9 +414,47 @@ private void OnResume(object? sender, EventArgs e)
_thread.Start();
}

private void OnSearch(object? sender, EventArgs e)
private void OnClearSearch(object? sender, EventArgs e)
{
SearchGridValue(view.SearchValue?.Trim() ?? "");
view.SearchValue = string.Empty;
currentIndex = 0;
view.ProfilerGridView.ClearSelection();
}

private void OnNextSearch(object? sender, EventArgs e)
{
try
{
if (view.ProfilerGridView.Rows.Count > 0)
{
if (string.IsNullOrEmpty(view.SearchValue))
{
MessageBox.Show("Please enter a search value.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}

currentIndex = FindGridValue(view.SearchValue, currentIndex);
if (currentIndex != -1)
{
view.ProfilerGridView.ClearSelection();
view.ProfilerGridView.FirstDisplayedScrollingRowIndex = currentIndex;
view.ProfilerGridView.Rows[currentIndex].Selected = true;
RowEnter(sender, new DataGridViewCellEventArgs(0, currentIndex));
currentIndex++;
}
else
{
MessageBox.Show("No more results found.", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
currentIndex = 0;
}
}
}
catch (Exception exc)
{
currentIndex = 0;
MessageBox.Show(exc.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
ShowButtonsByAction("default");
}
}

private void OnStart(object? sender, EventArgs e)
Expand Down Expand Up @@ -480,43 +522,22 @@ private async Task SaveRecentConnection()
}
}

private void SearchGridValue(string searchValue)
private int FindGridValue(string searchValue, int startIndex)
{
if (view.ProfilerGridView.Rows.Count > 0)
for (int index = startIndex; index < view.ProfilerGridView.Rows.Count; index++)
{
view.ProfilerGridView.ClearSelection();
try
DataGridViewRow row = view.ProfilerGridView.Rows[index];
for (int i = 0; i < row.Cells.Count; i++)
{
List<int> foundRows = new List<int>();
foreach (DataGridViewRow row in view.ProfilerGridView.Rows)
{
for (int i = 0; i < row.Cells.Count; i++)
{
string celValue = row.Cells[i]?.Value?.ToString() ?? "";
if (celValue.Contains(searchValue, StringComparison.OrdinalIgnoreCase))
{
int rowIndex = row.Index;
view.ProfilerGridView.Rows[rowIndex].Selected = true;
foundRows.Add(rowIndex);
break;
}
}
}
if (foundRows?.Count > 0)
{
view.ProfilerGridView.FirstDisplayedScrollingRowIndex = foundRows[0];
}
else
string celValue = row.Cells[i]?.Value?.ToString() ?? "";
if (celValue.Contains(searchValue, StringComparison.OrdinalIgnoreCase))
{
MessageBox.Show($"{searchValue} not found.", "LightQueryProfiler", MessageBoxButtons.OK, MessageBoxIcon.Information);
return row.Index;
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
ShowButtonsByAction("default");
}
}

return -1;
}

private void SetCurrentRows(ProfilerEvent? _event)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ private void SetConnection(Connection? connection)
}
}


private async void View_OnTextChangeAsync(object? sender, EventArgs e)
{
await SearchGridValueAsync(view.SearchValue?.Trim() ?? "");
Expand Down Expand Up @@ -145,4 +144,4 @@ private DataTable GetDataTable(List<Connection> connections)
return table;
}
}
}
}
2 changes: 1 addition & 1 deletion src/LightQueryProfiler.WinFormsApp/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ private static void Main()
Application.EnableVisualStyles();
// Optional: Improve text rendering
Application.SetCompatibleTextRenderingDefault(false);

Application.SetHighDpiMode(HighDpiMode.SystemAware);

// To customize application configuration such as set high DPI settings or default font,
Expand Down
1 change: 1 addition & 0 deletions src/LightQueryProfiler.WinFormsApp/Views/AboutView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ private void CreateEventHandlers()
lkbLicense.Click += LkbLicense_Click;
btnOK.Click += BtnOK_Click;
}

private void LkbIcons_Click(object? sender, EventArgs e)
{
OnIconLicenseLinkClick?.Invoke(this, EventArgs.Empty);
Expand Down
1 change: 1 addition & 0 deletions src/LightQueryProfiler.WinFormsApp/Views/IAboutView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ public interface IAboutView
event EventHandler? OnLicenseLinkClick;

event EventHandler? OnOK;

Form Form { get; }

string Version { get; set; }
Expand Down
8 changes: 6 additions & 2 deletions src/LightQueryProfiler.WinFormsApp/Views/IMainView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ public interface IMainView

event EventHandler OnResume;

event EventHandler OnSearch;
event EventHandler OnClearSearch;

event EventHandler OnFindNext;

event EventHandler OnStart;

Expand All @@ -33,7 +35,8 @@ public interface IMainView
ListView ProfilerDetails { get; }
DataGridView ProfilerGridView { get; }
ToolStripButton ResumeButton { get; }
ToolStripButton SearchButton { get; }
ToolStripButton ClearSearchButton { get; }
ToolStripButton FindNextButton { get; }
string? SearchValue { get; set; }
object? SelectedAuthenticationMode { get; set; }
string? Server { get; set; }
Expand All @@ -45,6 +48,7 @@ public interface IMainView
ToolStripButton StopButton { get; }
string? User { get; set; }
ToolStripTextBox UserTextBox { get; }

void Show();
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@

using LightQueryProfiler.Shared.Models;

namespace LightQueryProfiler.WinFormsApp.Views
namespace LightQueryProfiler.WinFormsApp.Views
{
public interface IRecentConnectionsView
{
Expand All @@ -19,4 +16,4 @@ public interface IRecentConnectionsView

Form Form { get; }
}
}
}
Loading