Skip to content

Commit

Permalink
Removed Diagnostics.EventLog and added functions to create session an…
Browse files Browse the repository at this point in the history
…d retrieve log data
  • Loading branch information
jschick04 authored and bill-long committed Nov 11, 2024
1 parent 868b598 commit 9b7b4c1
Show file tree
Hide file tree
Showing 27 changed files with 1,864 additions and 1,201 deletions.
234 changes: 117 additions & 117 deletions src/EventLogExpert.EventDbTool/CreateDatabaseCommand.cs
Original file line number Diff line number Diff line change
@@ -1,120 +1,120 @@
// // Copyright (c) Microsoft Corporation.
// // Licensed under the MIT License.

using EventLogExpert.Eventing.EventProviderDatabase;
using EventLogExpert.Eventing.Providers;
using System.CommandLine;

namespace EventLogExpert.EventDbTool;

public class CreateDatabaseCommand : DbToolCommand
{
public static Command GetCommand()
{
var createDatabaseCommand = new Command(
name: "create",
description: "Creates a new event database.");
var fileArgument = new Argument<string>(
name: "file",
description: "File to create. Must have a .db extension.");
var filterOption = new Option<string>(
name: "--filter",
description: "Only providers matching specified regex string will be added to the database.");
var skipProvidersInFileOption = new Option<string>(
name: "--skip-providers-in-file",
description: "Any providers found in the specified database file will not be included in the new database. " +
"For example, when creating a database of event providers for Exchange Server, it may be useful " +
"to provide a database of all providers from a fresh OS install with no other products. That way, all the " +
"OS providers are skipped, and only providers added by Exchange or other installed products " +
"would be saved in the new database.");
var verboseOption = new Option<bool>(
name: "--verbose",
description: "Enable verbose logging. May be useful for troubleshooting.");

createDatabaseCommand.AddArgument(fileArgument);
createDatabaseCommand.AddOption(filterOption);
createDatabaseCommand.AddOption(skipProvidersInFileOption);
createDatabaseCommand.AddOption(verboseOption);
createDatabaseCommand.SetHandler((fileOptionValue, filterOptionValue, verboseOptionValue, skipProvidersInFileOption) =>
{
CreateDatabase(fileOptionValue, filterOptionValue, verboseOptionValue, skipProvidersInFileOption);
},
fileArgument, filterOption, verboseOption, skipProvidersInFileOption);

return createDatabaseCommand;
}

public static void CreateDatabase(string path, string filter, bool verboseLogging, string skipProvidersInFile)
{
if (File.Exists(path))
{
Console.WriteLine($"Cannot create database because file already exists: {path}");
return;
}

if (Path.GetExtension(path) != ".db")
{
Console.WriteLine("File extension must be .db.");
return;
}

var skipProviderNames = new HashSet<string>();

if (skipProvidersInFile != null)
{
if (!File.Exists(skipProvidersInFile))
{
Console.WriteLine($"File not found: {skipProvidersInFile}");
}

using var skipDbContext = new EventProviderDbContext(skipProvidersInFile, readOnly: true);
foreach (var provider in skipDbContext.ProviderDetails)
{
skipProviderNames.Add(provider.ProviderName);
}

Console.WriteLine($"Found {skipProviderNames.Count} providers in file {skipProvidersInFile}. " +
"These will not be included in the new database.");
}

var providerNames = GetLocalProviderNames(filter);
if (!providerNames.Any())
{
Console.WriteLine($"No providers found matching filter {filter}.");
return;
}

var providerNamesNotSkipped = providerNames.Where(name => !skipProviderNames.Contains(name)).ToList();

var numberSkipped = providerNames.Count - providerNamesNotSkipped.Count;
if (numberSkipped > 0)
{
Console.WriteLine($"{numberSkipped} providers were skipped due to being present in the specified database.");
}

using var dbContext = new EventProviderDbContext(path, readOnly: false);

LogProviderDetailHeader(providerNamesNotSkipped);

foreach (var providerName in providerNamesNotSkipped)
{
var provider = new EventMessageProvider(providerName, verboseLogging ? (s, log) => Console.WriteLine(s) : (s, log) => { });
var details = provider.LoadProviderDetails();
if (details != null)
{
dbContext.ProviderDetails.Add(details);

LogProviderDetails(details);

details = null;
}
}

Console.WriteLine();
Console.WriteLine("Saving database. Please wait...");

dbContext.SaveChanges();

Console.WriteLine("Done!");
}
}
//using EventLogExpert.Eventing.EventProviderDatabase;
//using EventLogExpert.Eventing.Providers;
//using System.CommandLine;

//namespace EventLogExpert.EventDbTool;

