/
DiagnosticListenerObserver.cs
38 lines (33 loc) · 1.22 KB
/
DiagnosticListenerObserver.cs
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
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace DiagnosticSourceDemo.Processors
{
public class DiagnosticListenerObserver : IObserver<DiagnosticListener>
{
private readonly List<IDisposable> _subscriptions;
private readonly IEnumerable<IDiagnosticProcessor> _diagnosticProcessors;
public DiagnosticListenerObserver(IEnumerable<IDiagnosticProcessor> diagnosticProcessors)
{
_subscriptions = new List<IDisposable>();
_diagnosticProcessors = diagnosticProcessors;
}
public void OnCompleted()
{
_subscriptions.ForEach(x => x.Dispose());
_subscriptions.Clear();
}
public void OnError(Exception error)
{
// Method intentionally left empty.
}
public void OnNext(DiagnosticListener value)
{
var diagnosticProcessor = _diagnosticProcessors?.FirstOrDefault(_ => _.ListenerName == value.Name);
if (diagnosticProcessor == null) return;
var subscription = value.Subscribe(new DiagnosticEventObserver(diagnosticProcessor));
_subscriptions.Add(subscription);
}
}
}