Skip to content

Commit

Permalink
Refactored event table columns and added additional columns (#342)
Browse files Browse the repository at this point in the history
Resolves #338 and #339
  • Loading branch information
jschick04 authored May 9, 2024
1 parent 676d694 commit dced7da
Show file tree
Hide file tree
Showing 18 changed files with 141 additions and 243 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ public DisplayEventModel Resolve(EventRecord eventRecord, string OwningLogName)
GetKeywordsFromBitmask(eventRecord.Keywords, null),
eventRecord.ProcessId,
eventRecord.ThreadId,
eventRecord.UserId,
eventRecord.LogName,
OwningLogName,
eventRecord.ToXml());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public DisplayEventModel Resolve(EventRecord eventRecord, string OwningLogName)
keywordsDisplayNames,
eventRecord.ProcessId,
eventRecord.ThreadId,
eventRecord.UserId,
eventRecord.LogName,
OwningLogName,
eventRecord.ToXml());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ protected static IEnumerable<string> GetKeywordsFromBitmask(long? bitmask, Provi

foreach (var k in StandardKeywords.Keys)
{
if ((bitmask.Value & k) == k) { returnValue.Add(StandardKeywords[k]); }
if ((bitmask.Value & k) == k) { returnValue.Add(StandardKeywords[k].TrimEnd('\0')); }
}

if (providerDetails != null)
Expand All @@ -59,7 +59,7 @@ protected static IEnumerable<string> GetKeywordsFromBitmask(long? bitmask, Provi
{
foreach (var k in providerDetails.Keywords.Keys)
{
if ((lower32 & k) == k) { returnValue.Add(providerDetails.Keywords[k]); }
if ((lower32 & k) == k) { returnValue.Add(providerDetails.Keywords[k].TrimEnd('\0')); }
}
}
}
Expand Down Expand Up @@ -299,6 +299,7 @@ protected DisplayEventModel ResolveFromProviderDetails(
GetKeywordsFromBitmask(eventRecord.Keywords, providerDetails),
eventRecord.ProcessId,
eventRecord.ThreadId,
eventRecord.UserId,
eventRecord.LogName!,
owningLogName,
eventRecord.ToXml());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public DisplayEventModel Resolve(EventRecord eventRecord, string OwningLogName)
GetKeywordsFromBitmask(eventRecord.Keywords, null),
eventRecord.ProcessId,
eventRecord.ThreadId,
eventRecord.UserId,
eventRecord.LogName,
OwningLogName,
eventRecord.ToXml());
Expand Down
3 changes: 3 additions & 0 deletions src/EventLogExpert.Eventing/Models/DisplayEventModel.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// // Copyright (c) Microsoft Corporation.
// // Licensed under the MIT License.

using System.Security.Principal;

namespace EventLogExpert.Eventing.Models;

public sealed record DisplayEventModel(
Expand All @@ -17,6 +19,7 @@ public sealed record DisplayEventModel(
IEnumerable<string> KeywordsDisplayNames,
int? ProcessId,
int? ThreadId,
SecurityIdentifier UserId,
string LogName, // This is the log name from the event reader
string OwningLog, // This is the name of the log file or the live log, which we use internally
string Xml);
8 changes: 6 additions & 2 deletions src/EventLogExpert.UI/Enums.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,15 @@ public enum ColumnName
Level,
[EnumMember(Value = "Date and Time")] DateAndTime,
[EnumMember(Value = "Activity ID")] ActivityId,
[EnumMember(Value = "Log Name")] LogName,
Log,
[EnumMember(Value = "Computer Name")] ComputerName,
Source,
[EnumMember(Value = "Event ID")] EventId,
[EnumMember(Value = "Task Category")] TaskCategory
[EnumMember(Value = "Task Category")] TaskCategory,
Keywords,
[EnumMember(Value = "Process ID")] ProcessId,
[EnumMember(Value = "Thread ID")] ThreadId,
User
}

