public async Task Handle(DomainCreated message) { string domainName = message.Id.ToLower(); MxEntityState state = await _dao.Get(domainName); if (state != null) { _log.LogInformation($"Ignoring {nameof(DomainCreated)} as MxEntity already exists for {domainName}."); return; } await _dao.Save(new MxEntityState(domainName)); _log.LogInformation($"Created MxEntity for {domainName}."); MxEntityCreated mxEntityCreated = new MxEntityCreated(domainName); _dispatcher.Dispatch(mxEntityCreated, _mxEntityConfig.SnsTopicArn); _log.LogInformation( $"An MxEntityCreated message for Domain: {domainName} has been dispatched to SnsTopic: {_mxEntityConfig.SnsTopicArn}"); Message createScheduledReminder = new CreateScheduledReminder(Guid.NewGuid().ToString(), "Mx", domainName, _clock.GetDateTimeUtc()); _dispatcher.Dispatch(createScheduledReminder, _mxEntityConfig.SnsTopicArn); _log.LogInformation( $"A CreateScheduledReminder message for Domain: {domainName} has been dispatched to SnsTopic: {_mxEntityConfig.SnsTopicArn}"); }
public async Task Handle(MxRecordsPolled message) { string domainName = message.Id.ToLower(); MxEntityState state = await LoadState(domainName, nameof(message)); MxState oldState = state.MxState; int oldRecordCount = state.HostMxRecords?.Count ?? 0; int newRecordCount = message.Records?.Count ?? 0; _changeNotifiersComposite.Handle(state, message); List <HostMxRecord> validHostRecords = new List <HostMxRecord>(); if (message.Records != null) { foreach (HostMxRecord hostRecord in message.Records) { if (Uri.CheckHostName(hostRecord.Id) != UriHostNameType.Unknown) { validHostRecords.Add(hostRecord); } else { _log.LogInformation($"Erroneous host: {hostRecord.Id} found for domain: {domainName}"); } } } if (message.Error == null) { state.HostMxRecords = validHostRecords; } state.LastUpdated = message.Timestamp; state.Error = message.Error; state.MxState = MxState.Evaluated; await _dao.Save(state); _log.LogInformation($"Updated MxEntity from {oldState} to {MxState.Evaluated} and MX records before: {oldRecordCount} after: {newRecordCount} for {domainName}."); Message mxRecordsUpdated = new MxRecordsUpdated(domainName, validHostRecords); _dispatcher.Dispatch(mxRecordsUpdated, _mxEntityConfig.SnsTopicArn); _log.LogInformation($"An MxRecordsUpdated message for Domain: {domainName} has been dispatched to SnsTopic: {_mxEntityConfig.SnsTopicArn}"); // Should probably change this so it only happens for a new host validHostRecords?.ForEach(mxRecord => { _dispatcher.Dispatch(new MxHostTestPending(mxRecord.Id), _mxEntityConfig.SnsTopicArn); _log.LogInformation($"An MxHostTestPending message for Host: {mxRecord.Id} has been dispatched to SnsTopic: {_mxEntityConfig.SnsTopicArn}"); }); Message createScheduledReminder = new CreateScheduledReminder(Guid.NewGuid().ToString(), "Mx", domainName, _clock.GetDateTimeUtc().AddSeconds(_mxEntityConfig.NextScheduledInSeconds)); _dispatcher.Dispatch(createScheduledReminder, _mxEntityConfig.SnsTopicArn); _log.LogInformation($"A CreateScheduledReminder message for Domain: {domainName} has been dispatched to SnsTopic: {_mxEntityConfig.SnsTopicArn}"); }
public async Task Handle(TlsResultsEvaluated message) { string messageId = message.Id.ToLower(); TlsEntityState state = await LoadState(messageId, nameof(message)); await _domainStatusPublisher.Publish(message); state.TlsState = TlsState.Evaluated; state.FailureCount = message.Failed ? state.FailureCount + 1 : 0; CreateScheduledReminder reminder; if (!message.Failed || message.Failed && state.FailureCount >= _tlsEntityConfig.MaxTlsRetryAttempts) { List <string> domains = await _dao.GetDomainsFromHost(messageId); _changeNotifiersComposite.Handle(state, message, domains); state.CertificateResults = message.Certificates; state.TlsRecords = message.TlsRecords; state.LastUpdated = message.Timestamp; await _dao.Save(state); _dispatcher.Dispatch(new TlsRecordEvaluationsChanged(messageId, state.TlsRecords, state.CertificateResults), _tlsEntityConfig.SnsTopicArn); reminder = new CreateScheduledReminder(Guid.NewGuid().ToString(), ServiceName, messageId, _clock.GetDateTimeUtc().AddSeconds(_tlsEntityConfig.NextScheduledInSeconds)); } else { await _dao.Save(state); reminder = new CreateScheduledReminder(Guid.NewGuid().ToString(), ServiceName, messageId, _clock.GetDateTimeUtc().AddSeconds(_tlsEntityConfig.FailureNextScheduledInSeconds)); } _dispatcher.Dispatch(reminder, _tlsEntityConfig.SnsTopicArn); }