//public class CreateDatabaseCommand : DbToolCommand
//{
// public static Command GetCommand()
// {
// var createDatabaseCommand = new Command(
// name: "create",
// description: "Creates a new event database.");
// var fileArgument = new Argument<string>(
// name: "file",
// description: "File to create. Must have a .db extension.");
// var filterOption = new Option<string>(
// name: "--filter",
// description: "Only providers matching specified regex string will be added to the database.");
// var skipProvidersInFileOption = new Option<string>(
// name: "--skip-providers-in-file",
// description: "Any providers found in the specified database file will not be included in the new database. " +
// "For example, when creating a database of event providers for Exchange Server, it may be useful " +
// "to provide a database of all providers from a fresh OS install with no other products. That way, all the " +
// "OS providers are skipped, and only providers added by Exchange or other installed products " +
// "would be saved in the new database.");
// var verboseOption = new Option<bool>(
// name: "--verbose",
// description: "Enable verbose logging. May be useful for troubleshooting.");

// createDatabaseCommand.AddArgument(fileArgument);
// createDatabaseCommand.AddOption(filterOption);
// createDatabaseCommand.AddOption(skipProvidersInFileOption);
// createDatabaseCommand.AddOption(verboseOption);
// createDatabaseCommand.SetHandler((fileOptionValue, filterOptionValue, verboseOptionValue, skipProvidersInFileOption) =>
// {
// CreateDatabase(fileOptionValue, filterOptionValue, verboseOptionValue, skipProvidersInFileOption);
// },
// fileArgument, filterOption, verboseOption, skipProvidersInFileOption);

// return createDatabaseCommand;
// }

// public static void CreateDatabase(string path, string filter, bool verboseLogging, string skipProvidersInFile)
// {
// if (File.Exists(path))
// {
// Console.WriteLine($"Cannot create database because file already exists: {path}");
// return;
// }

// if (Path.GetExtension(path) != ".db")
// {
// Console.WriteLine("File extension must be .db.");
// return;
// }

// var skipProviderNames = new HashSet<string>();

// if (skipProvidersInFile != null)
// {
// if (!File.Exists(skipProvidersInFile))
// {
// Console.WriteLine($"File not found: {skipProvidersInFile}");
// }

// using var skipDbContext = new EventProviderDbContext(skipProvidersInFile, readOnly: true);
// foreach (var provider in skipDbContext.ProviderDetails)
// {
// skipProviderNames.Add(provider.ProviderName);
// }

// Console.WriteLine($"Found {skipProviderNames.Count} providers in file {skipProvidersInFile}. " +
// "These will not be included in the new database.");
// }

// var providerNames = GetLocalProviderNames(filter);
// if (!providerNames.Any())
// {
// Console.WriteLine($"No providers found matching filter {filter}.");
// return;
// }

// var providerNamesNotSkipped = providerNames.Where(name => !skipProviderNames.Contains(name)).ToList();

// var numberSkipped = providerNames.Count - providerNamesNotSkipped.Count;
// if (numberSkipped > 0)
// {
// Console.WriteLine($"{numberSkipped} providers were skipped due to being present in the specified database.");
// }

// using var dbContext = new EventProviderDbContext(path, readOnly: false);

// LogProviderDetailHeader(providerNamesNotSkipped);

// foreach (var providerName in providerNamesNotSkipped)
// {
// var provider = new EventMessageProvider(providerName, verboseLogging ? (s, log) => Console.WriteLine(s) : (s, log) => { });
// var details = provider.LoadProviderDetails();
// if (details != null)
// {
// dbContext.ProviderDetails.Add(details);

// LogProviderDetails(details);

// details = null;
// }
// }

// Console.WriteLine();
// Console.WriteLine("Saving database. Please wait...");

// dbContext.SaveChanges();

// Console.WriteLine("Done!");
// }
//}
24 changes: 11 additions & 13 deletions src/EventLogExpert.EventDbTool/DbToolCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,26 @@
// // Licensed under the MIT License.

using EventLogExpert.Eventing.Providers;
using System.Diagnostics.Eventing.Reader;
using System.Text.RegularExpressions;

namespace EventLogExpert.EventDbTool;