public enum CopyType
Expand Down
15 changes: 13 additions & 2 deletions src/EventLogExpert.UI/FilterMethods.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,8 @@ public static bool IsFilteringEnabled(EventFilter eventFilter) =>
public static IEnumerable<DisplayEventModel> SortEvents(
this IEnumerable<DisplayEventModel> events,
ColumnName? orderBy = null,
bool isDescending = false) => orderBy switch
bool isDescending = false) =>
orderBy switch
{
ColumnName.Level => isDescending ? events.OrderByDescending(e => e.Level) : events.OrderBy(e => e.Level),
ColumnName.DateAndTime => isDescending ?
Expand All @@ -114,7 +115,7 @@ public static IEnumerable<DisplayEventModel> SortEvents(
ColumnName.ActivityId => isDescending ?
events.OrderByDescending(e => e.ActivityId) :
events.OrderBy(e => e.ActivityId),
ColumnName.LogName => isDescending ? events.OrderByDescending(e => e.LogName) : events.OrderBy(e => e.LogName),
ColumnName.Log => isDescending ? events.OrderByDescending(e => e.LogName) : events.OrderBy(e => e.LogName),
ColumnName.ComputerName => isDescending ?
events.OrderByDescending(e => e.ComputerName) :
events.OrderBy(e => e.ComputerName),
Expand All @@ -123,6 +124,16 @@ public static IEnumerable<DisplayEventModel> SortEvents(
ColumnName.TaskCategory => isDescending ?
events.OrderByDescending(e => e.TaskCategory) :
events.OrderBy(e => e.TaskCategory),
ColumnName.Keywords => isDescending ?
events.OrderByDescending(e => e.KeywordsDisplayNames) :
events.OrderBy(e => e.KeywordsDisplayNames),
ColumnName.ProcessId => isDescending ?
events.OrderByDescending(e => e.ProcessId) :
events.OrderBy(e => e.ProcessId),
ColumnName.ThreadId => isDescending ?
events.OrderByDescending(e => e.ThreadId) :
events.OrderBy(e => e.ThreadId),
ColumnName.User => isDescending ? events.OrderByDescending(e => e.UserId) : events.OrderBy(e => e.UserId),
_ => isDescending ? events.OrderByDescending(e => e.RecordId) : events.OrderBy(e => e.RecordId)
};

Expand Down
16 changes: 1 addition & 15 deletions src/EventLogExpert.UI/Interfaces/IPreferencesProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,37 +8,23 @@ namespace EventLogExpert.UI.Interfaces;

public interface IPreferencesProvider
{
bool ActivityIdColumnPreference { get; set; }

bool ComputerNameColumnPreference { get; set; }

bool DateAndTimeColumnPreference { get; set; }

IList<string> DisabledDatabasesPreference { get; set; }

bool DisplayPaneSelectionPreference { get; set; }

bool EventIdColumnPreference { get; set; }
IList<ColumnName> EnabledEventTableColumnsPreference { get; set; }

IList<string> FavoriteFiltersPreference { get; set; }

CopyType KeyboardCopyTypePreference { get; set; }

bool LevelColumnPreference { get; set; }

LogLevel LogLevelPreference { get; set; }

bool LogNameColumnPreference { get; set; }

bool PreReleasePreference { get; set; }

IList<string> RecentFiltersPreference { get; set; }

IList<FilterGroupModel> SavedFiltersPreference { get; set; }

bool SourceColumnPreference { get; set; }

bool TaskCategoryColumnPreference { get; set; }

string TimeZonePreference { get; set; }
}
File renamed without changes.
27 changes: 0 additions & 27 deletions src/EventLogExpert.UI/Services/EventTableColumnProvider.cs

This file was deleted.

51 changes: 20 additions & 31 deletions src/EventLogExpert.UI/Store/EventTable/EventTableEffects.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,12 @@
// // Licensed under the MIT License.

using EventLogExpert.UI.Interfaces;
using EventLogExpert.UI.Services;
using Fluxor;

namespace EventLogExpert.UI.Store.EventTable;

public sealed class EventTableEffects(
IEventTableColumnProvider columnProvider,
IPreferencesProvider preferencesProvider)
public sealed class EventTableEffects(IPreferencesProvider preferencesProvider)
{
private readonly IEventTableColumnProvider _columnProvider = columnProvider;
private readonly IPreferencesProvider _preferencesProvider = preferencesProvider;

[EffectMethod(typeof(EventTableAction.UpdateDisplayedEvents))]
Expand All @@ -33,7 +29,13 @@ public static Task HandleUpdateTable(IDispatcher dispatcher)
[EffectMethod(typeof(EventTableAction.LoadColumns))]
public Task HandleLoadColumns(IDispatcher dispatcher)
{
var columns = _columnProvider.GetColumns();
var columns = new Dictionary<ColumnName, bool>();
var enabledColumns = _preferencesProvider.EnabledEventTableColumnsPreference;

foreach (ColumnName column in Enum.GetValues(typeof(ColumnName)))
{
columns.Add(column, enabledColumns.Contains(column));
}

dispatcher.Dispatch(new EventTableAction.LoadColumnsCompleted(columns));

Expand All @@ -43,34 +45,21 @@ public Task HandleLoadColumns(IDispatcher dispatcher)
[EffectMethod]
public Task HandleToggleColumn(EventTableAction.ToggleColumn action, IDispatcher dispatcher)
{
switch (action.ColumnName)
var columns = new Dictionary<ColumnName, bool>();
var enabledColumns = _preferencesProvider.EnabledEventTableColumnsPreference;

foreach (ColumnName column in Enum.GetValues(typeof(ColumnName)))
{
case ColumnName.Level:
_preferencesProvider.LevelColumnPreference = !_preferencesProvider.LevelColumnPreference;
break;
case ColumnName.DateAndTime:
_preferencesProvider.DateAndTimeColumnPreference = !_preferencesProvider.DateAndTimeColumnPreference;
break;
case ColumnName.ActivityId:
_preferencesProvider.ActivityIdColumnPreference = !_preferencesProvider.ActivityIdColumnPreference;
break;
case ColumnName.LogName:
_preferencesProvider.LogNameColumnPreference = !_preferencesProvider.LogNameColumnPreference;
break;
case ColumnName.ComputerName:
_preferencesProvider.ComputerNameColumnPreference = !_preferencesProvider.ComputerNameColumnPreference;
break;
case ColumnName.Source:
_preferencesProvider.SourceColumnPreference = !_preferencesProvider.SourceColumnPreference;
break;
case ColumnName.EventId:
_preferencesProvider.EventIdColumnPreference = !_preferencesProvider.EventIdColumnPreference;
break;
case ColumnName.TaskCategory:
_preferencesProvider.TaskCategoryColumnPreference = !_preferencesProvider.TaskCategoryColumnPreference;
break;
columns.Add(column,
column.Equals(action.ColumnName) ?
!enabledColumns.Contains(column) :
enabledColumns.Contains(column));
}

_preferencesProvider.EnabledEventTableColumnsPreference = columns.Keys.Where(column => columns[column]).ToList();

dispatcher.Dispatch(new EventTableAction.LoadColumnsCompleted(columns));

return Task.CompletedTask;
}
}
2 changes: 1 addition & 1 deletion src/EventLogExpert.UI/Store/EventTable/EventTableState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public sealed record EventTableState

public EventLogId? ActiveEventLogId { get; init; }

public IImmutableDictionary<ColumnName, bool> Columns { get; init; } = ImmutableDictionary<ColumnName, bool>.Empty;
public ImmutableDictionary<ColumnName, bool> Columns { get; init; } = ImmutableDictionary<ColumnName, bool>.Empty;

public ColumnName? OrderBy { get; init; }

Expand Down
Loading

0 comments on commit dced7da

Please sign in to comment.