static void Main() { oldCol = Console.ForegroundColor; SetConsoleCtrlHandler(ExitHandler, true); try { Console.WriteLine("**** Create EventSources ****"); SourceA = MetricsFactory.GetCustomMetricsService("SourceA", 1.0, true); SourceB = MetricsFactory.GetCustomMetricsService("SourceB", 3.0, true); SourceC = MetricsFactory.GetCustomMetricsService("SourceC", 7.0, true); Console.WriteLine("**** Issue Description ****"); Console.WriteLine( "Each EventSource has is own Default Listener but it appears that ALL EventListeners get ALL EventCounter events.\r\n" + "So rather than having a single highlight color per event to indicate the expected filtering,\r\n" + "the following event logging will show multiple highlight colors within a single line:"); Console.WriteLine("***************************"); var random = new Random(); for (int i = 0; i <= 40000; i++) { SleepingBeauty(random.Next(10, 200)); } Console.ReadKey(); } finally { Console.ForegroundColor = oldCol; } }
protected override void OnEventWritten(EventWrittenEventArgs eventData) { lock (_outputLockObj) { var counterData = eventData.ToEventCounterData(); var oldCol = Console.ForegroundColor; if (counterData == null) { Console.ForegroundColor = MetricsFactory.GetConsoleColor(this.GetHashCode()); Console.Write($"EL{this.GetHashCode():x8}"); Console.ForegroundColor = oldCol; Console.Write($" RX ED{eventData.GetHashCode():x8} => "); Console.ForegroundColor = MetricsFactory.GetConsoleColor(eventData.EventSource.GetHashCode()); Console.Write($"ES{eventData.EventSource.GetHashCode():x8}:{eventData.EventName}"); Console.ForegroundColor = oldCol; Console.WriteLine($"{eventData.Payload.FirstOrDefault().ToString()} "); return; } // Only write to console if actual data has been reported if (counterData?.Count == 0) { return; } // ReportOccurence calls pass in NaN for the metric value so we can publish different // patterns for ReportOccurence and ReportMetric if (float.IsNaN(counterData.Min)) { Console.ForegroundColor = MetricsFactory.GetConsoleColor(this.GetHashCode()); Console.Write($"EL{this.GetHashCode():x8}"); Console.ForegroundColor = oldCol; Console.Write($" RX ED{counterData.EventHash:x8} => "); Console.ForegroundColor = MetricsFactory.GetConsoleColor(eventData.EventSource.GetHashCode()); Console.Write( $"ES{eventData.EventSource.GetHashCode():x8}:'{counterData.EventSource}/{counterData.EventName}'"); Console.ForegroundColor = oldCol; Console.WriteLine($" => " + $"{counterData.Name} " + $"Count {counterData.Count}, " + $"IntervalSec: {counterData.IntervalSec}"); } else { Console.ForegroundColor = MetricsFactory.GetConsoleColor(this.GetHashCode()); Console.Write($"EL{this.GetHashCode():x8}"); Console.ForegroundColor = oldCol; Console.Write($" RX ED{counterData.EventHash:x8} => "); Console.Write(":"); Console.ForegroundColor = MetricsFactory.GetConsoleColor(eventData.EventSource.GetHashCode()); Console.Write( $"ES{eventData.EventSource.GetHashCode():x8}:'{counterData.EventSource}/{counterData.EventName}'"); Console.ForegroundColor = oldCol; Console.WriteLine($" => " + $"{counterData.Name} " + $"Min: {counterData.Min}, " + $"Max: {counterData.Max}, " + $"Count {counterData.Count}, " + $"Mean {counterData.Mean}, " + $"StandardDeviation: {counterData.StandardDeviation}, " + $"IntervalSec: {counterData.IntervalSec}"); } } }