public async Task RecalculcateStatistics(TextWriter log) { await log.WriteLineAsync("Recalculating statistics"); var command = new UpdateStatisticCommands(_settings, _connectionFactory); await command.Recalculate(); await log.WriteLineAsync("Recalculation complete"); }
public async Task UpdateStats( [ServiceBusTrigger(ApplicationSettings.ConfirmationTopic, ApplicationSettings.StatsSubscription)] BrokeredMessage message, TextWriter log) { var subscription = message.GetBody <Subscription>(); var domain = subscription.GetDomain(); await log.WriteLineAsync($"Updating stats for {domain} due to entry for {subscription.EmailAddress}"); var update = new UpdateStatisticCommands(_settings, _connectionFactory); await update.AddConfirmation(domain); await log.WriteLineAsync("Stats updated"); }
public async Task SendNotification([ServiceBusTrigger(ApplicationSettings.JobMessagesQueue)] Guid id, TextWriter log) { try { await log.WriteLineAsync($"Sending notifications for {id}"); var query = new SubscriptionQuery(_settings, _connectionFactory); var subscription = await query.GetSubscriptionById(id); if (subscription == null || subscription.ConfirmationSentOn.HasValue) { return; } var mailMessage = _messageFactory.CreateConfirmationMessage(subscription); subscription.ConfirmationSentOn = DateTime.UtcNow; var update = new UpdateSubscriptionCommand(_settings, _connectionFactory); await update.Update(subscription, async (s, c, t) => { var updateStats = new UpdateStatisticCommands(_settings, _connectionFactory); await updateStats.AddOrUpdateDomainCount(subscription.GetDomain(), c, t); using (var smtpClient = new SmtpClient()) { await smtpClient.SendMailAsync(mailMessage); } }); await log.WriteLineAsync($"Sent email to {subscription.EmailAddress}"); } catch (Exception e) { log.Write($"GUID: {id}, Error: {e.Message}"); throw; } }
public static async Task ProcessMissingConfirmationEmails(TextWriter log) { await log.WriteLineAsync("Starting resend of missing confirmation emails"); var settings = new ApplicationSettings(""); var connectionFactory = new SqlConnectionFactory(); var query = new SubscriptionQuery(settings, connectionFactory); var subscriptions = await query.GetSubscriptionsWithMissingConfirmations(); var messageFactory = new MessageFactory(settings); var updater = new UpdateSubscriptionCommand(settings, connectionFactory); foreach (var subscription in subscriptions.Where(s => s.CreatedOn > DateTime.UtcNow.Date)) { await log.WriteLineAsync($"Sending confirmation email to {subscription.EmailAddress}"); subscription.ConfirmationSentOn = DateTime.UtcNow; await updater.Update(subscription, async (s, c, t) => { using (var smtpClient = new SmtpClient()) { var updateStats = new UpdateStatisticCommands(settings, connectionFactory); await updateStats.AddOrUpdateDomainCount(subscription.GetDomain(), c, t); await smtpClient.SendMailAsync(messageFactory.CreateConfirmationMessage(s)); } }); } await log.WriteLineAsync("Completed resend of missing confirmation emails"); }