//----------------------------------------------------------------------------- // // Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"). // You may not use this file except in compliance with the License. // A copy of the License is located at // // http://aws.amazon.com/apache2.0 // // or in the "license" file accompanying this file. This file is distributed // on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either // express or implied. See the License for the specific language governing // permissions and limitations under the License. // //----------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; namespace Amazon.XRay.Recorder.AutoInstrumentation { /// /// Class for diagnostic observer /// public class DiagnosticListenerObserver : IObserver, IDisposable { private readonly IList _diagnosticListeners; private readonly List _subscriptions = new List(); public DiagnosticListenerObserver(IList diagnosticListeners) { _diagnosticListeners = diagnosticListeners; } public void Dispose() { foreach (var sub in _subscriptions) { sub.Dispose(); } _subscriptions.Clear(); } /// /// Subscribe diagnostic lsitener as long as its name matches . /// public void OnNext(DiagnosticListener diagnosticListener) { foreach (var _diagnosticListener in _diagnosticListeners) { if (diagnosticListener.Name == _diagnosticListener.Name) { var subscription = diagnosticListener.Subscribe(_diagnosticListener); _subscriptions.Add(subscription); break; } } } public void OnCompleted() { Dispose(); } public void OnError(Exception error) { } } }