public void Run()
        {
            var sb = new StringBuilder("The following actions were taken to resolve issues with candidates:");

            sb.AppendLine();

            var candidatesToRequeue = _candidateDiagnosticsRepository.GetActivatedCandidatesWithUnsetLegacyId().ToList();

            foreach (var candidate in candidatesToRequeue)
            {
                _logger.Info("Re-queuing create candidate message for candidate id: {0}", candidate.EntityId);

                var message = new CreateCandidateRequest
                {
                    CandidateId = candidate.EntityId
                };

                _messageBus.PublishMessage(message);

                var requeuedMessage = string.Format("Re-queued create candidate message for candidate id: {0}", candidate.EntityId);
                _logger.Info(requeuedMessage);
                sb.AppendLine(requeuedMessage);
            }

            if (!candidatesToRequeue.Any())
            {
                ActionsTaken = false;
                return;
            }

            ActionsTaken = true;

            //Wait 5 seconds to allow messages to be processed. Nondeterministic of course
            Thread.Sleep(TimeSpan.FromSeconds(5));

            var activatedCandidatesWithUnsetLegacyId = _candidateDiagnosticsRepository.GetActivatedCandidatesWithUnsetLegacyId().ToList();

            if (activatedCandidatesWithUnsetLegacyId.Any())
            {
                sb.AppendLine("The actions taken did not resolve the following issues with candidates:");
                activatedCandidatesWithUnsetLegacyId.ForEach(c => sb.AppendLine(string.Format("Candidate with id: {0} is activated but has an unset legacy candidate id", c.EntityId)));
                _logger.Error(sb.ToString());
                ActionsSuccessful = false;
            }
            else
            {
                sb.AppendLine("The actions taken appear to have resolved the issues");
                _logger.Warn(sb.ToString());
                ActionsSuccessful = true;
            }
        }
Example #2
0
        public void ActivateCandidate(string username, string activationCode)
        {
            var user = _userReadRepository.Get(username);

            user.AssertState("Activate candidate", UserStatuses.PendingActivation);

            // Activate user before message submission so that they can continue using the site
            _registrationService.Activate(username, activationCode);

            // queue request for submission to legacy
            var message = new CreateCandidateRequest
            {
                CandidateId = user.EntityId
            };

            _logService.Info("Publishing CreateCandidateRequest for Candidate with Id: {0}", message.CandidateId);
            _messageBus.PublishMessage(message);
            _logService.Info("Successfully published CreateCandidateRequest for Candidate with Id: {0}", message.CandidateId);
        }