示例#1
0
        private ReplayEventsResponse ReplayEvents(ReplayEventsCommand command)
        {
            try
            {
                var criteria = new LogEntryCriteria
                {
                    EventType     = command.EventType,
                    RoutingKey    = command.RoutingKey,
                    FromTimestamp = command.FromTimestamp,
                    ToTimestamp   = command.ToTimestamp
                };

                var logEntries = _repository.FindBy(criteria).ToList();
                _logger.LogTrace($"Found {logEntries.Count} log entries");

                logEntries = logEntries
                             .Where(entry => _routingKeyMatcher.IsMatch(criteria.RoutingKey, entry.RoutingKey)).ToList();
                _logger.LogTrace($"Filtered log entries, which results in {logEntries.Count} log entries");

                _eventReplayer.RegisterReplayExchange(command.ReplayExchangeName);

                _eventReplayer.ReplayLogEntries(logEntries);
                _logger.LogTrace($"Replayed {logEntries.Count} log entries");
            }
            catch (Exception exception)
            {
                _logger.LogError($"Internal error occured, with exception: {exception.Message}");
                return(new ReplayEventsResponse {
                    Code = StatusCodes.Status500InternalServerError, Status = "Internal Error"
                });
            }

            _logger.LogTrace("Sending response");
            return(new ReplayEventsResponse {
                Code = StatusCodes.Status200OK, Status = "OK"
            });
        }