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(); } }
/// <summary> /// Called before a message is dispatched to any consumers. Sets the <see cref="MassTransitContext"/>. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="context"></param> /// <returns></returns> public Task PreConsume <T>(ConsumeContext <T> context) where T : class { var parentActivityId = context.Headers?.Get(Constants.ActivityIdHeader, string.Empty); var activity = new System.Diagnostics.Activity(Constants.ConsumeActivityName); if (!string.IsNullOrEmpty(parentActivityId)) { activity.SetParentId(parentActivityId); } var baggage = context.Headers?.Get <IEnumerable <KeyValuePair <string, string> > >(Constants.BaggageHeader); if (baggage?.Any() ?? false) { foreach (var item in baggage) { activity.AddBaggage(item.Key, item.Value); } } activity.Start(); _tracer?.StartSpanFromActivity(Constants.SpanConsumeOperationNamePrefix, activity, SpanKind.Consumer); return(Task.CompletedTask); }
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)); }
public async Task Activity_TenantInBaggage_TenantAccessorReturnsTenantId() { // Arrange var busControl = _serviceProvider.GetRequiredService <IBusControl>(); busControl.Start(); var tenantId = "7"; var activity = new System.Diagnostics.Activity("producer"); activity.AddBaggage(Constants.TenantIdBaggageKey, tenantId); activity.Start(); var expectedActivityRoot = activity.RootId; var messageId = Guid.NewGuid(); // Act await busControl.Publish(new MockMessage { Id = messageId }); await Task.Delay(500); // Assert Assert.Contains(messageId, State.Messages.Keys); Assert.Equal(expectedActivityRoot, State.Messages[messageId].CorrelationId); Assert.Single(State.Messages[messageId].TenantIds); Assert.Equal(tenantId, State.Messages[messageId].TenantIds.First()); }
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"]); }
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); }
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); }
private async Task RunAsync(IServiceProvider scopeServiceProvider, CancellationToken cancellationToken) { var messageRepository = scopeServiceProvider.GetRequiredService <IMessageRepository>(); var processType = await messageRepository.GetProcessType(_settings.ProcessType); if (processType == null) { throw new Exception($"No process type found for '{_settings.ProcessType}'."); } var isProcessActive = processType.IsActive; if (!isProcessActive) { _logger.LogWarning($"Process type {_settings.ProcessType} is not active."); } // Check if process active while (isProcessActive) { var requestActivity = new System.Diagnostics.Activity($"{ _settings.ProcessType }_Run"); requestActivity.Start(); var requestOperation = _telemetryClient.StartOperation <RequestTelemetry>(requestActivity); // Check if message(s) to process and is active var message = await CheckMessageToProcess(processType.ProcessTypeId, messageRepository); if (message != null) { // Process message await ProcessMessage(message, processType, messageRepository); } else { await Task.Delay(_settings.CheckUpdateTime, cancellationToken); } isProcessActive = await CheckProcessActive(_settings.ProcessType, messageRepository); _telemetryClient.StopOperation(requestOperation); } }
public async Task Activity_StartedAndAddedToContext_ReturnsActivityId() { // Arrange var busControl = _serviceProvider.GetRequiredService <IBusControl>(); busControl.Start(); var messageId = Guid.NewGuid(); var activity = new System.Diagnostics.Activity("producer"); activity.Start(); var expectedActivityRoot = activity.RootId; // Act await busControl.Publish(new MockMessage { Id = messageId }); await Task.Delay(500); // Assert Assert.Contains(messageId, State.Messages.Keys); Assert.Equal(expectedActivityRoot, State.Messages[messageId].CorrelationId); }
/// <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(); }