From 8b5e9dbc7601a0b6880dc9c361eefbce168c90fb Mon Sep 17 00:00:00 2001 From: Sean McArdle Date: Mon, 17 Jul 2017 16:57:14 -0700 Subject: [PATCH] Basically works the way I want. --- EventPump/EventPump.cs | 96 ++++++++++++++++++++++++++++++++++++++++++++++ EventPump/EventPump.csproj | 25 +++++++++++- EventPump/FodyWeavers.xml | 4 ++ EventPump/Program.cs | 88 ------------------------------------------ EventPump/packages.config | 2 + 5 files changed, 126 insertions(+), 89 deletions(-) create mode 100644 EventPump/EventPump.cs create mode 100644 EventPump/FodyWeavers.xml delete mode 100644 EventPump/Program.cs diff --git a/EventPump/EventPump.cs b/EventPump/EventPump.cs new file mode 100644 index 0000000..a8a29ac --- /dev/null +++ b/EventPump/EventPump.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.Collections.Concurrent; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Diagnostics; +using Mono.Options; +using Newtonsoft.Json; + + +namespace EventPump +{ + class EventPump + { + static ConcurrentQueue events = new ConcurrentQueue(); + + volatile bool RunCollect; + static List logs = new List(); + static List event_ids = new List(); + static List watching_logs = new List(); + static int verbose = 0; + static bool showHelp = false; + + static void Main(string[] args) + { + var p = new OptionSet() + .Add("v", "Verbosely print internal events.", v => ++verbose) + .Add("log=", "Specify log to collect from, may be used multiple times.", l => logs.Add(l)) + .Add("id=", "Comma separated list of event IDs to filter on", id => { + string[] elements = id.Split(','); + foreach (var i in elements) { + int x = -1; + int.TryParse(i, out x); + if (x > 0) event_ids.Add(x); + } + }) + .Add("h|?|help", "Show this help.", v => showHelp = true); + p.Parse(args); + + if (showHelp) { + var helpText = @"Usage: EventPump.exe -log Application -id 63,25 +the -id option may contain multiple values separated by +commas but no whitespace. +"; + Console.WriteLine(); + Console.WriteLine(helpText); + Console.WriteLine(); + p.WriteOptionDescriptions(Console.Out); + Console.WriteLine(); + + return; + } + +#if DEBUG + foreach (var l in logs) Console.WriteLine("Log: {0}", l); + foreach (var i in event_ids) Console.WriteLine("ID's: {0}", i); +#endif + + foreach (var l in logs) { + var el = new EventLog(l); + el.EntryWritten += (s, e) => { + if (event_ids.Any(x => x == e.Entry.InstanceId || x == e.Entry.EventID)) { + events.Enqueue(e.Entry); + } else if (event_ids.Count == 0) { + events.Enqueue(e.Entry); + } + }; + el.EnableRaisingEvents = true; + watching_logs.Add(el); + } + + while (true) { + if (events.Count > 0) { + EventLogEntry e; + events.TryDequeue(out e); + if (e != null) { + Dictionary eventEntry = new Dictionary(); ; + eventEntry.Add("TimeGenerated", e.TimeGenerated); + eventEntry.Add("EventID", e.EventID); + eventEntry.Add("InstanceID", e.InstanceId); + eventEntry.Add("EntryType", e.EntryType); + eventEntry.Add("EventSource", e.Source); + eventEntry.Add("MachineName", e.MachineName); + eventEntry.Add("UserName", e.UserName); + eventEntry.Add("Message", e.Message); + Console.WriteLine(JsonConvert.SerializeObject(eventEntry)); + } + } + else { + System.Threading.Thread.Sleep(100); + } + } + } + } +} diff --git a/EventPump/EventPump.csproj b/EventPump/EventPump.csproj index 8654d65..dac2eea 100644 --- a/EventPump/EventPump.csproj +++ b/EventPump/EventPump.csproj @@ -11,6 +11,8 @@ v4.5.2 512 true + + AnyCPU @@ -32,6 +34,10 @@ 4 + + ..\packages\Costura.Fody.1.6.2\lib\dotnet\Costura.dll + False + ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll @@ -46,12 +52,29 @@ - + + + + + + + Newtonsoft.Json.dll + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/EventPump/FodyWeavers.xml b/EventPump/FodyWeavers.xml new file mode 100644 index 0000000..c6e1b7c --- /dev/null +++ b/EventPump/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/EventPump/Program.cs b/EventPump/Program.cs deleted file mode 100644 index c407dff..0000000 --- a/EventPump/Program.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.Concurrent; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Diagnostics; -using Mono.Options; - - -namespace EventPump -{ - class Program - { - - - static void Main(string[] args) - { - - - Console.WriteLine("Press Enter"); - Console.ReadLine(); - } - - - } - - class EventCollector - { - volatile bool RunCollect = true; - ConcurrentQueue events = new ConcurrentQueue(); - List logs = new List(); - List event_ids = new List(); - CollectorStatus status; - int verbose = 0; - - - EventCollector(string[] args) - { - status = CollectorStatus.starting; - - var p = new OptionSet() - .Add("v", v => ++verbose) - .Add("log=", l => logs.Add(l)) - .Add("id=", id => - { - string[] elements = id.Split(','); - foreach (var i in elements) - { - int x = -1; - int.TryParse(i, out x); - if (x > 0) event_ids.Add(x); - } - }); - p.Parse(args); - } - - - void Start() { - status = CollectorStatus.running; - - Task.Run(() => { - while (RunCollect) - { - - } - }); - } - - - void Stop() { - RunCollect = false; - } - - - void Pause() { - status = CollectorStatus.paused; - } - } - - enum CollectorStatus - { - running, - paused, - starting, - stopping, - } -} diff --git a/EventPump/packages.config b/EventPump/packages.config index 810e559..75afd5f 100644 --- a/EventPump/packages.config +++ b/EventPump/packages.config @@ -1,4 +1,6 @@  + + \ No newline at end of file