-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathDbToolCommand.cs
More file actions
74 lines (58 loc) · 2.83 KB
/
DbToolCommand.cs
File metadata and controls
74 lines (58 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// // Copyright (c) Microsoft Corporation.
// // Licensed under the MIT License.
using EventLogExpert.Eventing.Helpers;
using EventLogExpert.Eventing.Providers;
using EventLogExpert.Eventing.Readers;
using System.Text.RegularExpressions;
namespace EventLogExpert.EventDbTool;
public class DbToolCommand(ITraceLogger logger)
{
private string _providerDetailFormat = "{0, -14} {1, 8} {2, 8} {3, 8} {4, 8} {5, 8}";
protected ITraceLogger Logger => logger;
protected static List<string> GetLocalProviderNames(string? filter, ITraceLogger logger) =>
!RegexHelper.TryCreate(filter, logger, out var regex) ? [] : GetLocalProviderNames(regex);
protected static List<string> GetLocalProviderNames(Regex? regex)
{
var providers = new List<string>(EventLogSession.GlobalSession.GetProviderNames().Distinct().OrderBy(name => name));
return regex is null ? providers : providers.Where(p => regex.IsMatch(p)).ToList();
}
protected IEnumerable<ProviderDetails> LoadLocalProviders(string? filter, IReadOnlySet<string>? skipProviderNames = null)
{
if (!RegexHelper.TryCreate(filter, Logger, out var regex)) { yield break; }
foreach (var details in LoadLocalProviders(regex, skipProviderNames))
{
yield return details;
}
}
protected IEnumerable<ProviderDetails> LoadLocalProviders(Regex? regex, IReadOnlySet<string>? skipProviderNames = null)
{
foreach (var providerName in GetLocalProviderNames(regex))
{
// Skip BEFORE resolving so we don't pay the cost of loading metadata for providers we
// are about to discard (e.g. when --skip-providers-in-file lists most local providers).
if (skipProviderNames is not null && skipProviderNames.Contains(providerName)) { continue; }
yield return new EventMessageProvider(providerName, Logger).LoadProviderDetails();
}
}
protected void LogProviderDetailHeader(IEnumerable<string> providerNames)
{
var maxNameLength = providerNames.Any() ? providerNames.Max(p => p.Length) : 14;
if (maxNameLength < 14) { maxNameLength = 14; }
_providerDetailFormat = "{0, -" + maxNameLength + "} {1, 8} {2, 8} {3, 8} {4, 8} {5, 8} {6, 8}";
var header = string.Format(_providerDetailFormat, "Provider Name", "Events", "Parameters", "Keywords", "Opcodes", "Tasks", "Messages");
Logger.Info($"{header}");
}
protected void LogProviderDetails(ProviderDetails details)
{
var line = string.Format(
_providerDetailFormat,
details.ProviderName,
details.Events.Count,
details.Parameters.Count(),
details.Keywords.Count,
details.Opcodes.Count,
details.Tasks.Count,
details.Messages.Count);
Logger.Info($"{line}");
}
}