コード例 #1
0
 public HttpInListener(string name, AspNetCoreInstrumentationOptions options, ActivitySourceAdapter activitySource)
     : base(name)
 {
     this.hostingSupportsW3C = typeof(HttpRequest).Assembly.GetName().Version.Major >= 3;
     this.options            = options ?? throw new ArgumentNullException(nameof(options));
     this.activitySource     = activitySource;
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="MassTransitInstrumentation"/> class.
        /// </summary>
        /// <param name="activitySource">ActivitySource adapter instance.</param>
        /// <param name="options">Instrumentation options.</param>
        public MassTransitInstrumentation(ActivitySourceAdapter activitySource, MassTransitInstrumentationOptions options)
        {
            var diagnosticListener = new MassTransitDiagnosticListener(activitySource, options);

            this.diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(diagnosticListener, null);
            this.diagnosticSourceSubscriber.Subscribe();
        }
コード例 #3
0
        public QuartzJobInstrumentation(ActivitySourceAdapter activitySource, QuartzInstrumentationOptions options)
        {
            var listener = new QuartzDiagnosticListener(DiagnosticHeaders.DefaultListenerName, options, activitySource);

            diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(listener, null);
            diagnosticSourceSubscriber.Subscribe();
        }
コード例 #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AspNetInstrumentation"/> class.
 /// </summary>
 /// <param name="activitySource">ActivitySource adapter instance.</param>
 /// <param name="options">Configuration options for ASP.NET instrumentation.</param>
 public AspNetInstrumentation(ActivitySourceAdapter activitySource, AspNetInstrumentationOptions options)
 {
     this.diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(
         name => new HttpInListener(name, options, activitySource),
         listener => listener.Name == AspNetDiagnosticListenerName,
         null);
     this.diagnosticSourceSubscriber.Subscribe();
 }
コード例 #5
0
        public void ActivitySourceAdapterValidatesConstructor()
        {
            // Sampler null
            Assert.Throws <ArgumentNullException>(() => new ActivitySourceAdapter(null, this.testProcessor));

            // Processor null. This is not expected to throw as processor can
            // be null and can be later added.
            var adapter = new ActivitySourceAdapter(this.testSampler, null);
        }
コード例 #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GrpcClientInstrumentation"/> class.
        /// </summary>
        /// <param name="activitySource">ActivitySource adapter instance.</param>
        public GrpcClientInstrumentation(ActivitySourceAdapter activitySource)
        {
            if (activitySource == null)
            {
                throw new ArgumentNullException(nameof(activitySource));
            }

            this.diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(new GrpcClientDiagnosticListener(activitySource), null);
            this.diagnosticSourceSubscriber.Subscribe();
        }
コード例 #7
0
        public GrpcClientDiagnosticListener(ActivitySourceAdapter activitySource)
            : base("Grpc.Net.Client")
        {
            if (activitySource == null)
            {
                throw new ArgumentNullException(nameof(activitySource));
            }

            this.activitySource = activitySource;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ElasticsearchClientInstrumentation"/> class.
        /// </summary>
        /// <param name="activitySource">ActivitySource adapter instance.</param>
        /// <param name="options">Configuration options for Elasticsearch client instrumentation.</param>
        public ElasticsearchClientInstrumentation(ActivitySourceAdapter activitySource, ElasticsearchClientInstrumentationOptions options)
        {
            if (activitySource == null)
            {
                throw new ArgumentNullException(nameof(activitySource));
            }

            this.diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(new ElasticsearchRequestPipelineDiagnosticListener(activitySource, options), null);
            this.diagnosticSourceSubscriber.Subscribe();
        }
        public ElasticsearchRequestPipelineDiagnosticListener(ActivitySourceAdapter activitySource, ElasticsearchClientInstrumentationOptions options)
            : base("Elasticsearch.Net.RequestPipeline")
        {
            if (activitySource == null)
            {
                throw new ArgumentNullException(nameof(activitySource));
            }

            this.activitySource = activitySource;
            this.options        = options;
        }
コード例 #10
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SqlClientInstrumentation"/> class.
        /// </summary>
        /// <param name="activitySource">ActivitySource adapter instance.</param>
        /// <param name="options">Configuration options for sql instrumentation.</param>
        public SqlClientInstrumentation(ActivitySourceAdapter activitySource, SqlClientInstrumentationOptions options)
        {
            this.diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(
                name => new SqlClientDiagnosticListener(name, options, activitySource),
                listener => listener.Name == SqlClientDiagnosticListenerName,
                null);
            this.diagnosticSourceSubscriber.Subscribe();

#if NETFRAMEWORK
            this.sqlEventSourceListener = new SqlEventSourceListener(options);
#endif
        }
コード例 #11
0
        public OTelMediatRInstrumentation(ActivitySourceAdapter activitySource)
        {
            if (activitySource == null)
            {
                throw new ArgumentNullException(nameof(activitySource));
            }

            _diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(
                name => new OTelMediatRDiagnosticListener(OTelMediatROptions.OTelMediatRName, activitySource),
                listener =>
            {
                return(listener.Name.Contains(OTelMediatROptions.OTelMediatRName));
            },
                null
                );

            _diagnosticSourceSubscriber?.Subscribe();
        }
コード例 #12
0
        public HttpHandlerDiagnosticListener(HttpClientInstrumentationOptions options, ActivitySourceAdapter activitySource)
            : base("HttpHandlerDiagnosticListener")
        {
            var framework = Assembly
                            .GetEntryAssembly()?
                            .GetCustomAttribute <TargetFrameworkAttribute>()?
                            .FrameworkName;

            // Depending on the .NET version/flavor this will look like
            // '.NETCoreApp,Version=v3.0', '.NETCoreApp,Version = v2.2' or '.NETFramework,Version = v4.7.1'

            if (framework != null)
            {
                var match = CoreAppMajorVersionCheckRegex.Match(framework);

                this.httpClientSupportsW3C = match.Success && int.Parse(match.Groups[1].Value, CultureInfo.InvariantCulture) >= 3;
            }

            this.options        = options;
            this.activitySource = activitySource;
        }
コード例 #13
0
        /// <summary>
        /// Enables OpenTelemetry.
        /// </summary>
        /// <param name="configureOpenTelemetryBuilder">Function that configures OpenTelemetryBuilder.</param>
        /// <returns><see cref="OpenTelemetrySdk"/> instance which can be disposed on application shutdown.</returns>
        /// <remarks>
        /// Basic implementation only. Most logic from TracerBuilder will be ported here.
        /// </remarks>
        public static OpenTelemetrySdk EnableOpenTelemetry(Action <OpenTelemetryBuilder> configureOpenTelemetryBuilder)
        {
            var openTelemetryBuilder = new OpenTelemetryBuilder();

            configureOpenTelemetryBuilder(openTelemetryBuilder);

            var             openTelemetrySDK = new OpenTelemetrySdk();
            ActivitySampler sampler          = openTelemetryBuilder.Sampler ?? new AlwaysOnActivitySampler();

            ActivityProcessor activityProcessor;

            if (openTelemetryBuilder.ProcessingPipelines == null || !openTelemetryBuilder.ProcessingPipelines.Any())
            {
                // if there are no pipelines are configured, use noop processor
                activityProcessor = new NoopActivityProcessor();
            }
            else if (openTelemetryBuilder.ProcessingPipelines.Count == 1)
            {
                // if there is only one pipeline - use it's outer processor as a
                // single processor on the tracerSdk.
                var processorFactory = openTelemetryBuilder.ProcessingPipelines[0];
                activityProcessor = processorFactory.Build();
            }
            else
            {
                // if there are more pipelines, use processor that will broadcast to all pipelines
                var processors = new ActivityProcessor[openTelemetryBuilder.ProcessingPipelines.Count];

                for (int i = 0; i < openTelemetryBuilder.ProcessingPipelines.Count; i++)
                {
                    processors[i] = openTelemetryBuilder.ProcessingPipelines[i].Build();
                }

                activityProcessor = new BroadcastActivityProcessor(processors);
            }

            openTelemetrySDK.resource = openTelemetryBuilder.Resource;

            var activitySource = new ActivitySourceAdapter(sampler, activityProcessor, openTelemetrySDK.resource);

            if (openTelemetryBuilder.InstrumentationFactories != null)
            {
                foreach (var instrumentation in openTelemetryBuilder.InstrumentationFactories)
                {
                    openTelemetrySDK.instrumentations.Add(instrumentation.Factory(activitySource));
                }
            }

            // This is what subscribes to Activities.
            // Think of this as the replacement for DiagnosticListener.AllListeners.Subscribe(onNext => diagnosticListener.Subscribe(..));
            openTelemetrySDK.listener = new ActivityListener
            {
                // Callback when Activity is started.
                ActivityStarted = (activity) =>
                {
                    if (activity.IsAllDataRequested)
                    {
                        activity.SetResource(openTelemetrySDK.resource);
                    }

                    activityProcessor.OnStart(activity);
                },

                // Callback when Activity is started.
                ActivityStopped = activityProcessor.OnEnd,

                // Function which takes ActivitySource and returns true/false to indicate if it should be subscribed to
                // or not
                ShouldListenTo = (activitySource) => openTelemetryBuilder.ActivitySourceNames?.Contains(activitySource.Name.ToUpperInvariant()) ?? false,

                // The following parameter is not used now.
                GetRequestedDataUsingParentId = (ref ActivityCreationOptions <string> options) => ActivityDataRequest.AllData,

                // This delegate informs ActivitySource about sampling decision when the parent context is an ActivityContext.
                GetRequestedDataUsingContext = (ref ActivityCreationOptions <ActivityContext> options) => ComputeActivityDataRequest(options, sampler),
            };

            ActivitySource.AddActivityListener(openTelemetrySDK.listener);
            openTelemetrySDK.activityProcessor = activityProcessor;
            return(openTelemetrySDK);
        }
コード例 #14
0
 public OTelMediatRDiagnosticListener(string name, ActivitySourceAdapter activitySource) : base(name)
 {
     _activitySource = activitySource;
 }
コード例 #15
0
 /// <summary>
 /// Initializes a new instance of the <see cref="HttpClientInstrumentation"/> class.
 /// </summary>
 /// <param name="activitySource">ActivitySource adapter instance.</param>
 /// <param name="options">Configuration options for dependencies instrumentation.</param>
 public HttpClientInstrumentation(ActivitySourceAdapter activitySource, HttpClientInstrumentationOptions options)
 {
     this.diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(new HttpHandlerDiagnosticListener(options, activitySource), options.EventFilter);
     this.diagnosticSourceSubscriber.Subscribe();
 }
コード例 #16
0
 /// <summary>
 /// Initializes a new instance of the <see cref="HttpClientInstrumentation"/> class.
 /// </summary>
 /// <param name="activitySource">ActivitySource adapter instance.</param>
 public HttpClientInstrumentation(ActivitySourceAdapter activitySource)
     : this(activitySource, new HttpClientInstrumentationOptions())
 {
 }
コード例 #17
0
 public QuartzDiagnosticListener(string sourceName, QuartzInstrumentationOptions options, ActivitySourceAdapter activitySource)
     : base(sourceName)
 {
     this.options        = options ?? throw new ArgumentNullException(nameof(options));
     this.activitySource = activitySource;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="MassTransitInstrumentation"/> class.
 /// </summary>
 /// <param name="activitySource">ActivitySource adapter instance.</param>
 public MassTransitInstrumentation(ActivitySourceAdapter activitySource)
     : this(activitySource, new MassTransitInstrumentationOptions())
 {
 }
 public MassTransitDiagnosticListener(ActivitySourceAdapter activitySource, MassTransitInstrumentationOptions options)
     : base("MassTransit")
 {
     this.activitySource = activitySource;
     this.options        = options;
 }
 public SendMessageListener(ActivitySourceAdapter activitySource, NServiceBusInstrumentationOptions options)
     : base("NServiceBus.Extensions.Diagnostics.OutgoingPhysicalMessage")
 {
     _activitySource = activitySource;
     _options        = options;
 }
コード例 #21
0
 public TestInstrumentation(ActivitySourceAdapter adapter)
 {
     this.adapter = adapter;
 }
コード例 #22
0
 public TestInstrumentation(ActivitySourceAdapter adapter)
 {
     this.Adapter    = adapter;
     this.IsDisposed = false;
 }
コード例 #23
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AspNetCoreInstrumentation"/> class.
 /// </summary>
 /// <param name="activitySource">ActivitySource adapter instance.</param>
 /// <param name="options">Configuration options for ASP.NET Core instrumentation.</param>
 public AspNetCoreInstrumentation(ActivitySourceAdapter activitySource, AspNetCoreInstrumentationOptions options)
 {
     this.diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(new HttpInListener("Microsoft.AspNetCore", options, activitySource), null);
     this.diagnosticSourceSubscriber.Subscribe();
 }
コード例 #24
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AspNetCoreInstrumentation"/> class.
 /// </summary>
 /// <param name="activitySource">ActivitySource adapter instance.</param>
 public AspNetCoreInstrumentation(ActivitySourceAdapter activitySource)
     : this(activitySource, new AspNetCoreInstrumentationOptions())
 {
 }
コード例 #25
0
 /// <summary>
 /// Initializes a new instance of the <see cref="HttpClientInstrumentation"/> class.
 /// </summary>
 /// <param name="activitySourceAdapter">ActivitySource adapter instance.</param>
 /// <param name="options">Configuration options for HTTP client instrumentation.</param>
 public HttpClientInstrumentation(ActivitySourceAdapter activitySourceAdapter, HttpClientInstrumentationOptions options)
 {
     this.diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(new HttpHandlerDiagnosticListener(options, activitySourceAdapter), (activityName, arg1, arg2) => options?.EventFilter(activityName, arg1) ?? true);
     this.diagnosticSourceSubscriber.Subscribe();
 }
 public NServiceBusSendInstrumentation(ActivitySourceAdapter activitySource, NServiceBusInstrumentationOptions options)
 {
     _diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(
         new SendMessageListener(activitySource, options), null);
     _diagnosticSourceSubscriber.Subscribe();
 }
コード例 #27
0
 public QuartzJobInstrumentation(ActivitySourceAdapter activitySource)
     : this(activitySource, new QuartzInstrumentationOptions())
 {
 }
コード例 #28
0
 public HttpInListener(string name, AspNetInstrumentationOptions options, ActivitySourceAdapter activitySource)
     : base(name)
 {
     this.options        = options ?? throw new ArgumentNullException(nameof(options));
     this.activitySource = activitySource;
 }
コード例 #29
0
 public ActivitySourceAdapterTest()
 {
     this.testSampler           = new TestSampler();
     this.testProcessor         = new TestActivityProcessor();
     this.activitySourceAdapter = new ActivitySourceAdapter(this.testSampler, this.testProcessor, this.testResource);
 }
コード例 #30
0
 public MongoDBCommandAdapter(ActivitySourceAdapter activitySource, MongoDBInstrumentationOptions options)
 {
     _diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(new CommandListener(activitySource, options), null);
     _diagnosticSourceSubscriber.Subscribe();
 }