Example #1
0
        public void Start_ActivityOperationRootSpanChecks()
        {
            // Create an activity
            var activity = new System.Diagnostics.Activity("foo")
                           .SetIdFormat(System.Diagnostics.ActivityIdFormat.W3C)
                           .Start();

            try
            {
                // matching root operation name
                var spanBuilderMock = GetDefaultSpanBuilderMock();
                var shim            = new SpanBuilderShim(GetDefaultTracer(spanBuilderMock), "foo", new List <string> {
                    "foo"
                });
                shim.Start();
                spanBuilderMock.Verify(o => o.SetCreateChild(false), Times.Once);

                // mis-matched root operation name
                spanBuilderMock = GetDefaultSpanBuilderMock();
                shim            = new SpanBuilderShim(GetDefaultTracer(spanBuilderMock), "foo", new List <string> {
                    "bar"
                });
                shim.Start();
                spanBuilderMock.Verify(o => o.SetCreateChild(true), Times.Once);
            }
            finally
            {
                activity.Stop();
            }
        }
Example #2
0
        public async Task Activity_StartedBeforeHttpCall_ReturnsMatchingActivity()
        {
            // Arrange
            var activity = new System.Diagnostics.Activity("Tests");

            activity.Start();
            var expectedCorrelationId = activity.RootId;

            var testEndpointUrl = @$ "{WebFixture.BaseUrl}/api/mock";

            using var client = _fixture.HttpClientFactory.CreateClient();

            //Act
            var response = await client.GetAsync(testEndpointUrl);

            var responseBody = await response.Content.ReadAsStringAsync();

            activity.Stop();

            var actualCorrelationId = GetPropertyValue(responseBody, "correlationId");
            var actualTraceId       = GetPropertyValue(responseBody, "traceId");
            var actualSpanId        = GetPropertyValue(responseBody, "spanId");
            var actualOperationName = GetPropertyValue(responseBody, "operationName");

            // Assert
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            Assert.Equal(expectedCorrelationId, actualCorrelationId);
            Assert.False(string.IsNullOrWhiteSpace(actualTraceId));
            Assert.False(string.IsNullOrWhiteSpace(actualSpanId));
            Assert.False(string.IsNullOrWhiteSpace(actualOperationName));
        }
Example #3
0
        public void OnHasActivityStarted()
        {
            // Arrange
            System.Diagnostics.Activity.Current = null;
            LayoutRenderer.Register("activity", typeof(ActivityTraceLayoutRenderer));
            LayoutRenderer.Register("onhasactivity", typeof(OnHasActivityTraceLayoutRendererWrapper));
            var logFactory = new LogFactory();
            var logConfig  = new LoggingConfiguration(logFactory);
            var memTarget  = new NLog.Targets.MemoryTarget("memory");

            logConfig.AddRuleForAllLevels(memTarget);
            memTarget.Layout         = "${message} ${onhasactivity:inner=${activity:operationName}}";
            logFactory.Configuration = logConfig;
            var logger = logFactory.GetLogger(nameof(OnHasActivityNotActive));

            // Act
            var activity = new System.Diagnostics.Activity("World");

            try
            {
                activity.Start();
                logger.Info("Hello");

                // Assert
                Assert.NotNull(System.Diagnostics.Activity.Current);
                Assert.Single(memTarget.Logs);
                Assert.Equal("Hello World", memTarget.Logs[0]);
            }
            finally
            {
                activity.Stop();
            }
        }
Example #4
0
        public void HomeErrorReturnsActivityId()
        {
            var controller = new HomeController();
            var a          = new System.Diagnostics.Activity("dummy activity");

            a.Start();
            var result = controller.Error() as ViewResult;

            a.Stop();
            Assert.AreEqual(a.Id, result.ViewData["requestId"]);
        }
Example #5
0
        public void ActivityAccessor_ActivityStopped_ShouldStillReturnNewActivity()
        {
            var activity = new System.Diagnostics.Activity("Tests");

            activity.Start();
            var initialCorrelationId = activity.RootId;

            activity.Stop();

            // Act
            var correlationId = _fixture.ActivityContextAccessor.CorrelationId;

            // Assert
            Assert.NotEmpty(correlationId);
            Assert.NotEqual(initialCorrelationId, correlationId);
        }
Example #6
0
        public void ActivityAccessor_Activity_ReturnsCorrelationId()
        {
            // Arrange
            var activity = new System.Diagnostics.Activity("Tests");

            activity.Start();

            var expectedCorrelationId = activity.RootId;

            // Act
            var actualCorrelationId = _fixture.ActivityContextAccessor.CorrelationId;

            activity.Stop();

            // Assert
            Assert.Equal(expectedCorrelationId, actualCorrelationId);
        }
Example #7
0
        /// <summary>
        /// Invoke Grain call context.
        /// </summary>
        /// <param name="context">The <see cref="IOutgoingGrainCallContext"/>.</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public async Task Invoke(IIncomingGrainCallContext context)
        {
            var activity = new System.Diagnostics.Activity(OrleansDistributedTracingConstants.IncomingGrainFilterActivityName);

            if (RequestContext.Get(Constants.ActivityHeader) is string traceId)
            {
                activity.SetParentId(traceId);
            }

            if (RequestContext.Get(Constants.BaggageHeader) is IEnumerable <KeyValuePair <string, string> > baggage)
            {
                foreach (var item in baggage)
                {
                    activity.AddBaggage(item.Key, item.Value);
                }
            }

            activity.Start();

            await context.Invoke();

            activity.Stop();
        }
Example #8
0
        private Data Load()
        {
            var activity = new System.Diagnostics.Activity("LoadData").Start();

            using (LogContext.PushProperty("TraceId", activity.TraceId.ToHexString(), true))
            {
                try
                {
                    var loaderTask = _loader.LoadAsync(CancellationToken.None);
                    HasLoadedData = loaderTask.Wait(Loaders.DataLoader.Timeout);

                    if (!HasLoadedData)
                    {
                        throw new InvalidDataException($"Timeout loading data");
                    }

                    var data = loaderTask.Result;
                    if (!data.IsLoaded)
                    {
                        throw new InvalidDataException($"Data not loaded");
                    }

                    return(data);
                }
                catch (Exception e)
                {
                    Logger.Fatal(e, "Timetable not loaded");
                    throw;
                }
                finally
                {
                    activity.Stop();
                    Logger.Information("Data loaded in: {duration}ms", activity.Duration.TotalMilliseconds);
                }
            }
        }