private async Task CreateAlertIfNeeded(Subscriber subscriber, ActiveTaskInfo activeTaskInfo, ILogger log) { var now = DateTime.UtcNow.TimeOfDay; if (now > subscriber.StartWorkingHoursUtc && now < subscriber.EndWorkingHoursUtc && IsWeekDay()) { log.LogInformation($"It's working hours for {subscriber.Name}"); if (!activeTaskInfo.HasActiveTasks) { log.LogWarning($"No active tasks during working hours."); await _notifier.NoActiveTasksDuringWorkingHours(subscriber); } } else { log.LogInformation($"It's not working hours for {subscriber.Name}"); if (activeTaskInfo.HasActiveTasks) { log.LogWarning($"There is an active task outside of working hours."); await _notifier.ActiveTaskOutsideOfWorkingHours(subscriber); } } if (activeTaskInfo.ActiveTaskCount > 1) { log.LogWarning( $"{activeTaskInfo.ActiveTaskCount} active tasks at the same time."); await _notifier.MoreThanSingleTaskIsActive(subscriber); } }
private async Task CreateAlertIfNeeded(Subscriber subscriber, ActiveTasksInfo activeTasksInfo, ILogger log) { if (subscriber.SnoozeAlertsUntil.GetValueOrDefault(DateTime.MinValue) > DateTime.UtcNow) { log.LogInformation($"Alert checks snoozed for subscriber {subscriber.Email} til {subscriber.SnoozeAlertsUntil:G}"); return; } var now = DateTime.UtcNow.TimeOfDay; if (now > subscriber.StartWorkingHoursUtc && now < subscriber.EndWorkingHoursUtc && IsWeekDay()) { log.LogInformation($"It's working hours for {subscriber.Email}"); if (!activeTasksInfo.HasActiveTasks) { log.LogInformation($"No active tasks during working hours."); if (DateTime.UtcNow - subscriber.LastNoActiveTasksAlert >= PauseBetweenAlerts) { subscriber.LastNoActiveTasksAlert = DateTime.UtcNow; await _notifier.NoActiveTasksDuringWorkingHours(subscriber); } } } else { log.LogInformation($"It's not working hours for {subscriber.Email}"); if (activeTasksInfo.HasActiveTasks && DateTime.UtcNow - subscriber.LastActiveTaskOutsideOfWorkingHoursAlert >= PauseBetweenAlerts) { log.LogWarning($"There is an active task outside of working hours."); subscriber.LastActiveTaskOutsideOfWorkingHoursAlert = DateTime.UtcNow; await _notifier.ActiveTaskOutsideOfWorkingHours(subscriber, activeTasksInfo); } } if (activeTasksInfo.ActiveTaskCount > 1 && DateTime.UtcNow - subscriber.LastMoreThanSingleTaskIsActiveAlert >= PauseBetweenAlerts) { log.LogInformation( $"{activeTasksInfo.ActiveTaskCount} active tasks at the same time."); subscriber.LastMoreThanSingleTaskIsActiveAlert = DateTime.UtcNow; await _notifier.MoreThanSingleTaskIsActive(subscriber); } await _dbAccessor.AddOrUpdateSubscriber(subscriber); }