예제 #1
0
        /// <summary>
        /// Opens a dependency telemetry scope for async message sending. If the action returns, the
        /// scope will be autmatically ended. If action runs without error, success flag will be set
        /// to true. If the action throws an exception it will be logged under the scope and the
        /// success code will be false.
        /// </summary>
        /// <param name="serviceBusTelemetryHelper">The service bus telemetry helper.</param>
        /// <param name="brokeredMessage">The brokered message.</param>
        /// <param name="targetEntity">The target entity.</param>
        /// <param name="sendAction">The send action.</param>
        /// <returns>Task reference.</returns>
        /// <exception cref="System.ArgumentNullException">sendAction</exception>
        /// <exception cref="System.ArgumentException">Target entity is null or empty. - targetEntity</exception>
        /// <exception cref="ArgumentNullException">sendAction is null</exception>
        /// <exception cref="ArgumentException">Target entity is null or empty. - targetEntity</exception>
        public static async Task SendMessageAsync(this IServiceBusTelemetryHelper serviceBusTelemetryHelper, Message brokeredMessage, string targetEntity, Func <Task> sendAction)
        {
            if (brokeredMessage == null)
            {
                return;
            }

            if (sendAction == null)
            {
                throw new ArgumentNullException(nameof(sendAction));
            }

            if (string.IsNullOrWhiteSpace(targetEntity))
            {
                throw new ArgumentException("Target entity is null or empty.", nameof(targetEntity));
            }

            using (var scope = serviceBusTelemetryHelper.BeginMessageSendingScope(brokeredMessage, targetEntity))
            {
                try
                {
                    await sendAction().ConfigureAwait(false);

                    scope.SetSuccess(true);
                }
                catch (Exception ex)
                {
                    if (serviceBusTelemetryHelper.TrackException)
                    {
                        serviceBusTelemetryHelper.TelemetryClient.TrackException(ex);
                    }

                    scope.SetSuccess(false);
                    throw;
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Opens a Request scope for an async action processing the message. If the action returns,
        /// the scope will be autmatically ended. If action runs without error, success flag will be
        /// set to true. If the action throws an exception it will be logged under the scope and the
        /// success code will be false.
        /// </summary>
        /// <param name="serviceBusTelemetryHelper">The service bus telemetry helper.</param>
        /// <param name="brokeredMessage">The brokered message.</param>
        /// <param name="entityPath">The entity path.</param>
        /// <param name="messageProcessingAction">The message processing action.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>Task reference.</returns>
        /// <exception cref="System.ArgumentException">Entity path is null or empty. - entityPath</exception>
        /// <exception cref="System.ArgumentNullException">messageProcessingAction</exception>
        /// <exception cref="ArgumentNullException">messageProcessingAction</exception>
        public static async Task ProcessMessageAsync(this IServiceBusTelemetryHelper serviceBusTelemetryHelper, Message brokeredMessage, string entityPath, Func <CancellationToken, Task> messageProcessingAction, CancellationToken cancellationToken)
        {
            if (brokeredMessage == null)
            {
                return;
            }

            if (string.IsNullOrWhiteSpace(entityPath))
            {
                throw new ArgumentException("Entity path is null or empty.", nameof(entityPath));
            }

            if (messageProcessingAction == null)
            {
                throw new ArgumentNullException(nameof(messageProcessingAction));
            }

            using (var scope = serviceBusTelemetryHelper.BeginMessageProcessingScope(brokeredMessage, entityPath))
            {
                try
                {
                    await messageProcessingAction(cancellationToken).ConfigureAwait(false);

                    scope.SetSuccess(true);
                }
                catch (Exception ex)
                {
                    if (serviceBusTelemetryHelper.TrackException)
                    {
                        serviceBusTelemetryHelper.TelemetryClient.TrackException(ex);
                    }

                    scope.SetSuccess(false);
                    throw;
                }
            }
        }
예제 #3
0
        /// <summary>
        /// Sends the messages asynchronous.
        /// </summary>
        /// <param name="serviceBusTelemetryHelper">The service bus telemetry helper.</param>
        /// <param name="messages">The messages.</param>
        /// <param name="targetEntity">The target entity.</param>
        /// <param name="sendAction">The send action.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">sendAction</exception>
        /// <exception cref="ArgumentException">Target entity is null or empty. - targetEntity</exception>
        public static async Task SendMessagesAsync(this IServiceBusTelemetryHelper serviceBusTelemetryHelper, IEnumerable <Message> messages, string targetEntity, Func <IList <Message>, Task> sendAction)
        {
            if (messages?.Any() == false)
            {
                return;
            }

            if (sendAction == null)
            {
                throw new ArgumentNullException(nameof(sendAction));
            }

            if (string.IsNullOrWhiteSpace(targetEntity))
            {
                throw new ArgumentException("Target entity is null or empty.", nameof(targetEntity));
            }

            using (var scope = serviceBusTelemetryHelper.BeginMessageSendingScope(messages, targetEntity))
            {
                try
                {
                    await sendAction(messages.ToList()).ConfigureAwait(false);

                    scope.SetSuccess(true);
                }
                catch (Exception ex)
                {
                    if (serviceBusTelemetryHelper.TrackException)
                    {
                        serviceBusTelemetryHelper.TelemetryClient.TrackException(ex);
                    }

                    scope.SetSuccess(false);
                    throw;
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Opens a Request scope for an action processing the message. If the action returns, the
        /// scope will be autmatically ended. If action runs without error, success flag will be set
        /// to true. If the action throws an exception it will be logged under the scope and the
        /// success code will be false.
        /// </summary>
        /// <param name="serviceBusTelemetryHelper">The service bus telemetry helper.</param>
        /// <param name="brokeredMessage">The brokered message.</param>
        /// <param name="entityPath">The entity path.</param>
        /// <param name="messageProcessingAction">The message processing action.</param>
        /// <exception cref="System.ArgumentException">Entity path is null or empty. - entityPath</exception>
        /// <exception cref="System.ArgumentNullException">messageProcessingAction</exception>
        /// <exception cref="ArgumentNullException">messageProcessingAction is null</exception>
        public static void ProcessMessage(this IServiceBusTelemetryHelper serviceBusTelemetryHelper, Message brokeredMessage, string entityPath, Action messageProcessingAction)
        {
            if (brokeredMessage == null)
            {
                return;
            }

            if (string.IsNullOrWhiteSpace(entityPath))
            {
                throw new ArgumentException("Entity path is null or empty.", nameof(entityPath));
            }

            if (messageProcessingAction == null)
            {
                throw new ArgumentNullException(nameof(messageProcessingAction));
            }

            using (var scope = serviceBusTelemetryHelper.BeginMessageProcessingScope(brokeredMessage, entityPath))
            {
                try
                {
                    messageProcessingAction();
                    scope.SetSuccess(true);
                }
                catch (Exception ex)
                {
                    if (serviceBusTelemetryHelper.TrackException)
                    {
                        serviceBusTelemetryHelper.TelemetryClient.TrackException(ex);
                    }

                    scope.SetSuccess(false);
                    throw;
                }
            }
        }
예제 #5
0
        /// <summary>
        /// Sends the with telemetry asynchronous.
        /// </summary>
        /// <param name="topicClient">The topic client.</param>
        /// <param name="messages">The messages.</param>
        /// <param name="serviceBusTelemetryHelper">The service bus telemetry helper.</param>
        /// <returns>Task reference</returns>
        /// <exception cref="ArgumentNullException">serviceBusTelemetryHelper is null</exception>
        public static async Task SendWithTelemetryAsync(this ITopicClient topicClient, IEnumerable <Message> messages, IServiceBusTelemetryHelper serviceBusTelemetryHelper)
        {
            if (messages?.Any() == false)
            {
                return;
            }

            if (serviceBusTelemetryHelper == null)
            {
                throw new ArgumentNullException(nameof(serviceBusTelemetryHelper));
            }

            using (var scope = serviceBusTelemetryHelper.BeginMessageSendingScope(messages, topicClient.TopicName))
            {
                try
                {
                    await topicClient.SendAsync(messages.ToList()).ConfigureAwait(false);

                    scope.SetSuccess(true);
                }
                catch (Exception ex)
                {
                    if (serviceBusTelemetryHelper.TrackException)
                    {
                        serviceBusTelemetryHelper.TelemetryClient.TrackException(ex);
                    }

                    scope.SetSuccess(false);
                    throw;
                }
            }
        }
예제 #6
0
        /// <summary>
        /// Sends the with telemetry asynchronous.
        /// </summary>
        /// <param name="queueClient">The queue client.</param>
        /// <param name="message">The message.</param>
        /// <param name="serviceBusTelemetryHelper">The service bus telemetry helper.</param>
        /// <returns>Task reference.</returns>
        public static async Task SendWithTelemetryAsync(this IQueueClient queueClient, Message message, IServiceBusTelemetryHelper serviceBusTelemetryHelper)
        {
            if (message == null)
            {
                return;
            }

            if (serviceBusTelemetryHelper == null)
            {
                throw new ArgumentNullException(nameof(serviceBusTelemetryHelper));
            }

            using (var scope = serviceBusTelemetryHelper.BeginMessageSendingScope(message, queueClient.QueueName))
            {
                try
                {
                    await queueClient.SendAsync(message).ConfigureAwait(false);

                    scope.SetSuccess(true);
                }
                catch (Exception ex)
                {
                    if (serviceBusTelemetryHelper.TrackException)
                    {
                        serviceBusTelemetryHelper.TelemetryClient.TrackException(ex);
                    }

                    scope.SetSuccess(false);
                    throw;
                }
            }
        }