/// <summary>
        /// OnMethodBegin callback
        /// </summary>
        /// <typeparam name="TTarget">Type of the target</typeparam>
        /// <typeparam name="TSendMessageRequest">Type of the request object</typeparam>
        /// <param name="instance">Instance value, aka `this` of the instrumented method</param>
        /// <param name="request">The request for the SQS operation</param>
        /// <param name="cancellationToken">CancellationToken value</param>
        /// <returns>Calltarget state value</returns>
        internal static CallTargetState OnMethodBegin <TTarget, TSendMessageRequest>(TTarget instance, TSendMessageRequest request, CancellationToken cancellationToken)
        {
            if (request is null)
            {
                return(CallTargetState.GetDefault());
            }

            var requestProxy = request.DuckCast <ISendMessageRequest>();

            var scope = AwsSqsCommon.CreateScope(Tracer.Instance, Operation, out AwsSqsTags tags);

            tags.QueueUrl = requestProxy.QueueUrl;

            if (scope?.Span.Context != null)
            {
                ContextPropagation.InjectHeadersIntoMessage <TSendMessageRequest>(requestProxy, scope.Span.Context);
            }

            return(new CallTargetState(scope));
        }
Esempio n. 2
0
        /// <summary>
        /// OnMethodBegin callback
        /// </summary>
        /// <typeparam name="TTarget">Type of the target</typeparam>
        /// <typeparam name="TSendMessageBatchRequest">Type of the request object</typeparam>
        /// <param name="instance">Instance value, aka `this` of the instrumented method</param>
        /// <param name="request">The request for the SQS operation</param>
        /// <param name="cancellationToken">CancellationToken value</param>
        /// <returns>Calltarget state value</returns>
        internal static CallTargetState OnMethodBegin <TTarget, TSendMessageBatchRequest>(TTarget instance, TSendMessageBatchRequest request, CancellationToken cancellationToken)
        {
            if (request is null)
            {
                return(CallTargetState.GetDefault());
            }

            var requestProxy = request.DuckCast <ISendMessageBatchRequest>();

            var scope = AwsSqsCommon.CreateScope(Tracer.Instance, Operation, out AwsSqsTags tags);

            tags.QueueUrl = requestProxy.QueueUrl;

            if (scope?.Span?.Context != null && requestProxy.Entries.Count > 0)
            {
                for (int i = 0; i < requestProxy.Entries.Count; i++)
                {
                    var entry = requestProxy.Entries[i].DuckCast <IContainsMessageAttributes>();
                    ContextPropagation.InjectHeadersIntoMessage <TSendMessageBatchRequest>(entry, scope.Span.Context);
                }
            }

            return(new CallTargetState(scope));
        }