Beispiel #1
0
        public void ContextFactoryNull()
        {
            var config = new AspNetCoreCorrelationConfiguration()
                         .WithContextFactory(null);

            Assert.Throws <ArgumentNullException>(() => ContextTracingInstrumentation.Enable(config));
        }
Beispiel #2
0
        public void DefaultConfiguration()
        {
            var config = new AspNetCoreCorrelationConfiguration();

            Assert.NotNull(config.ContextFactory);
            Assert.NotNull(config.ContextInjectors);
            Assert.True(config.InstrumentOutgoingRequests);

            Assert.True(config.ContextInjectors.First() is CorrelationContextInjector);
        }
Beispiel #3
0
        public void IConfigurationValidEndpointFilter()
        {
            var configObj = new { EndpointFilter = new { Allow = true, Endpoints = new [] { "1.com", "2.com" } } };

            using (var configFile = new TemporaryFile())
            {
                configFile.Write(JsonConvert.SerializeObject(configObj));

                var config = new AspNetCoreCorrelationConfiguration(build(configFile.FilePath));
                Assert.False(config.EndpointFilter.Validate(new Uri("http://3.com")));
                Assert.True(config.EndpointFilter.Validate(new Uri("http://2.com")));
            }
        }
Beispiel #4
0
        public void IConfigurationValidHeaders()
        {
            var configObj = new { Headers = new { CorrelationIdHeaderName = "correlation", RequestIdHeaderName = "request" } };

            using (var configFile = new TemporaryFile())
            {
                configFile.Write(JsonConvert.SerializeObject(configObj));

                var config = new AspNetCoreCorrelationConfiguration(build(configFile.FilePath));
                Assert.True(config.InstrumentOutgoingRequests);
                Assert.Equal("correlation", CorrelationHeaderInfo.CorrelationIdHeaderName);
                Assert.Equal("request", CorrelationHeaderInfo.RequestIdHeaderName);
            }
        }
Beispiel #5
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime applicationLifetime)
        {
            loggerFactory.AddDebug();

            var config = new AspNetCoreCorrelationConfiguration(Configuration.GetSection("Correlation"))
            {
                RequestNotifier = new OutgoingRequestNotifier()
            };
            var instrumentation = ContextTracingInstrumentation.Enable(config);

            applicationLifetime.ApplicationStopped.Register(() => instrumentation?.Dispose());

            app.UseMiddleware <IncomingRequestMiddleware>();
            app.UseMvc();
        }
Beispiel #6
0
        public void IConfigurationOutRequests()
        {
            var configObj = new { InstrumentOutgoingRequests = false };

            using (var configFile = new TemporaryFile())
            {
                configFile.Write(JsonConvert.SerializeObject(configObj));

                var config = new AspNetCoreCorrelationConfiguration(build(configFile.FilePath));
                Assert.NotNull(config.ContextFactory);
                Assert.NotNull(config.ContextInjectors);
                Assert.NotNull(config.EndpointFilter);
                Assert.False(config.InstrumentOutgoingRequests);

                Assert.True(config.ContextInjectors.First() is CorrelationContextInjector);
            }
        }
Beispiel #7
0
        public async Task SuccessFlowNotifier()
        {
            var notifier = new RequestNotifier();
            var config   = new AspNetCoreCorrelationConfiguration().WithOutgoingRequestNotifier(notifier);

            ContextTracingInstrumentation.Enable(config);

            var correlationId = Guid.NewGuid().ToString();

            ContextResolver.SetRequestContext(new CorrelationContext(correlationId));

            var client = new HttpClient();
            await client.GetAsync("http://google.com");

            Assert.True(notifier.BeforeWasCalled);
            Assert.True(notifier.AfterWasCalled);
        }
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime applicationLifetime)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            var config = new AspNetCoreCorrelationConfiguration
            {
                RequestNotifier = new OutgoingRequestNotifier()
            };
            var instrumentation = ContextTracingInstrumentation.Enable(config);

            applicationLifetime.ApplicationStopped.Register(() => { instrumentation?.Dispose(); });

            app.UseApplicationInsightsRequestTelemetry();
            app.UseApplicationInsightsExceptionTelemetry();

            app.UseMvc();
        }
Beispiel #9
0
        public async Task SuccessFlowCustomInjector()
        {
            var injector = new InjectorMock();

            var config = new AspNetCoreCorrelationConfiguration()
                         .WithContextInjectors(new[] { injector });

            ContextTracingInstrumentation.Enable(config);

            var correlationId = Guid.NewGuid().ToString();

            ContextResolver.SetRequestContext(new CorrelationContext(correlationId));

            var client = new HttpClient();
            await client.GetAsync("http://bing.com");

            Assert.True(injector.WasCalled);
        }
Beispiel #10
0
        public async Task SuccessFlowCustomInjectorBlockedEndpoint()
        {
            var injector  = new InjectorMock();
            var validator = new EndpointValidator();

            validator.AddEndpoint("google.com");

            var config = new AspNetCoreCorrelationConfiguration()
                         .WithEndpointValidator(validator);

            ContextTracingInstrumentation.Enable(config);

            var correlationId = Guid.NewGuid().ToString();

            ContextResolver.SetRequestContext(new CorrelationContext(correlationId));

            var client = new HttpClient();
            await client.GetAsync("http://google.com");

            Assert.False(injector.WasCalled);
        }
Beispiel #11
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime applicationLifetime)
        {
            loggerFactory.WithFilter(new FilterLoggerSettings
            {
//                    {"Microsoft", LogLevel.Warning},
//                    {"System", LogLevel.Warning}
            })
            .AddDebug()
            .AddElasicSearch();

            var configuration = new AspNetCoreCorrelationConfiguration(Configuration.GetSection("Correlation"))
            {
                RequestNotifier = new OutgoingRequestNotifier(loggerFactory.CreateLogger <OutgoingRequestNotifier>())
            };
            var instrumentation         = ContextTracingInstrumentation.Enable(configuration);
            var incomingRequestsHandler = registerIncomingRequestHandler(loggerFactory);

            applicationLifetime.ApplicationStopped.Register(() =>
            {
                instrumentation?.Dispose();
                incomingRequestsHandler?.Dispose();
            });
            app.UseMvc();
        }