public async Task <bool> DeleteFromSecondary(Event @event, CancellationToken cancellationToken = default)
        {
            if (@event == null)
            {
                throw new ArgumentNullException(nameof(@event));
            }

            logger.LogTrace($"Starting {nameof(DeleteFromSecondary)}");

            var result = true;

            try
            {
                using (var metricLogger = new DurationMetricLogger(MetricNames.DeleteFromSecondaryDuration, logger))
                {
                    await secondaryClient.DeleteConfigurationSettingAsync(@event.Data.key, @event.Data.label, cancellationToken);
                }
            }
            catch (Exception ex)
            {
                logger.LogError(ex, $"Error during delete settings from secondary -> [{@event.Data.key},{@event.Data.label}]");
                result = false;;
            }

            logger.LogTrace($"Finish {nameof(DeleteFromSecondary)}");

            return(result);
        }
예제 #2
0
        public async Task DeleteEventAsync(Event @event)
        {
            if (@event == null)
            {
                throw new ArgumentNullException(nameof(@event));
            }
            if (@event.PersistenceId == null)
            {
                throw new ArgumentException(nameof(@event.PersistenceId));
            }

            logger.LogTrace($"Starting {nameof(DeleteEventAsync)}");

            try
            {
                var messageId = @event.PersistenceId as MessageIdentifier;

                using (var metricLogger = new DurationMetricLogger(MetricNames.DeleteMessageDuration, logger))
                {
                    await queueClient.DeleteMessageAsync(messageId.MessageId, messageId.PopReceipt);
                }
            }
            catch (Exception ex)
            {
                logger.LogError(ex, $"Error during deleting message from queue");
                throw;
            }

            logger.LogTrace($"Finish {nameof(DeleteEventAsync)}");
        }
예제 #3
0
        public async Task <IEnumerable <Event> > ReceiveEventsAsync(int numberOfEvents)
        {
            if (numberOfEvents <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(numberOfEvents));
            }

            logger.LogTrace($"Starting {nameof(ReceiveEventsAsync)}");

            IEnumerable <Event> result = null;

            try
            {
                using (var metricLogger = new DurationMetricLogger(MetricNames.RetrieveMessagesDuration, logger))
                {
                    var response = await queueClient.ReceiveMessagesAsync(numberOfEvents);

                    if (response.HasMessages())
                    {
                        result = response.Value.Select(m =>
                        {
                            var e           = m.CreateEvent();
                            e.PersistenceId = new MessageIdentifier()
                            {
                                MessageId  = m.MessageId,
                                PopReceipt = m.PopReceipt
                            };
                            return(e);
                        }).ToList();
                    }
                }
            }
            catch (Exception ex)
            {
                logger.LogError(ex, $"Error during retrieving messages from queue");
                result = null;
            }

            logger.LogTrace($"Finish {nameof(ReceiveEventsAsync)}");

            return(result);
        }
        public async Task AppConfigSyncFunction(
            [TimerTrigger("%UpdatePollingTime%")] TimerInfo timer,
            ILogger log)
        {
            await queueService.ConnectAsync();

            IEnumerable <Event> events;

            do
            {
                events = await queueService.ReceiveEventsAsync(30);

                if (events != null && events.Any())
                {
                    appConfigSyncService.Connect();
                    bool syncResult = true;
                    foreach (var @event in events)
                    {
                        using (var metricLogger = new DurationMetricLogger(MetricNames.EventSynchronizationDuration, log))
                        {
                            syncResult = true;
                            if (@event.IsKeyValueModified()) // the setting was added or updated
                            {
                                syncResult = await appConfigSyncService.UpsertToSecondary(@event);
                            }
                            else if (@event.IsKeyValueDeleted()) // the setting was deleted
                            {
                                syncResult = await appConfigSyncService.DeleteFromSecondary(@event);
                            }
                        }

                        if (syncResult)
                        {
                            await queueService.DeleteEventAsync(@event);
                        }
                    }
                }
            } while (events != null && events.Any());
        }