public class DbToolCommand
{
private static string _providerDetailFormat = "{0, -14} {1, 8} {2, 8} {3, 8} {4, 8} {5, 8}";

public static List<string> GetLocalProviderNames(string filter)
{
var session = new EventLogSession();
var providers = new List<string>(session.GetProviderNames().Distinct().OrderBy(name => name));
//public static List<string> GetLocalProviderNames(string filter)
//{
// var session = new EventLogSession();
// var providers = new List<string>(session.GetProviderNames().Distinct().OrderBy(name => name));

if (!string.IsNullOrEmpty(filter))
{
var regex = new Regex(filter, RegexOptions.IgnoreCase);
providers = providers.Where(p => regex.IsMatch(p)).ToList();
}
// if (!string.IsNullOrEmpty(filter))
// {
// var regex = new Regex(filter, RegexOptions.IgnoreCase);
// providers = providers.Where(p => regex.IsMatch(p)).ToList();
// }

return providers;
}
// return providers;
//}

public static void LogProviderDetailHeader(IEnumerable<string> providerNames)
{
Expand Down
9 changes: 6 additions & 3 deletions src/EventLogExpert.EventDbTool/Program.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
using System.CommandLine;
// // Copyright (c) Microsoft Corporation.
// // Licensed under the MIT License.

using System.CommandLine;

namespace EventLogExpert.EventDbTool;

Expand All @@ -8,11 +11,11 @@ static async Task<int> Main(string[] args)
{
var rootCommand = new RootCommand("Tool used to create and modify databases for use with EventLogExpert");

rootCommand.AddCommand(ShowLocalCommand.GetCommand());
//rootCommand.AddCommand(ShowLocalCommand.GetCommand());

rootCommand.AddCommand(ShowDatabaseCommand.GetCommand());

rootCommand.AddCommand(CreateDatabaseCommand.GetCommand());
//rootCommand.AddCommand(CreateDatabaseCommand.GetCommand());

rootCommand.AddCommand(MergeDatabaseCommand.GetCommand());

Expand Down
82 changes: 41 additions & 41 deletions src/EventLogExpert.EventDbTool/ShowLocalCommand.cs
Original file line number Diff line number Diff line change
@@ -1,50 +1,50 @@
// // Copyright (c) Microsoft Corporation.
// // Licensed under the MIT License.

using EventLogExpert.Eventing.Providers;
using System.CommandLine;
//using EventLogExpert.Eventing.Providers;
//using System.CommandLine;

namespace EventLogExpert.EventDbTool;
//namespace EventLogExpert.EventDbTool;

public class ShowLocalCommand : DbToolCommand
{
public static Command GetCommand()
{
var showProvidersCommand = new Command(
name: "showlocal",
description: "List the event providers on the local machine.");
var filterOption = new Option<string>(
name: "--filter",
description: "Filter for provider names matching the specified regex string.");
var verboseOption = new Option<bool>(
name: "--verbose",
description: "Verbose logging. May be useful for troubleshooting.");
showProvidersCommand.AddOption(filterOption);
showProvidersCommand.AddOption(verboseOption);
showProvidersCommand.SetHandler((filterOptionValue, verboseOptionValue) =>
{
ShowProviderInfo(filterOptionValue, verboseOptionValue);
},
filterOption, verboseOption);
//public class ShowLocalCommand : DbToolCommand
//{
// public static Command GetCommand()
// {
// var showProvidersCommand = new Command(
// name: "showlocal",
// description: "List the event providers on the local machine.");
// var filterOption = new Option<string>(
// name: "--filter",
// description: "Filter for provider names matching the specified regex string.");
// var verboseOption = new Option<bool>(
// name: "--verbose",
// description: "Verbose logging. May be useful for troubleshooting.");
// showProvidersCommand.AddOption(filterOption);
// showProvidersCommand.AddOption(verboseOption);
// showProvidersCommand.SetHandler((filterOptionValue, verboseOptionValue) =>
// {
// ShowProviderInfo(filterOptionValue, verboseOptionValue);
// },
// filterOption, verboseOption);

return showProvidersCommand;
}
// return showProvidersCommand;
// }

public static void ShowProviderInfo(string filter, bool verbose)
{
var providerNames = GetLocalProviderNames(filter);
// public static void ShowProviderInfo(string filter, bool verbose)
// {
// var providerNames = GetLocalProviderNames(filter);

LogProviderDetailHeader(providerNames);
foreach (var providerName in providerNames)
{
var provider = new EventMessageProvider(providerName, verbose ? (s, log) => Console.WriteLine(s) : (s, log) => { });
var details = provider.LoadProviderDetails();
if (details != null)
{
LogProviderDetails(details);
// LogProviderDetailHeader(providerNames);
// foreach (var providerName in providerNames)
// {
// var provider = new EventMessageProvider(providerName, verbose ? (s, log) => Console.WriteLine(s) : (s, log) => { });
// var details = provider.LoadProviderDetails();
// if (details != null)
// {
// LogProviderDetails(details);

details = null;
}
}
}
}
// details = null;
// }
// }
// }
//}
Loading

0 comments on commit 9b7b4c1

Please sign in to comment.