private static Activity?StartActivity(OutgoingStepContext context) { var parentActivity = Activity.Current; if (parentActivity == null) { return(null); } Activity?activity = null; if (RebusDiagnosticConstants.ActivitySource.HasListeners()) { var message = context.Load <TransportMessage>(); var messageType = message.GetMessageType(); var messageWrapper = new TransportMessageWrapper(message); var activityKind = messageWrapper.GetIntentOption() == Headers.IntentOptions.PublishSubscribe ? ActivityKind.Producer : ActivityKind.Client; var activityName = $"{messageType} send"; var initialTags = TagHelper.ExtractInitialTags(messageWrapper); // Per the spec on how to handle array types: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/common/common.md#attributes var destinationAddresses = context.Load <DestinationAddresses>(); initialTags.Add("messaging.destination", JsonConvert.SerializeObject(destinationAddresses.ToList())); // TODO: Transport specific tags, like rabbitmq routing key activity = RebusDiagnosticConstants.ActivitySource.StartActivity(activityName, activityKind, parentActivity.Context, initialTags); TagHelper.CopyBaggage(parentActivity, activity); // TODO: Figure out if this is actually needed now // DiagnosticListener.OnActivityImport(activity, context); } SendBeforeSendEvent(context); return(activity); }
private static Activity?StartActivity(IncomingStepContext context) { Activity?activity = null; if (RebusDiagnosticConstants.ActivitySource.HasListeners()) { var message = context.Load <TransportMessage>(); var headers = message.Headers; var messageType = message.GetMessageType(); var messageWrapper = new TransportMessageWrapper(message); var initialTags = TagHelper.ExtractInitialTags(messageWrapper); initialTags.Add("messaging.operation", "receive"); var activityKind = messageWrapper.GetIntentOption() == Headers.IntentOptions.PublishSubscribe ? ActivityKind.Consumer : ActivityKind.Server; var activityName = $"{messageType} receive"; if (!headers.TryGetValue(RebusDiagnosticConstants.TraceStateHeaderName, out var traceState)) { activity = RebusDiagnosticConstants.ActivitySource.StartActivity(activityName, activityKind, default(ActivityContext), initialTags); } else { activity = RebusDiagnosticConstants.ActivitySource.StartActivity(activityName, activityKind, traceState, initialTags); } if (activity != null) { CopyBaggage(headers, activity); } // TODO: Not sure if this is still needed // DiagnosticListener.OnActivityImport(activity, context); } SendBeforeProcessEvent(context, activity); return(activity); }